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

वेब पुश में कोई समस्या आने पर, उसे डीबग करना या मदद पाना मुश्किल हो सकता है. इस दस्तावेज़ में कुछ आम समस्याओं के बारे में बताया गया है. साथ ही, यह भी बताया गया है कि 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 हो गया. सदस्यता अब मान्य नहीं है और इसे आपके बैक एंड से हटा दिया जाना चाहिए. `पुशसदस्यता` पर `सदस्यता छोड़ें()` को कॉल करके, इसे फिर से जनरेट किया जा सकता है.
413 पेलोड का साइज़ बहुत बड़ा है. किसी पुश सेवा के लिए काम करने वाला पेलोड कम से कम 4096 बाइट (या 4kb) का होना चाहिए. किसी भी साइज़ को बड़ा करने पर यह गड़बड़ी हो सकती है.

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

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

अगर आपने किसी पुश मैसेज (जैसे कि वेब पुश सेवा को मैसेज भेजना और 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 के इंटरनल कनेक्शन की स्थिति.

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

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

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

Chrome के लिए, आपको यह समस्या यहां बताई जाएगी: https://bugs.chromium.org/p/chromium/issues/list Firefox के लिए, आपको इस समस्या के बारे में यहां बताना चाहिए: https://bugzilla.mozilla.org/

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

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

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

आगे कहां जाना है

कोड लैब