सामान्य समस्याएं और रिपोर्टिंग बग

वेब पुश से जुड़ी कोई समस्या होने पर, उसे डीबग करना या मदद पाना मुश्किल हो सकता है. इस दस्तावेज़ में, कुछ सामान्य समस्याओं के बारे में बताया गया है. साथ ही, यह भी बताया गया है कि अगर आपको Chrome या Firefox में कोई गड़बड़ी मिलती है, तो आपको क्या करना चाहिए.

पुश को डीबग करने से पहले, हो सकता है कि आपको सेवा वर्कर को डीबग करने में समस्याएं आ रही हों. जैसे, फ़ाइल अपडेट न होना, रजिस्ट्रेशन न हो पाना या आम तौर पर, सामान्य से अलग व्यवहार. अगर आपने अब तक सेवा वर्कर डेवलप नहीं किया है, तो हमारा सुझाव है कि आप सेवा वर्कर को डीबग करने के बारे में बेहतरीन दस्तावेज़ पढ़ें.

वेब पुश को डेवलप करते समय और उसकी जांच करते समय, दो अलग-अलग स्टेज की जांच की जाती है. हर चरण में सामान्य समस्याओं / समस्याओं का अपना सेट होता है:

अगर आपको पुश मैसेज भेजने और पाने में समस्या आ रही है और इस दस्तावेज़ के काम के सेक्शन से समस्या को डीबग करने में मदद नहीं मिल रही है, तो हो सकता है कि पुश मैसेज भेजने और पाने की सुविधा में कोई गड़बड़ी हो. इस मामले में, गड़बड़ी की रिपोर्ट करना सेक्शन देखें. इससे आपको गड़बड़ी की अच्छी रिपोर्ट सबमिट करने में मदद मिलेगी. इसमें गड़बड़ी को ठीक करने की प्रोसेस को तेज़ करने के लिए, ज़रूरी जानकारी शामिल होनी चाहिए.

शुरू करने से पहले, मुझे एक बात बतानी है कि Firefox और Mozilla AutoPush Service में गड़बड़ी के बारे में बेहतरीन मैसेज मिलते हैं. अगर आपको कोई समस्या आती है और आपको पता नहीं है कि समस्या क्या है, तो Firefox में जांच करें और देखें कि क्या आपको गड़बड़ी का कोई ज़्यादा मददगार मैसेज मिलता है.

अनुमति से जुड़ी समस्याएं

वेब पुश का इस्तेमाल शुरू करते समय, अनुमति से जुड़ी समस्याएं डेवलपर को अक्सर आती हैं. आम तौर पर, यह समस्या किसी साइट की ऐप्लिकेशन सर्वर कुंजियों (जिन्हें VAPID कुंजियां भी कहा जाता है) के कॉन्फ़िगरेशन से जुड़ी होती है .

Firefox और Chrome, दोनों में पुश नोटिफ़िकेशन की सुविधा इस्तेमाल करने का सबसे आसान तरीका यह है कि subscribe() कॉल में applicationServerKey सबमिट करें. इसकी कमी यह है कि आपके फ़्रंट एंड और सर्वर की कुंजियों के बीच किसी भी अंतर की वजह से, अनुमति से जुड़ी गड़बड़ी हो सकती है.

Chrome और FCM पर

Chrome, पुश सेवा के तौर पर 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>

अगर आपको 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"
}

एचटीटीपी स्टेटस कोड

कई तरह की समस्याओं की वजह से, पुश सेवा से 201 के अलावा कोई दूसरा रिस्पॉन्स कोड मिल सकता है. यहां एचटीटीपी स्टेटस कोड की सूची दी गई है. साथ ही, यह भी बताया गया है कि वेब पुश से जुड़े इन कोड का क्या मतलब है.

स्थिति कोड ब्यौरा
429 बहुत ज़्यादा अनुरोध. आपके ऐप्लिकेशन सर्वर पर, पुश सेवा के लिए तय की गई दर की सीमा पूरी हो गई है. सेवा से मिले रिस्पॉन्स में 'बाद में कोशिश करें' हेडर शामिल होना चाहिए, ताकि यह पता चल सके कि दूसरा अनुरोध करने से कितने समय पहले तक अनुरोध किया जा सकता है.
400 अनुरोध अमान्य है. आपका कोई हेडर अमान्य है या उसका फ़ॉर्मैट सही नहीं है.
404 नहीं मिला. ऐसे मामले में, आपको अपने बैक एंड से PushSubscription को मिटा देना चाहिए और उपयोगकर्ता के फिर से सदस्यता लेने के मौके की इंतज़ार करना चाहिए.
410 नहीं दिख रहा. सदस्यता अब मान्य नहीं है और इसे आपके बैक एंड से हटा दिया जाना चाहिए. इसे फिर से चलाने के लिए, किसी `PushSubscription` पर `unsubscribe()` को कॉल करें.
413 पेलोड का साइज़ बहुत बड़ा है. पुश सेवा के लिए, कम से कम 4,096 बाइट (या 4 केबी) का पेलोड होना चाहिए. इससे बड़ी फ़ाइल अपलोड करने पर, यह गड़बड़ी दिख सकती है.

