FCM मैसेज के बारे में जानकारी

Firebase Cloud Messaging (FCM) में मैसेज भेजने के कई विकल्प और सुविधाएं उपलब्ध हैं. इस पेज पर दी गई जानकारी का मकसद, आपको अलग-अलग तरह के FCM मैसेज के बारे में बताना है. साथ ही, यह बताना है कि इनका इस्तेमाल कैसे किया जा सकता है.

सूचना वाले मैसेज, जिनमें डेटा पेलोड शामिल करना ज़रूरी नहीं है

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

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

  • बैकग्राउंड में होने पर, ऐप्लिकेशन को सूचना ट्रे में सूचना पेलोड मिलता है. साथ ही, वे डेटा पेलोड को सिर्फ़ तब हैंडल करते हैं, जब उपयोगकर्ता सूचना पर टैप करता है.
  • फ़ोरग्राउंड में होने पर, आपके ऐप्लिकेशन को मैसेज ऑब्जेक्ट मिलता है. इसमें दोनों पेलोड उपलब्ध होते हैं.

यहां JSON फ़ॉर्मैट में एक ऐसा मैसेज दिया गया है जिसमें notification और data, दोनों कुंजियां शामिल हैं:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    },
    "data" : {
      "Nick" : "Mario",
      "Room" : "PortugalVSDenmark"
    }
  }
}

डिलीवरी के विकल्प

FCM, Android डिवाइसों पर भेजे गए मैसेज के लिए डिलीवरी के विकल्पों का एक खास सेट उपलब्ध कराता है. साथ ही, Apple प्लैटफ़ॉर्म और वेब पर भी इसी तरह के विकल्प उपलब्ध कराता है. उदाहरण के लिए, "छोटे किए जा सकने वाले" मैसेज की सुविधा, Android पर FCM के collapse_key के ज़रिए, Apple पर apns-collapse-id के ज़रिए, और JavaScript/वेब पर Topic के ज़रिए काम करती है. ज़्यादा जानकारी के लिए, इस सेक्शन में दिए गए ब्यौरे और इससे जुड़े रेफ़रंस दस्तावेज़ देखें.

मैसेज की प्राथमिकता सेट करना

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

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

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

यहां सामान्य प्राथमिकता वाला एक मैसेज दिया गया है. इसे FCM एचटीटीपी v1 प्रोटोकॉल के ज़रिए भेजा गया है. इससे मैगज़ीन के किसी सदस्य को यह सूचना दी जाती है कि डाउनलोड करने के लिए नया कॉन्टेंट उपलब्ध है:

{
  "message":{
    "topic":"subscriber-updates",
    "notification":{
      "body" : "This week's edition is now available.",
      "title" : "NewsMagazine.com",
    },
    "data" : {
      "volume" : "3.21.15",
      "contents" : "http://www.news-magazine.com/world-week/21659772"
    },
    "android":{
      "priority":"normal"
    },
    "apns":{
      "headers":{
        "apns-priority":"5"
      }
    },
    "webpush": {
      "headers": {
        "Urgency": "high"
      }
    }
  }
}

मैसेज की प्राथमिकता सेट करने के बारे में, प्लैटफ़ॉर्म के हिसाब से ज़्यादा जानकारी पाने के लिए:

ज़िंदगी के लिए ज़रूरी इस्तेमाल के उदाहरण

FCM एपीआई को आपातकालीन सूचनाओं या अन्य ज़्यादा जोखिम वाली गतिविधियों के लिए डिज़ाइन नहीं किया गया है. इन गतिविधियों में एपीआई के इस्तेमाल या काम न करने पर, मौत हो सकती है, शारीरिक चोट लग सकती है या पर्यावरण को नुकसान पहुंच सकता है. जैसे, परमाणु सुविधाओं का संचालन, एयर ट्रैफ़िक कंट्रोल या लाइफ़ सपोर्ट सिस्टम. इस तरह के इस्तेमाल पर सेक्शन 4. a. के तहत साफ़ तौर पर पाबंदी है. 7 में दी गई सेवा की शर्तों का उल्लंघन किया है. इन शर्तों का पालन करने की ज़िम्मेदारी पूरी तरह से आपकी होगी. साथ ही, इन शर्तों का पालन न करने की वजह से होने वाले किसी भी नुकसान की ज़िम्मेदारी भी आपकी होगी. Google, एपीआई "जैसा है वैसा" के आधार पर उपलब्ध कराता है. साथ ही, Google के पास यह अधिकार है कि वह किसी भी समय, किसी भी वजह से, एपीआई या उसके किसी हिस्से, सुविधा या उसके ऐक्सेस को बंद कर सकता है. इसके लिए, Google की कोई ज़िम्मेदारी नहीं होगी और न ही वह आपको या आपके उपयोगकर्ताओं को कोई सूचना देगा.

