पुश नोटिफ़िकेशन के बारे में अक्सर पूछे जाने वाले सवाल

ब्राउज़र बंद होने पर, पुश नोटिफ़िकेशन क्यों काम नहीं करते?

यह सवाल अक्सर पूछा जाता है. इसकी वजह यह है कि कुछ स्थितियों में, इसे समझना और इसके बारे में तर्क करना मुश्किल हो जाता है.

आइए, Android से शुरू करते हैं. Android OS को पुश मैसेज सुनने के लिए डिज़ाइन किया गया है. पुश मैसेज मिलने पर, यह उस Android ऐप्लिकेशन को चालू कर देता है जो पुश मैसेज को मैनेज कर सकता है. भले ही, वह ऐप्लिकेशन बंद हो या नहीं.

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

डेस्कटॉप ओएस पर, यह ज़्यादा बारीक है और Mac OS X पर इसे समझना सबसे आसान है, क्योंकि अलग-अलग स्थितियों को समझाने के लिए एक विज़ुअल इंडिकेटर है.

Mac OS X पर, यह पता लगाया जा सकता है कि कोई प्रोग्राम चल रहा है या नहीं. इसके लिए, डॉक में ऐप्लिकेशन आइकॉन के नीचे मौजूद मार्किंग देखें.

नीचे दिए गए डॉक में मौजूद दो Chrome आइकॉन की तुलना करने पर, बाईं ओर मौजूद आइकॉन चालू है, जैसा कि आइकॉन के नीचे मौजूद मार्किंग से पता चलता है. वहीं, दाईं ओर मौजूद Chrome चालू नहीं है, इसलिए उसके नीचे मार्किंग नहीं है.

OS X का उदाहरण

डेस्कटॉप पर पुश मैसेज पाने के मामले में, आपको मैसेज तब मिलेंगे, जब ब्राउज़र चल रहा होगा. इसका मतलब है कि आइकॉन के नीचे मार्किंग होगी.

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

ब्राउज़र पूरी तरह बंद होने पर ही पुश नहीं मिलेगा. इसका मतलब है कि ब्राउज़र बिल्कुल नहीं चल रहा है (कोई मार्किंग नहीं). यह बात Windows पर भी लागू होती है. हालांकि, यह पता लगाना थोड़ा मुश्किल होता है कि Chrome बैकग्राउंड में चल रहा है या नहीं.

मैं होम स्क्रीन पर मौजूद वेब ऐप्लिकेशन को, पुश नोटिफ़िकेशन मिलने पर फ़ुलस्क्रीन मोड में कैसे खोलूं?

'Android के लिए Chrome' पर, होम स्क्रीन पर वेब ऐप्लिकेशन जोड़ा जा सकता है. जब होम स्क्रीन से वेब ऐप्लिकेशन खोला जाता है, तो यह यूआरएल बार के बिना फ़ुलस्क्रीन मोड में लॉन्च हो सकता है, जैसा कि यहां दिखाया गया है.

होम स्क्रीन के आइकॉन को फ़ुल स्क्रीन में बदलना

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

Chrome ने इसे "कुछ हद तक" लागू किया है. हालांकि, आपको यह भरोसेमंद और समझने में मुश्किल लग सकता है. इसे लागू करने से जुड़ी ज़रूरी जानकारी:

इसका मतलब है कि जब तक आपका उपयोगकर्ता होम स्क्रीन आइकॉन के ज़रिए आपकी साइट पर नियमित तौर पर नहीं जाता, तब तक आपकी सूचनाएं सामान्य ब्राउज़र यूज़र इंटरफ़ेस (यूआई) में खुलेंगी.

इस समस्या पर आगे काम किया जाएगा.

यह वेब सॉकेट से बेहतर क्यों है?

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

GCM, FCM, वेब पुश, और Chrome के बीच क्या संबंध है?

इस सवाल के कई पहलू हैं. इसे समझने का सबसे आसान तरीका यह है कि वेब पुश और Chrome के इतिहास को सिलसिलेवार तरीके से समझा जाए. (चिंता न करें, यह छोटा है.)

दिसंबर 2014

जब Chrome ने पहली बार वेब पुश की सुविधा लागू की थी, तब Chrome ने सर्वर से ब्राउज़र पर पुश मैसेज भेजने के लिए, Google Cloud Messaging (GCM) का इस्तेमाल किया था.

