সাধারণ সমস্যা এবং রিপোর্টিং বাগ

আপনি যখন ওয়েব পুশ দিয়ে কোনো সমস্যায় আঘাত করেন, তখন সমস্যাটি ডিবাগ করা বা সাহায্য পাওয়া কঠিন হতে পারে। এই ডকটি কিছু সাধারণ সমস্যার রূপরেখা দেয় এবং আপনি যদি Chrome বা Firefox-এ কোনো বাগ খুঁজে পান তাহলে আপনার কী করা উচিত।

আমরা ডিবাগিং পুশের মধ্যে ডুব দেওয়ার আগে, আপনি নিজেরাই ডিবাগিং পরিষেবা কর্মীদের সাথে সমস্যাগুলি আঘাত করতে পারেন, ফাইল আপডেট হচ্ছে না, নিবন্ধন করতে ব্যর্থ হওয়া বা সাধারণত অস্বাভাবিক আচরণ। পরিষেবা কর্মীদের ডিবাগ করার বিষয়ে একটি দুর্দান্ত নথি রয়েছে যা আমি দৃঢ়ভাবে চেক করার পরামর্শ দিই যে আপনি পরিষেবা কর্মী বিকাশে নতুন কিনা।

ওয়েব পুশের বিকাশ এবং পরীক্ষা করার সময় চেক বন্ধ করার জন্য দুটি স্বতন্ত্র পর্যায় রয়েছে, প্রতিটির নিজস্ব সাধারণ সমস্যা/সমস্যা রয়েছে:

  • একটি বার্তা পাঠানো: নিশ্চিত করুন যে বার্তা পাঠানো সফল হয়েছে। আপনি একটি 201 HTTP কোড পেতে হবে. আপনি যদি না হন:
  • একটি বার্তা গ্রহণ : আপনি যদি সফলভাবে একটি বার্তা পাঠাতে সক্ষম হন, কিন্তু ব্রাউজারে বার্তাটি গ্রহণ না হয়:

আপনি যদি একটি পুশ বার্তা পাঠাতে এবং গ্রহণ করতে সক্ষম না হন এবং এই ডকের প্রাসঙ্গিক বিভাগগুলি সমস্যাটি ডিবাগ করতে সহায়তা না করে তবে আপনি পুশ প্রক্রিয়াতেই একটি বাগ খুঁজে পেতে পারেন৷ এই ক্ষেত্রে, বাগ ফিক্সিং প্রক্রিয়া ত্বরান্বিত করার জন্য সমস্ত প্রয়োজনীয় তথ্য সহ একটি ভাল বাগ রিপোর্ট ফাইল করার জন্য বাগ রিপোর্ট উত্থাপন বিভাগটি দেখুন।

আমরা শুরু করার আগে একটি জিনিস বলতে চাই যে ফায়ারফক্স এবং মজিলা অটোপুশ পরিষেবাতে দুর্দান্ত ত্রুটি বার্তা রয়েছে৷ আপনি যদি আটকে যান এবং সমস্যাটি কী তা নিশ্চিত না হন, তাহলে ফায়ারফক্সে পরীক্ষা করুন এবং দেখুন আপনি আরও সহায়ক ত্রুটি বার্তা পান কিনা।

অনুমোদনের সমস্যা

অনুমোদনের সমস্যা হল ওয়েব পুশ দিয়ে শুরু করার সময় ডেভেলপারদের সবচেয়ে সাধারণ সমস্যাগুলির মধ্যে একটি। এটি সাধারণত একটি সাইটের অ্যাপ্লিকেশন সার্ভার কী (ওরফে VAPID কী) এর কনফিগারেশনের সাথে একটি সমস্যা।

ফায়ারফক্স এবং ক্রোম উভয় ক্ষেত্রেই পুশ সমর্থন করার সবচেয়ে সহজ উপায় হল subscribe() কলে একটি applicationServerKey সরবরাহ করা। নিচের দিকটি হল যে আপনার সামনের প্রান্ত এবং সার্ভারের কীগুলির মধ্যে কোনো অসঙ্গতি একটি অনুমোদন ত্রুটির কারণ হবে৷

