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

वेब पुश से जुड़ी कोई समस्या होने पर, उसे डीबग करना या मदद पाना मुश्किल हो सकता है. इस दस्तावेज़ में, कुछ सामान्य समस्याओं के बारे में बताया गया है. साथ ही, यह भी बताया गया है कि अगर आपको 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 में 'मैसेज पाने का लॉग' (sic) देखकर यह पता लगाया जा सकता है कि ब्राउज़र को मैसेज मिल रहे हैं या नहीं.

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 का उदाहरण.
  • अनुरोधों के उदाहरण शामिल करें. जैसे, पुश सेवा के लिए नेटवर्क अनुरोधों का कॉन्टेंट, जिसमें हेडर भी शामिल हैं.
  • नेटवर्क अनुरोधों के जवाबों के उदाहरण भी शामिल करें.

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

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

कोड लैब