यह वेब पुश नहीं था. Chrome और GCM के इस शुरुआती सेट-अप को "असल" वेब पुश न माना गया, इसकी कुछ वजहें हैं.

  • GCM का इस्तेमाल करने के लिए, डेवलपर को Google Developers Console पर खाता सेट अप करना होगा.
  • Chrome और GCM को वेब ऐप्लिकेशन से शेयर किए जाने वाले, मैसेज भेजने वाले किसी खास आईडी की ज़रूरत होती है, ताकि मैसेज सेवा को सही तरीके से सेट अप किया जा सके.
  • GCM के सर्वर ने कस्टम एपीआई का ऐसा अनुरोध स्वीकार कर लिया जो वेब स्टैंडर्ड नहीं था.

जुलाई 2016

जुलाई में, वेब पुश में एक नई सुविधा लॉन्च की गई - ऐप्लिकेशन सर्वर पासकोड (या VAPID, जैसा कि स्पेसिफ़िकेशन में बताया गया है). जब Chrome ने इस नए एपीआई के लिए सहायता जोड़ी, तो उसने मैसेज सेवा के तौर पर GCM के बजाय Firebase Cloud Messaging (जिसे FCM भी कहा जाता है) का इस्तेमाल किया. ऐसा करना इन वजहों से ज़रूरी है:

  • Chrome और ऐप्लिकेशन सर्वर पासकोड को Google या Firebase के साथ सेट अप करने के लिए, किसी भी तरह के प्रोजेक्ट की ज़रूरत नहीं होती. यह आसानी से काम करेगा.
  • FCM, वेब पुश प्रोटोकॉल के साथ काम करता है. यह एक ऐसा एपीआई है जिस पर सभी वेब पुश सेवाएं काम करेंगी. इसका मतलब है कि कोई ब्राउज़र किसी भी पुश सेवा का इस्तेमाल करे, आपको एक ही तरह का अनुरोध करना होगा. इसके बाद, वह मैसेज भेज देगा.

आज यह भ्रम क्यों है?

वेब पुश के विषय पर कॉन्टेंट लिखे जाने की वजह से, अब बहुत ज़्यादा भ्रम की स्थिति है. इसमें से ज़्यादातर कॉन्टेंट में GCM या FCM का रेफ़रंस दिया गया है. अगर कॉन्टेंट में GCM का रेफ़रंस दिया गया है, तो आपको इसे इस बात के संकेत के तौर पर लेना चाहिए कि यह पुराना कॉन्टेंट है या यह Chrome पर ज़्यादा फ़ोकस कर रहा है. (मैंने कई पुरानी पोस्ट में ऐसा किया है.)

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

इस गाइड में, वेब पुश के स्टैंडर्ड तरीके पर फ़ोकस किया गया है. इसमें जान-बूझकर किसी और तरीके को शामिल नहीं किया गया है.

Firebase में JavaScript SDK टूल है. क्या और क्यों?

अगर आपको Firebase वेब SDK टूल मिला है और आपने देखा है कि इसमें JavaScript के लिए मैसेजिंग एपीआई है, तो हो सकता है कि आप यह जानना चाहें कि यह वेब पुश से कैसे अलग है.

मैसेजिंग SDK टूल (जिसे Firebase Cloud Messaging JS SDK टूल के तौर पर जाना जाता है), वेब पुश को आसानी से लागू करने के लिए, पर्दे के पीछे कुछ तरकीबें अपनाता है.

  • PushSubscription और उसके अलग-अलग फ़ील्ड के बारे में चिंता करने के बजाय, आपको सिर्फ़ FCM टोकन (स्ट्रिंग) के बारे में सोचना होगा.
  • हर उपयोगकर्ता के लिए टोकन का इस्तेमाल करके, पुश मैसेज को ट्रिगर करने के लिए, मालिकाना हक वाले FCM API का इस्तेमाल किया जा सकता है. इस एपीआई के लिए, पेलोड को एन्क्रिप्ट (सुरक्षित) करने की ज़रूरत नहीं होती. आपके पास, POST अनुरोध बॉडी में प्लैन टेक्स्ट पेलोड भेजने का विकल्प है.
  • FCM का मालिकाना एपीआई, कस्टम सुविधाओं के साथ काम करता है. उदाहरण के लिए, FCM Topics (यह वेब पर भी काम करता है, हालांकि इसका दस्तावेज़ खराब है).
  • आखिर में, FCM Android, iOS, और वेब के साथ काम करता है. इसलिए, कुछ टीमों के लिए मौजूदा प्रोजेक्ट में काम करना आसान होता है.

यह बैकग्राउंड में वेब पुश का इस्तेमाल करता है, लेकिन इसका मकसद इसे अलग रखना है.

जैसा कि मैंने पिछले सवाल में बताया था, अगर वेब पुश को सिर्फ़ ब्राउज़र और पुश सेवा के तौर पर देखा जाता है, तो वेब पुश को लागू करने के लिए, Firebase में मौजूद Messaging SDK टूल को लाइब्रेरी के तौर पर देखा जा सकता है.

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

कोड लैब