Chrome এবং FCM-এ

ক্রোমের জন্য, যেটি পুশ পরিষেবা হিসাবে FCM ব্যবহার করে, আপনি বিভিন্ন ত্রুটির জন্য FCM থেকে একটি UnauthorizedRegistration প্রতিক্রিয়া পাবেন, সমস্ত অ্যাপ্লিকেশন সার্ভার কীগুলি জড়িত৷

আপনি নিম্নলিখিত পরিস্থিতিতে একটি UnauthorizedRegistration ত্রুটি পাবেন:

  • আপনি FCM-এর অনুরোধে একটি Authorization শিরোনাম সংজ্ঞায়িত করতে ব্যর্থ হলে।
  • ব্যবহারকারীর সদস্যতা নিতে ব্যবহৃত আপনার অ্যাপ্লিকেশন কী অনুমোদন শিরোনামে স্বাক্ষর করতে ব্যবহৃত কীটির সাথে মেলে না।
  • মেয়াদ শেষ হওয়া আপনার JWT-এ অবৈধ, অর্থাৎ মেয়াদ 24 ঘন্টা অতিক্রম করেছে বা JWT-এর মেয়াদ শেষ হয়ে গেছে।
  • JWT ত্রুটিপূর্ণ বা অবৈধ মান আছে।

সম্পূর্ণ ত্রুটি প্রতিক্রিয়া এই মত দেখায়:

<html>
  <head>
    <title>UnauthorizedRegistration</title>
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <h1>UnauthorizedRegistration</h1>

    <h2>Error 400</h2>
  </body>
</html>

আপনি যদি ক্রোমে এই ত্রুটির বার্তাটি পান, তাহলে ফায়ারফক্সে পরীক্ষা করার কথা বিবেচনা করুন এটি সমস্যাটির আরও অন্তর্দৃষ্টি প্রদান করবে কিনা।

ফায়ারফক্স এবং মজিলা অটোপুশ

Firefox এবং Mozilla AutoPush Authorization সমস্যাগুলির জন্য একটি বন্ধুত্বপূর্ণ ত্রুটি বার্তা প্রদান করে।

Authorization শিরোনামটি আপনার পুশ অনুরোধে অন্তর্ভুক্ত না হলে আপনি Mozilla AutoPush থেকে একটি Unauthorized ত্রুটির প্রতিক্রিয়াও পাবেন।

{
  "errno": 109,
  "message": "Request did not validate missing authorization header",
  "code": 401,
  "more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
  "error": "Unauthorized"
}

আপনার JWT-এর মেয়াদ শেষ হয়ে গেলে, আপনি একটি বার্তা সহ একটি Unauthorized ত্রুটিও পাবেন যা ব্যাখ্যা করে যে টোকেনের মেয়াদ শেষ হয়ে গেছে।

{
  "code": 401,
  "errno": 109,
  "error": "Unauthorized",
  "more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
  "message": "Request did not validate Invalid bearer token: Auth expired"
}

ব্যবহারকারীর সদস্যতা নেওয়ার সময় এবং অনুমোদনের শিরোনাম স্বাক্ষরিত হওয়ার মধ্যে অ্যাপ্লিকেশন সার্ভার কীগুলি ভিন্ন হলে, একটি Not Found ত্রুটি ফেরত দেওয়া হবে:

{
  "errno": 102,
  "message": "Request did not validate invalid token",
  "code": 404,
  "more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
  "error": "Not Found"
}

সবশেষে, আপনার JWT-তে যদি একটি অবৈধ মান থাকে (উদাহরণস্বরূপ যদি "alg" মানটি একটি অপ্রত্যাশিত মান হয়), আপনি Mozilla AutoPush থেকে নিম্নলিখিত ত্রুটিটি পাবেন:

{
  "code": 401,
  "errno": 109,
  "error": "Unauthorized",
  "more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
  "message": "Request did not validate Invalid Authorization Header"
}