अगर एचटीटीपी स्टेटस कोड इस सूची में नहीं है और गड़बड़ी का मैसेज मददगार नहीं है, तो वेब पुश प्रोटोकॉल के स्पेसिफ़िकेशन देखें. इससे यह पता चलेगा कि स्टेटस कोड का रेफ़रंस दिया गया है या नहीं. साथ ही, यह भी पता चलेगा कि स्टेटस कोड का इस्तेमाल कब किया जा सकता है.

पेलोड को एन्क्रिप्ट (सुरक्षित) करने से जुड़ी समस्या

अगर आपने पुश मैसेज ट्रिगर कर लिया है (जैसे, किसी वेब पुश सेवा को मैसेज भेजना और 201 रिस्पॉन्स कोड पाना), लेकिन पुश इवेंट कभी भी आपके सर्विस वर्कर में ट्रिगर नहीं होता, तो इसका मतलब है कि ब्राउज़र, भेजे गए मैसेज को डिक्रिप्ट नहीं कर सका.

अगर ऐसा है, तो आपको Firefox के DevTools console में गड़बड़ी का मैसेज दिखेगा. यह मैसेज इस तरह का होगा:

डिक्रिप्ट करने के मैसेज के साथ Firefox DevTools.

क्या वाकई यही समस्या Chrome में है, यह पता लगाने के लिए यह तरीका अपनाएं:

  1. about://gcm-internals पर जाएं और "रिकॉर्डिंग शुरू करें" बटन पर क्लिक करें.

Chrome GCM के इंटरनल रिकॉर्ड.

  1. कोई पुश मैसेज ट्रिगर करें और "मैसेज को डिक्रिप्ट न कर पाने से जुड़ी गड़बड़ी का लॉग" देखें.

GCM के अंदरूनी डिक्रिप्शन लॉग.

अगर पेलोड के डिक्रिप्शन में कोई समस्या है, तो आपको ऊपर बताई गई गड़बड़ी से मिलती-जुलती गड़बड़ी दिखेगी. (जानकारी वाले कॉलम में AES-GCM decryption failed मैसेज पर ध्यान दें.)

अगर आपकी समस्या है, तो कुछ ऐसे टूल हैं जो एन्क्रिप्शन को डीबग करने में आपकी मदद कर सकते हैं:

कनेक्शन की समस्या

अगर आपको अपने सेवा वर्कर में कोई पुश इवेंट नहीं मिल रहा है और आपको डिक्रिप्ट करने से जुड़ी कोई गड़बड़ी नहीं दिख रही है, तो हो सकता है कि ब्राउज़र किसी पुश सेवा से कनेक्ट न हो पा रहा हो.

Chrome में, about://gcm-internals में 'मैसेज लॉग पाएं' (एसआईसी) की जांच करके, यह पता लगाया जा सकता है कि ब्राउज़र को मैसेज मिल रहे हैं या नहीं.

GCM के इंटरनल को मैसेज लॉग मिलता है.

अगर आपको मैसेज समय पर नहीं दिख रहा है, तो पक्का करें कि आपके ब्राउज़र का कनेक्शन स्टेटस CONNECTED हो:

GCM के इंटरनल कनेक्शन की स्थिति.

अगर यह 'कनेक्टेड' के तौर पर नहीं दिख रहा है, तो आपको अपनी मौजूदा प्रोफ़ाइल मिटानी पड़ सकती है और नई प्रोफ़ाइल बनानी पड़ सकती है. अगर इससे भी समस्या ठीक नहीं होती है, तो कृपया गड़बड़ी की शिकायत करें. इसके लिए, यहां दिया गया तरीका अपनाएं.

गड़बड़ी की रिपोर्ट करना

अगर ऊपर बताए गए तरीकों से आपकी समस्या हल नहीं होती है और आपको पता नहीं चल पा रहा है कि समस्या क्या हो सकती है, तो कृपया उस ब्राउज़र के लिए समस्या दर्ज करें जिससे आपको समस्या आ रही है:

Chrome के लिए, समस्या यहां बताएं: https://bugs.chromium.org/p/chromium/issues/list Firefox के लिए, समस्या यहां बताएं: https://bugzilla.mozilla.org/

गड़बड़ी की अच्छी रिपोर्ट देने के लिए, आपको यह जानकारी देनी चाहिए:

  • जिन ब्राउज़र में आपने जांच की है (उदाहरण के लिए, Chrome का वर्शन 50, Chrome का वर्शन 51, Firefox का वर्शन 50, Firefox का वर्शन 51).
  • समस्या की जानकारी देने वाला PushSubscription का उदाहरण.
  • अनुरोधों के उदाहरण शामिल करें. जैसे, पुश सेवा के लिए नेटवर्क अनुरोधों का कॉन्टेंट, जिसमें हेडर भी शामिल हैं.
  • नेटवर्क अनुरोधों के जवाबों के उदाहरण भी शामिल करें.

अगर सोर्स कोड या होस्ट की गई वेब साइट का कोई उदाहरण दिया जा सकता है, तो समस्या का पता लगाकर उसे हल किया जा सकता है.

आगे क्या करना है

कोड लैब