সাধারণ সমস্যা এবং বাগ সম্পর্কে অভিযোগ জানানো

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

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

ওয়েব পুশ ডেভেলপ ও পরীক্ষা করার সময় দুটি আলাদা আলাদা ধাপ চেক করতে হয়, প্রতিটি ধাপে নিজস্ব সাধারণ সমস্যা / অসুবিধা থাকে:

  • মেসেজ পাঠানো: মেসেজ পাঠানো হয়েছে কিনা তা নিশ্চিত করুন। আপনি একটি ২০১ HTTP কোড পাবেন। আপনি যদি :
    • অনুমোদন সংক্রান্ত সমস্যা চেক করুন: আপনি যদি অনুমোদন সংক্রান্ত সমস্যার মেসেজ পান, তাহলে অনুমোদন সংক্রান্ত সমস্যা বিভাগ দেখুন।
    • অন্যান্য API সংক্রান্ত সমস্যা: আপনি যদি নন-২০১ স্ট্যাটাস কোড রেসপন্স পান, তাহলে সমস্যার কারণ সম্পর্কে নির্দেশিকা পেতে HTTP স্ট্যাটাস কোড বিভাগ দেখুন।
  • মেসেজ পাওয়া: আপনি যদি মেসেজ পাঠাতে পারেন, কিন্তু ব্রাউজারে মেসেজ না পান:

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

শুরু করার আগে আমি একটি কথা বলতে চাই, Firefox এবং Mozilla AutoPush পরিষেবায় খুব ভালো ত্রুটি মেসেজ আছে। আপনি যদি আটকে যান এবং সমস্যাটি কী তা নিশ্চিত না হন, তাহলে Firefox-এ পরীক্ষা করুন এবং দেখুন যে আপনি আরও সহায়ক ত্রুটি মেসেজ পান কিনা।

অনুমোদন সংক্রান্ত সমস্যা

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

Firefox এবং Chrome, দুটিতেই পুশ করার সবচেয়ে সহজ উপায় হল subscribe() কলে applicationServerKey প্রদান করা। তবে, এর খারাপ দিক হল, আপনার ফ্রন্ট এন্ড এবং সার্ভারের 'কী'-এর মধ্যে কোনও অমিল থাকলে, অনুমোদন সংক্রান্ত সমস্যা হবে।

Chrome এবং FCM-এ

Chrome-এর জন্য, যা পুশ পরিষেবা হিসেবে FCM ব্যবহার করে, আপনি বিভিন্ন ধরনের সমস্যার জন্য FCM থেকে একটি UnauthorizedRegistration উত্তর পাবেন, যার সবকটি অ্যাপ্লিকেশন সার্ভার কী-এর সাথে জড়িত।

নিম্নলিখিত যেকোনও পরিস্থিতিতে আপনি UnauthorizedRegistration সমস্যার মেসেজ পাবেন:

  • FCM-এ অনুরোধে আপনি Authorization হেডার নির্ধারণ করতে না পারলে।
  • ব্যবহারকারীকে সাবস্ক্রাইব করার জন্য ব্যবহৃত আপনার অ্যাপ্লিকেশন কী, অনুমোদনের হেডারে স্বাক্ষর করার জন্য ব্যবহৃত কী-এর সাথে মেলে না।
  • আপনার JWT-তে মেয়াদ শেষ হওয়ার তারিখ ভুল, অর্থাৎ মেয়াদ শেষ হওয়ার তারিখ ২৪ ঘণ্টার বেশি অথবা JWT-এর মেয়াদ শেষ হয়ে গেছে।
  • JWT-এর ফর্ম্যাট ভুল বা এতে ভুল ভ্যালু আছে।

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

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

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

Chrome-এ এই সমস্যার মেসেজ পেলে, Firefox-এ পরীক্ষা করে দেখুন যে সমস্যা সম্পর্কে আরও তথ্য পাওয়া যায় কিনা।

Firefox এবং Mozilla AutoPush

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 স্ট্যাটাস কোড

পুশ পরিষেবা থেকে নন-২০১ রেসপন্স কোড পাওয়ার পিছনে বিভিন্ন ধরনের সমস্যা থাকতে পারে। নিচে HTTP স্ট্যাটাস কোডের তালিকা এবং ওয়েব পুশের সাথে সম্পর্কিত অর্থ দেওয়া হল।

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

HTTP স্ট্যাটাস কোড এই তালিকায় না থাকলে এবং সমস্যার মেসেজ থেকে কিছু বোঝা না গেলে, Web Push Protocol spec চেক করে দেখুন যে স্ট্যাটাস কোডটি কোন পরিস্থিতিতে ব্যবহার করা যেতে পারে তার উল্লেখ আছে কিনা।

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

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

এমন হলে, 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 ইন্টার্নাল কানেকশন স্টেট।

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

সমস্যার রিপোর্ট করা

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

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

একটি ভাল ত্রুটির প্রতিবেদন প্রদান করতে, আপনাকে নিম্নলিখিত বিবরণ প্রদান করতে হবে:

  • আপনি যেসব ব্রাউজারে পরীক্ষা করেছেন (যেমন, Chrome ভার্সন ৫০, Chrome ভার্সন ৫১, Firefox ভার্সন ৫০, Firefox ভার্সন ৫১)।
  • একটি উদাহরণ PushSubscription যা সমস্যাটি দেখায়।
  • অনুরোধের কোনও উদাহরণ (যেমন, পুশ পরিষেবায় নেটওয়ার্ক অনুরোধের কন্টেন্ট, হেডার সহ) অন্তর্ভুক্ত করুন।
  • নেটওয়ার্ক অনুরোধ থেকে পাওয়া যেকোনও উদাহরণস্বরূপ উত্তরও অন্তর্ভুক্ত করুন।

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

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

কোড ল্যাব