HTTP স্থিতি কোড

একটি পুশ পরিষেবা থেকে একটি নন-201 প্রতিক্রিয়া কোড হতে পারে এমন অনেকগুলি সমস্যা রয়েছে৷ নীচে HTTP স্ট্যাটাস কোডগুলির একটি তালিকা রয়েছে এবং ওয়েব পুশের ক্ষেত্রে সেগুলি কী বোঝায়।

স্ট্যাটাস কোড বর্ণনা
429 অনেক অনুরোধ. আপনার অ্যাপ্লিকেশন সার্ভার একটি পুশ পরিষেবা সহ একটি হারের সীমায় পৌঁছেছে৷ পরিষেবা থেকে প্রতিক্রিয়া একটি 'পুনরায় চেষ্টা-পরে' শিরোনাম অন্তর্ভুক্ত করা উচিত নির্দেশ করার জন্য কতক্ষণ আগে আরেকটি অনুরোধ করা যেতে পারে।
400 অবৈধ অনুরোধ. আপনার শিরোনামগুলির একটি অবৈধ বা খারাপভাবে বিন্যাস করা হয়েছে৷
404 পাওয়া যায়নি। এই ক্ষেত্রে আপনার পিছনের প্রান্ত থেকে PushSubscription মুছে ফেলা উচিত এবং ব্যবহারকারীর পুনরায় সদস্যতা নেওয়ার সুযোগের জন্য অপেক্ষা করা উচিত।
410 চলে গেছে। সদস্যতা আর বৈধ নয় এবং আপনার পিছনের প্রান্ত থেকে সরানো উচিত। এটি একটি `পুশসাবস্ক্রিপশন`-এ `আনসাবস্ক্রাইব()` কল করে পুনরুত্পাদন করা যেতে পারে।
413 পেলোডের আকার খুব বড়। সর্বনিম্ন আকারের পেলোড একটি পুশ পরিষেবাকে সমর্থন করতে হবে 4096 বাইট (বা 4kb)। বড় যে কোনো কিছুর ফলে এই ত্রুটি হতে পারে।

যদি HTTP স্ট্যাটাস কোড এই তালিকায় না থাকে এবং ত্রুটি বার্তাটি সহায়ক না হয়, তাহলে সেই স্ট্যাটাস কোডটি কখন ব্যবহার করা যেতে পারে তার একটি দৃশ্যের সাথে স্ট্যাটাস কোডটি উল্লেখ করা হয়েছে কিনা তা দেখতে ওয়েব পুশ প্রোটোকল স্পেকটি পরীক্ষা করুন।

পেলোড এনক্রিপশন সমস্যা

আপনি যদি সফলভাবে একটি পুশ বার্তা ট্রিগার করতে পারেন (যেমন একটি ওয়েব পুশ পরিষেবাতে একটি বার্তা পাঠান এবং একটি 201 প্রতিক্রিয়া কোড পান) কিন্তু পুশ ইভেন্টটি কখনই আপনার পরিষেবা কর্মীতে ফায়ার করে না, এটি সাধারণত নির্দেশ করে যে ব্রাউজারটি প্রাপ্ত বার্তাটিকে ডিক্রিপ্ট করতে ব্যর্থ হয়েছে৷

যদি এটি হয়, তাহলে আপনি Firefox এর DevTools কনসোলে একটি ত্রুটি বার্তা দেখতে পাবেন:

ডিক্রিপশন বার্তা সহ Firefox DevTools।

এটি Chrome-এ সমস্যা কিনা তা পরীক্ষা করতে, নিম্নলিখিতগুলি করুন:

  1. about://gcm-internals-এ যান এবং "স্টার্ট রেকর্ডিং" বোতামে ক্লিক করুন।

Chrome GCM অভ্যন্তরীণ রেকর্ড।

  1. একটি পুশ বার্তা ট্রিগার করুন এবং "মেসেজ ডিক্রিপশন ব্যর্থতা লগ" এর নীচে দেখুন।

GCM অভ্যন্তরীণ ডিক্রিপশন লগ।