मैसेज के मिटने की समयसीमा सेट करना

FCM आम तौर पर, मैसेज भेजे जाने के तुरंत बाद उन्हें डिलीवर कर देता है. हालांकि, ऐसा हमेशा नहीं हो पाता. उदाहरण के लिए, अगर प्लैटफ़ॉर्म Android है, तो हो सकता है कि डिवाइस बंद हो, ऑफ़लाइन हो या किसी और वजह से उपलब्ध न हो. इसके अलावा, FCM जान-बूझकर मैसेज भेजने में देरी कर सकता है, ताकि कोई ऐप्लिकेशन बहुत ज़्यादा संसाधनों का इस्तेमाल न करे और बैटरी लाइफ़ पर बुरा असर न पड़े.

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

Android और वेब/JavaScript पर, किसी मैसेज की ज़्यादा से ज़्यादा अवधि तय की जा सकती है. इसकी वैल्यू 0 से 24,19,200 सेकंड (28 दिन) के बीच होनी चाहिए. यह उस ज़्यादा से ज़्यादा अवधि के बारे में बताती है जिसके लिए FCM मैसेज सेव करता है और उसे डिलीवर करने की कोशिश करता है. जिन अनुरोधों में यह फ़ील्ड शामिल नहीं होता है उनके लिए, डिफ़ॉल्ट रूप से चार हफ़्तों की अवधि सेट होती है.

इस सुविधा का इस्तेमाल इन कामों के लिए किया जा सकता है:

  • वीडियो चैट के लिए आने वाले कॉल
  • न्योते की समयसीमा खत्म होने वाले इवेंट
  • कैलेंडर इवेंट

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

यहां टीटीएल शामिल करने वाले अनुरोध का एक उदाहरण दिया गया है:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "data":{
      "Nick" : "Mario",
      "body" : "great match!",
      "Room" : "PortugalVSDenmark"
    },
    "apns":{
      "headers":{
        "apns-expiration":"1604750400"
      }
    },
    "android":{
      "ttl":"4500s"
    },
    "webpush":{
      "headers":{
        "TTL":"4500"
      }
    }
  }
}

मैसेज की लाइफ़टाइम

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

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

अगर डिवाइस कनेक्ट है, लेकिन डोज़ मोड में है, तो कम प्राथमिकता वाला मैसेज FCM तब तक सेव करता है, जब तक डिवाइस डोज़ मोड से बाहर नहीं आ जाता. collapse_key फ़्लैग इसी काम के लिए होता है: अगर एक ही कोलैप्स की (और रजिस्ट्रेशन टोकन) वाला कोई मैसेज पहले से ही सेव है और डिलीवरी के लिए इंतज़ार कर रहा है, तो पुराने मैसेज को खारिज कर दिया जाता है और नया मैसेज उसकी जगह ले लेता है. इसका मतलब है कि पुराने मैसेज को नए मैसेज से बदल दिया जाता है. हालांकि, अगर collapse key सेट नहीं की जाती है, तो नए और पुराने, दोनों मैसेज को आने वाले समय में डिलीवर करने के लिए सेव किया जाता है.

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

मैसेज डिलीवर होने के बारे में ज़्यादा जानकारी पाने के लिए:

    Android या Apple प्लैटफ़ॉर्म पर मैसेज डिलीवर होने के बारे में ज़्यादा जानकारी पाने के लिए, FCM रिपोर्टिंग डैशबोर्ड देखें. यह डैशबोर्ड, Apple और Android डिवाइसों पर भेजे गए और खोले गए मैसेज की संख्या रिकॉर्ड करता है. साथ ही, Android ऐप्लिकेशन के लिए "इंप्रेशन" (उपयोगकर्ताओं को दिखने वाली सूचनाएं) का डेटा भी रिकॉर्ड करता है.

अगर Android डिवाइसों पर सीधे तौर पर चैनल पर मैसेज भेजने की सुविधा चालू है और डिवाइस एक महीने से ज़्यादा समय से FCM से कनेक्ट नहीं है, तो FCM अब भी मैसेज स्वीकार करता है, लेकिन उसे तुरंत खारिज कर देता है. अगर डिवाइस, आखिरी बार भेजे गए डेटा मैसेज के चार हफ़्तों के अंदर कनेक्ट होता है, तो आपके क्लाइंट को onDeletedMessages() कॉलबैक मिलता है. इसके बाद, ऐप्लिकेशन इस स्थिति को ठीक से हैंडल कर सकता है. आम तौर पर, इसके लिए ऐप्लिकेशन सर्वर से पूरा डेटा सिंक करने का अनुरोध किया जाता है.

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