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

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

यह सवाल थोड़ा-बहुत सवाल में आ जाता है. इसकी वजह यह है कि कुछ ऐसी स्थितियां होती हैं जिनकी वजह से तर्क करना और समझना मुश्किल हो जाता है.

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

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

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

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

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

OS X का उदाहरण

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

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

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

मैं पुश से अपने होम स्क्रीन वेब ऐप्लिकेशन को फ़ुलस्क्रीन पर कैसे खोलूं?

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

होम स्क्रीन का आइकॉन फ़ुलस्क्रीन पर

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

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

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

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

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

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

GCM, FCM, वेब पुश और Chrome के साथ क्या काम किया गया है?

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

दिसंबर 2014

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

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

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

जुलाई 2016

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

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

आज आपको यह पसंद क्यों नहीं आ रहा है?

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

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

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

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

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

मैसेजिंग SDK टूल को Firebase क्लाउड से मैसेज करने वाला JS SDK टूल भी कहा जाता है. यह वेब पुश को आसानी से लागू करने के लिए, पर्दे के पीछे कुछ तरकीबें अपनाता है.

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

इसमें, पर्दे के पीछे की गतिविधियों वाले वेब पुश नोटिफ़िकेशन का इस्तेमाल किया जाता है. हालांकि, इसका मकसद इन्हें हटाना होता है.

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

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

कोड लैब