পেলোডের ডিক্রিপশনে কোনো সমস্যা হলে, আপনি উপরে প্রদর্শিত ত্রুটির মতো একটি ত্রুটি দেখতে পাবেন। (বিশদ কলামে AES-GCM decryption failed বার্তাটি লক্ষ্য করুন।)

কিছু টুল আছে যা আপনার সমস্যা হলে এনক্রিপশন ডিবাগ করতে সাহায্য করতে পারে:

সংযোগ সমস্যা

আপনি যদি আপনার পরিষেবা কর্মীতে কোনও পুশ ইভেন্ট না পান এবং আপনি কোনও ডিক্রিপশন ত্রুটি দেখতে না পান তবে ব্রাউজারটি পুশ পরিষেবার সাথে সংযোগ করতে ব্যর্থ হতে পারে৷

Chrome-এ, আপনি about://gcm-internals এ 'রিসিভ মেসেজ লগ' (sic) পরীক্ষা করে ব্রাউজার বার্তা পাচ্ছে কিনা তা পরীক্ষা করতে পারেন।

GCM অভ্যন্তরীণ বার্তা লগ গ্রহণ করে।

আপনি যদি বার্তাটি সময়মতো পৌঁছাতে না দেখেন, তাহলে নিশ্চিত করুন যে আপনার ব্রাউজারের সংযোগের স্থিতি CONNECTED রয়েছে:

GCM অভ্যন্তরীণ সংযোগের অবস্থা।

এটি 'সংযুক্ত' না হলে, আপনাকে আপনার বর্তমান প্রোফাইল মুছে ফেলতে হবে এবং একটি নতুন তৈরি করতে হবে৷ যদি এটি এখনও সমস্যার সমাধান না করে, তাহলে অনুগ্রহ করে নীচের পরামর্শ অনুযায়ী একটি বাগ রিপোর্ট উত্থাপন করুন৷

বাগ রিপোর্ট উত্থাপন

যদি উপরের কোনটিই আপনার সমস্যায় সাহায্য না করে এবং সমস্যাটি কী হতে পারে তার কোনো লক্ষণ না থাকে, তাহলে অনুগ্রহ করে আপনার যে ব্রাউজারটিতে সমস্যা হচ্ছে তার বিরুদ্ধে একটি সমস্যা উত্থাপন করুন:

ক্রোমের জন্য, আপনি এখানে সমস্যাটি উত্থাপন করবেন: https://bugs.chromium.org/p/chromium/issues/list ফায়ারফক্সের জন্য, আপনাকে এখানে সমস্যাটি উত্থাপন করা উচিত: https://bugzilla.mozilla.org/

একটি ভাল বাগ রিপোর্ট প্রদান করতে, আপনাকে নিম্নলিখিত বিবরণ প্রদান করা উচিত:

  • আপনি যে ব্রাউজারগুলি পরীক্ষা করেছেন (যেমন ক্রোম সংস্করণ 50, ক্রোম সংস্করণ 51, ফায়ারফক্স সংস্করণ 50, ফায়ারফক্স সংস্করণ 51)।
  • একটি উদাহরণ PushSubscription যা সমস্যা প্রদর্শন করে।
  • যেকোনো উদাহরণের অনুরোধ অন্তর্ভুক্ত করুন (যেমন একটি পুশ পরিষেবাতে নেটওয়ার্ক অনুরোধের বিষয়বস্তু, শিরোনাম সহ)।
  • পাশাপাশি নেটওয়ার্ক অনুরোধ থেকে কোনো উদাহরণ প্রতিক্রিয়া অন্তর্ভুক্ত করুন.

আপনি যদি একটি পুনরুত্পাদনযোগ্য উদাহরণ প্রদান করতে পারেন, হয় সোর্স কোড বা হোস্ট করা ওয়েব সাইট, এটি প্রায়শই সমস্যাটি নির্ণয় এবং সমাধানের গতি বাড়িয়ে দেয়।

পরের দিকে কোথায় যেতে হবে

কোড ল্যাব