FCM संदेशों के बारे में

फायरबेस क्लाउड मैसेजिंग (एफसीएम) मैसेजिंग विकल्पों और क्षमताओं की एक विस्तृत श्रृंखला प्रदान करता है। इस पृष्ठ की जानकारी का उद्देश्य आपको विभिन्न प्रकार के एफसीएम संदेशों को समझने में मदद करना है और आप उनके साथ क्या कर सकते हैं।

संदेश प्रकार

FCM के साथ, आप ग्राहकों को दो प्रकार के संदेश भेज सकते हैं:

  • अधिसूचना संदेश, कभी-कभी "प्रदर्शन संदेश" के रूप में सोचा जाता है। इन्हें FCM SDK द्वारा स्वचालित रूप से नियंत्रित किया जाता है।
  • डेटा संदेश, जिन्हें क्लाइंट ऐप द्वारा प्रबंधित किया जाता है।

अधिसूचना संदेशों में उपयोगकर्ता-दृश्यमान कुंजियों का एक पूर्वनिर्धारित सेट होता है। इसके विपरीत, डेटा संदेशों में केवल आपके उपयोगकर्ता द्वारा परिभाषित कस्टम कुंजी-मूल्य जोड़े होते हैं। अधिसूचना संदेशों में वैकल्पिक डेटा पेलोड हो सकता है। दोनों प्रकार के संदेश के लिए अधिकतम पेलोड 4000 बाइट्स है, सिवाय फायरबेस कंसोल से संदेश भेजने के, जो 1000 वर्ण सीमा लागू करता है।

परिदृश्य का प्रयोग करें कैसे भेजें
अधिसूचना संदेश एफसीएम एसडीके बैकग्राउंड में चलने पर क्लाइंट ऐप की ओर से अंतिम-उपयोगकर्ता डिवाइस को संदेश प्रदर्शित करता है। अन्यथा, यदि अधिसूचना प्राप्त होने पर ऐप अग्रभूमि में चल रहा है, तो ऐप का कोड व्यवहार निर्धारित करता है। अधिसूचना संदेशों में उपयोगकर्ता-दृश्यमान कुंजियों का एक पूर्वनिर्धारित सेट और कस्टम कुंजी-मूल्य जोड़े का एक वैकल्पिक डेटा पेलोड होता है।
  1. क्लाउड फ़ंक्शंस या आपके ऐप सर्वर जैसे विश्वसनीय वातावरण में, एडमिन एसडीके या HTTP v1 एपीआई का उपयोग करें। notification कुंजी सेट करें. वैकल्पिक डेटा पेलोड हो सकता है. हमेशा बंधनेवाला.

    प्रदर्शन सूचनाओं के कुछ उदाहरण देखें और अनुरोध पेलोड भेजें।

  2. नोटिफिकेशन कंपोजर का उपयोग करें: संदेश टेक्स्ट, शीर्षक आदि दर्ज करें और भेजें। कस्टम डेटा प्रदान करके वैकल्पिक डेटा पेलोड जोड़ें।
डेटा संदेश क्लाइंट ऐप डेटा संदेशों को संसाधित करने के लिए ज़िम्मेदार है। डेटा संदेशों में केवल कस्टम कुंजी-मूल्य जोड़े होते हैं, जिनमें कोई आरक्षित कुंजी नाम नहीं होता (नीचे देखें)। क्लाउड फ़ंक्शंस या आपके ऐप सर्वर जैसे विश्वसनीय वातावरण में, एडमिन एसडीके या एफसीएम सर्वर प्रोटोकॉल का उपयोग करें। भेजें अनुरोध में, data कुंजी सेट करें।

जब आप चाहते हैं कि जब आपका ऐप पृष्ठभूमि में चल रहा हो तो एफसीएम एसडीके स्वचालित रूप से अधिसूचना प्रदर्शित करने का प्रबंधन करे, तो अधिसूचना संदेशों का उपयोग करें। जब आप संदेशों को अपने क्लाइंट ऐप कोड के साथ संसाधित करना चाहते हैं तो डेटा संदेशों का उपयोग करें।

एफसीएम वैकल्पिक डेटा पेलोड सहित एक अधिसूचना संदेश भेज सकता है। ऐसे मामलों में, एफसीएम अधिसूचना पेलोड प्रदर्शित करने का प्रबंधन करता है, और क्लाइंट ऐप डेटा पेलोड का प्रबंधन करता है।

अधिसूचना संदेश

परीक्षण के लिए या मार्केटिंग और उपयोगकर्ता पुनः जुड़ाव के लिए, आप फायरबेस कंसोल का उपयोग करके अधिसूचना संदेश भेज सकते हैं। फायरबेस कंसोल आपको मार्केटिंग संदेशों को परिष्कृत और बेहतर बनाने में मदद करने के लिए एनालिटिक्स-आधारित ए/बी परीक्षण प्रदान करता है।

एडमिन एसडीके या एफसीएम प्रोटोकॉल का उपयोग करके प्रोग्रामेटिक रूप से अधिसूचना संदेश भेजने के लिए, अधिसूचना संदेश के उपयोगकर्ता-दृश्य भाग के लिए कुंजी-मूल्य विकल्पों के आवश्यक पूर्वनिर्धारित सेट के साथ notification कुंजी सेट करें। उदाहरण के लिए, यहां एक IM ऐप में JSON-स्वरूपित अधिसूचना संदेश है। उपयोगकर्ता "पुर्तगाल बनाम डेनमार्क" शीर्षक और "शानदार मैच!" शीर्षक वाला एक संदेश देखने की उम्मीद कर सकता है। उपकरण पर:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    }
  }
}

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

अधिसूचना संदेशों के निर्माण के लिए उपलब्ध पूर्वनिर्धारित कुंजियों की पूरी सूची के लिए HTTP v1 प्रोटोकॉल अधिसूचना ऑब्जेक्ट संदर्भ दस्तावेज़ देखें।

डेटा संदेश

क्लाइंट ऐप पर डेटा पेलोड भेजने के लिए अपने कस्टम कुंजी-मूल्य जोड़े के साथ उचित कुंजी सेट करें।

उदाहरण के लिए, यहां ऊपर दिए गए समान IM ऐप में एक JSON-स्वरूपित संदेश है, जहां जानकारी सामान्य data कुंजी में समाहित है और क्लाइंट ऐप से सामग्री की व्याख्या करने की अपेक्षा की जाती है:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "data":{
      "Nick" : "Mario",
      "body" : "great match!",
      "Room" : "PortugalVSDenmark"
    }
  }
}

उपरोक्त उदाहरण शीर्ष-स्तर, या सामान्य data फ़ील्ड का उपयोग दिखाता है, जिसकी व्याख्या संदेश प्राप्त करने वाले सभी प्लेटफ़ॉर्म पर ग्राहकों द्वारा की जाती है। प्रत्येक प्लेटफ़ॉर्म पर, क्लाइंट ऐप कॉलबैक फ़ंक्शन में डेटा पेलोड प्राप्त करता है।

डेटा संदेशों के लिए एन्क्रिप्शन

एंड्रॉइड ट्रांसपोर्ट लेयर ( एफसीएम आर्किटेक्चर देखें) पॉइंट-टू-पॉइंट एन्क्रिप्शन का उपयोग करता है। अपनी आवश्यकताओं के आधार पर, आप डेटा संदेशों में एंड-टू-एंड एन्क्रिप्शन जोड़ने का निर्णय ले सकते हैं। एफसीएम एंड-टू-एंड समाधान प्रदान नहीं करता है। हालाँकि, कैपिलरी या डीटीएलएस जैसे बाहरी समाधान उपलब्ध हैं।

वैकल्पिक डेटा पेलोड के साथ अधिसूचना संदेश

प्रोग्रामेटिक रूप से या फायरबेस कंसोल के माध्यम से, आप अधिसूचना संदेश भेज सकते हैं जिसमें कस्टम कुंजी-मूल्य जोड़े का वैकल्पिक पेलोड होता है। नोटिफिकेशन कंपोज़र में, उन्नत विकल्पों में कस्टम डेटा फ़ील्ड का उपयोग करें।

संदेश प्राप्त करते समय ऐप का व्यवहार जिसमें अधिसूचना और डेटा पेलोड दोनों शामिल हैं, इस पर निर्भर करता है कि ऐप पृष्ठभूमि में है या अग्रभूमि में - अनिवार्य रूप से, यह प्राप्ति के समय सक्रिय है या नहीं।

  • बैकग्राउंड में होने पर , ऐप्स नोटिफिकेशन ट्रे में नोटिफिकेशन पेलोड प्राप्त करते हैं, और डेटा पेलोड को केवल तभी संभालते हैं जब उपयोगकर्ता नोटिफिकेशन पर टैप करता है।
  • अग्रभूमि में होने पर , आपके ऐप को दोनों पेलोड उपलब्ध होने पर एक संदेश ऑब्जेक्ट प्राप्त होता है।

यहां एक JSON-स्वरूपित संदेश है जिसमें notification कुंजी और data कुंजी दोनों शामिल हैं:

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

सभी प्लेटफ़ॉर्म पर एक संदेश को अनुकूलित करना

फायरबेस एडमिन एसडीके और एफसीएम v1 HTTP प्रोटोकॉल दोनों आपके संदेश अनुरोधों को message ऑब्जेक्ट में उपलब्ध सभी फ़ील्ड सेट करने की अनुमति देते हैं। यह भी शामिल है:

  • संदेश प्राप्त करने वाले सभी ऐप इंस्टेंस द्वारा व्याख्या किए जाने वाले फ़ील्ड का एक सामान्य सेट।
  • फ़ील्ड के प्लेटफ़ॉर्म-विशिष्ट सेट, जैसे कि AndroidConfig और WebpushConfig , केवल निर्दिष्ट प्लेटफ़ॉर्म पर चल रहे ऐप इंस्टेंस द्वारा व्याख्या किए जाते हैं।

प्लेटफ़ॉर्म-विशिष्ट ब्लॉक आपको विभिन्न प्लेटफ़ॉर्म के लिए संदेशों को अनुकूलित करने की सुविधा देते हैं ताकि यह सुनिश्चित हो सके कि प्राप्त होने पर उन्हें सही ढंग से संभाला जाए। एफसीएम बैकएंड सभी निर्दिष्ट मापदंडों को ध्यान में रखेगा और प्रत्येक प्लेटफ़ॉर्म के लिए संदेश को अनुकूलित करेगा।

सामान्य फ़ील्ड का उपयोग कब करें

जब आप हों तो सामान्य फ़ील्ड का उपयोग करें:

  • सभी प्लेटफ़ॉर्म - Apple, Android और वेब पर ऐप इंस्टेंस को लक्षित करना
  • विषयों पर संदेश भेजना

सभी ऐप इंस्टेंसेस, प्लेटफ़ॉर्म की परवाह किए बिना, निम्नलिखित सामान्य फ़ील्ड की व्याख्या कर सकते हैं:

प्लेटफ़ॉर्म-विशिष्ट फ़ील्ड का उपयोग कब करें

जब आप चाहें तो प्लेटफ़ॉर्म-विशिष्ट फ़ील्ड का उपयोग करें:

  • फ़ील्ड्स को केवल विशेष प्लेटफ़ॉर्म पर भेजें
  • सामान्य फ़ील्ड के अतिरिक्त प्लेटफ़ॉर्म-विशिष्ट फ़ील्ड भेजें

जब भी आप केवल विशेष प्लेटफ़ॉर्म पर मान भेजना चाहते हैं, तो सामान्य फ़ील्ड का उपयोग न करें ; प्लेटफ़ॉर्म-विशिष्ट फ़ील्ड का उपयोग करें। उदाहरण के लिए, केवल Apple प्लेटफ़ॉर्म और वेब पर अधिसूचना भेजने के लिए, लेकिन Android पर नहीं, आपको फ़ील्ड के दो अलग-अलग सेटों का उपयोग करना होगा, एक Apple के लिए और एक वेब के लिए।

जब आप विशिष्ट डिलीवरी विकल्पों के साथ संदेश भेज रहे हैं, तो उन्हें सेट करने के लिए प्लेटफ़ॉर्म-विशिष्ट फ़ील्ड का उपयोग करें। यदि आप चाहें तो आप प्रति प्लेटफ़ॉर्म अलग-अलग मान निर्दिष्ट कर सकते हैं। हालाँकि, जब आप अनिवार्य रूप से सभी प्लेटफ़ॉर्म पर समान मान सेट करना चाहते हैं, तब भी आपको प्लेटफ़ॉर्म-विशिष्ट फ़ील्ड का उपयोग करना होगा। ऐसा इसलिए है क्योंकि प्रत्येक प्लेटफ़ॉर्म मूल्य की थोड़ी अलग व्याख्या कर सकता है - उदाहरण के लिए, एंड्रॉइड पर टाइम-टू-लाइव को सेकंड में समाप्ति समय के रूप में सेट किया जाता है, जबकि ऐप्पल पर इसे समाप्ति तिथि के रूप में सेट किया जाता है।

उदाहरण: प्लेटफ़ॉर्म-विशिष्ट डिलीवरी विकल्पों के साथ अधिसूचना संदेश

निम्नलिखित v1 भेजने का अनुरोध सभी प्लेटफ़ॉर्म पर एक सामान्य अधिसूचना शीर्षक और सामग्री भेजता है, लेकिन कुछ प्लेटफ़ॉर्म-विशिष्ट ओवरराइड भी भेजता है। विशेष रूप से, अनुरोध:

  • एपीएन (एप्पल प्लेटफ़ॉर्म) संदेश प्राथमिकता को कम सेटिंग पर सेट करते समय, एंड्रॉइड और वेब प्लेटफ़ॉर्म के लिए लंबे समय तक लाइव सेट करता है
  • एंड्रॉइड और ऐप्पल पर अधिसूचना पर उपयोगकर्ता टैप के परिणाम को परिभाषित करने के लिए उपयुक्त कुंजी सेट करता है - क्रमशः click_action , और category
{
  "message":{
     "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
     "notification":{
       "title":"Match update",
       "body":"Arsenal goal in added time, score is now 3-0"
     },
     "android":{
       "ttl":"86400s",
       "notification"{
         "click_action":"OPEN_ACTIVITY_1"
       }
     },
     "apns": {
       "headers": {
         "apns-priority": "5",
       },
       "payload": {
         "aps": {
           "category": "NEW_MESSAGE_CATEGORY"
         }
       }
     },
     "webpush":{
       "headers":{
         "TTL":"86400"
       }
     }
   }
 }

संदेश के मुख्य भाग में प्लेटफ़ॉर्म-विशिष्ट ब्लॉकों में उपलब्ध कुंजियों पर पूर्ण विवरण के लिए HTTP v1 संदर्भ दस्तावेज़ देखें। संदेश का मुख्य भाग शामिल भेजने के अनुरोध बनाने के बारे में अधिक जानकारी के लिए, भेजें अनुरोध बनाएँ देखें।

वितरण विकल्प

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

गैर-बंधनेवाला और संक्षिप्त करने योग्य संदेश

एक गैर-बंधनेवाला संदेश दर्शाता है कि प्रत्येक व्यक्तिगत संदेश डिवाइस पर डिलीवर किया गया है। डेटा लाने के लिए सर्वर से संपर्क करने के लिए मोबाइल ऐप पर सामग्री-मुक्त "पिंग" जैसे संक्षिप्त करने योग्य संदेश के विपरीत, एक गैर-बंधनेवाला संदेश कुछ उपयोगी सामग्री वितरित करता है।

गैर-बंधनेवाला संदेशों के कुछ विशिष्ट उपयोग के मामले चैट संदेश या महत्वपूर्ण संदेश हैं। उदाहरण के लिए, एक आईएम ऐप में, आप हर संदेश डिलीवर करना चाहेंगे, क्योंकि हर संदेश की सामग्री अलग-अलग होती है।

एंड्रॉइड के लिए 100 संदेशों की सीमा है जिन्हें बिना तोड़े संग्रहीत किया जा सकता है। यदि सीमा समाप्त हो जाती है, तो सभी संग्रहीत संदेश हटा दिए जाते हैं। जब डिवाइस वापस ऑनलाइन होता है, तो उसे एक विशेष संदेश प्राप्त होता है जो बताता है कि सीमा पूरी हो गई है। ऐप तब स्थिति को ठीक से संभाल सकता है, आमतौर पर ऐप सर्वर से पूर्ण सिंक का अनुरोध करके।

संक्षिप्त करने योग्य संदेश वह संदेश होता है जिसे एक नए संदेश से बदला जा सकता है यदि इसे अभी तक डिवाइस पर डिलीवर नहीं किया गया है।

कोलैप्सेबल संदेशों के सामान्य उपयोग के मामले वे संदेश हैं जिनका उपयोग किसी मोबाइल ऐप को सर्वर से डेटा सिंक करने के लिए कहने के लिए किया जाता है। एक उदाहरण एक स्पोर्ट्स ऐप होगा जो उपयोगकर्ताओं को नवीनतम स्कोर के साथ अपडेट करता है। केवल नवीनतम संदेश ही प्रासंगिक है.

एंड्रॉइड पर किसी संदेश को संक्षिप्त करने योग्य के रूप में चिह्नित करने के लिए, संदेश पेलोड में collapse_key पैरामीटर शामिल करें। डिफ़ॉल्ट रूप से, पतन कुंजी फ़ायरबेस कंसोल में पंजीकृत ऐप पैकेज नाम है। एफसीएम सर्वर एक साथ प्रति डिवाइस चार अलग-अलग कोलैप्सेबल संदेशों को संग्रहीत कर सकता है, प्रत्येक एक अलग कोलैप्स कुंजी के साथ। यदि आप इस संख्या को पार कर जाते हैं, तो एफसीएम केवल चार पतन कुंजियाँ रखता है, इस बात की कोई गारंटी नहीं है कि कौन सी रखी जाएंगी।

बिना किसी पेलोड वाले विषय संदेश डिफ़ॉल्ट रूप से संक्षिप्त किए जा सकते हैं। अधिसूचना संदेश हमेशा संक्षिप्त करने योग्य होते हैं और collapse_key पैरामीटर को अनदेखा कर देंगे।

मुझे किसका उपयोग करना चाहिए?

प्रदर्शन के दृष्टिकोण से संक्षिप्त करने योग्य संदेश एक बेहतर विकल्प हैं, बशर्ते आपके ऐप को गैर-बंधनेवाला संदेशों का उपयोग करने की आवश्यकता न हो। हालाँकि, यदि आप संक्षिप्त करने योग्य संदेशों का उपयोग करते हैं, तो याद रखें कि एफसीएम किसी भी समय प्रति पंजीकरण टोकन एफसीएम द्वारा अधिकतम चार अलग-अलग पतन कुंजियों का उपयोग करने की अनुमति देता है। आपको इस संख्या से अधिक नहीं होना चाहिए, अन्यथा इसके अप्रत्याशित परिणाम हो सकते हैं।

परिदृश्य का प्रयोग करें कैसे भेजें
गैर सिमटने प्रत्येक संदेश क्लाइंट ऐप के लिए महत्वपूर्ण है और उसे वितरित किया जाना आवश्यक है। अधिसूचना संदेशों को छोड़कर, सभी संदेश डिफ़ॉल्ट रूप से गैर-संक्षिप्त होते हैं।
खुलने और बंधनेवाला जब कोई नया संदेश आता है जो पुराने, संबंधित संदेश को क्लाइंट ऐप के लिए अप्रासंगिक बना देता है, तो FCM पुराने संदेश को बदल देता है। उदाहरण के लिए: सर्वर से डेटा सिंक शुरू करने के लिए उपयोग किए जाने वाले संदेश, या पुराने अधिसूचना संदेश। अपने संदेश अनुरोध में उचित पैरामीटर सेट करें:
  • एंड्रॉइड पर collapseKey
  • एप्पल पर apns-collapse-id
  • वेब पर Topic
  • लीगेसी प्रोटोकॉल में collapse_key (सभी प्लेटफ़ॉर्म)

किसी संदेश की प्राथमिकता निर्धारित करना

डाउनस्ट्रीम संदेशों को डिलीवरी प्राथमिकता निर्दिष्ट करने के लिए आपके पास दो विकल्प हैं: सामान्य और उच्च प्राथमिकता। हालाँकि सभी प्लेटफ़ॉर्म पर व्यवहार थोड़ा भिन्न होता है, सामान्य और उच्च प्राथमिकता वाले संदेशों की डिलीवरी इस तरह काम करती है:

  • सामान्य प्राथमिकता. जब ऐप अग्रभूमि में होता है तो सामान्य प्राथमिकता वाले संदेश तुरंत वितरित हो जाते हैं। पृष्ठभूमि वाले ऐप्स के लिए, डिलीवरी में देरी हो सकती है। कम समय-संवेदनशील संदेशों के लिए, जैसे नए ईमेल की सूचनाएं, अपने यूआई को सिंक में रखना, या पृष्ठभूमि में ऐप डेटा को सिंक करना, सामान्य डिलीवरी प्राथमिकता चुनें।

  • उच्च प्राथमिकता। एफसीएम डिवाइस डोज़ मोड में होने पर भी तुरंत उच्च प्राथमिकता वाले संदेश देने का प्रयास करता है। उच्च प्राथमिकता वाले संदेश समय-संवेदनशील, उपयोगकर्ता को दिखाई देने वाली सामग्री के लिए हैं।

यहां एक पत्रिका ग्राहक को सूचित करने के लिए एफसीएम HTTP 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"
      }
    }
  }
}

संदेश प्राथमिकता निर्धारित करने पर अधिक प्लेटफ़ॉर्म-विशिष्ट विवरण के लिए:

किसी संदेश का जीवनकाल निर्धारित करना

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

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

एंड्रॉइड और वेब/जावास्क्रिप्ट पर, आप किसी संदेश का अधिकतम जीवनकाल निर्दिष्ट कर सकते हैं। मान की अवधि 0 से 2,419,200 सेकंड (28 दिन) होनी चाहिए, और यह उस अधिकतम अवधि से मेल खाती है जिसके लिए FCM संदेश को संग्रहीत करता है और वितरित करने का प्रयास करता है। जिन अनुरोधों में यह फ़ील्ड शामिल नहीं है, उनमें डिफ़ॉल्ट की अधिकतम अवधि चार सप्ताह है।

इस सुविधा के लिए यहां कुछ संभावित उपयोग दिए गए हैं:

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

किसी संदेश के जीवनकाल को निर्दिष्ट करने का एक अन्य लाभ यह है कि एफसीएम 0 सेकंड के टाइम-टू-लाइव मान वाले संदेशों पर संक्षिप्त संदेश थ्रॉटलिंग लागू नहीं करता है। एफसीएम उन संदेशों को संभालने का सर्वोत्तम प्रयास प्रदान करता है जिन्हें "अभी या कभी नहीं" वितरित किया जाना चाहिए। ध्यान रखें कि 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"
      }
    }
  }
}

एक संदेश का जीवनकाल

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

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

यदि डिवाइस कनेक्ट है लेकिन डोज़ में है, तो कम प्राथमिकता वाला संदेश एफसीएम द्वारा तब तक संग्रहीत किया जाता है जब तक कि डिवाइस डोज़ से बाहर न हो जाए। और यहीं पर collapse_key ध्वज एक भूमिका निभाता है: यदि पहले से ही एक ही कोलैप्स कुंजी (और पंजीकरण टोकन) के साथ एक संदेश संग्रहीत है और डिलीवरी की प्रतीक्षा कर रहा है, तो पुराना संदेश हटा दिया जाता है और नया संदेश उसकी जगह ले लेता है (अर्थात, पुराना) संदेश नए से ढह गया है)। हालाँकि, यदि संक्षिप्त कुंजी सेट नहीं है, तो नए और पुराने दोनों संदेश भविष्य में डिलीवरी के लिए संग्रहीत किए जाते हैं।

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

किसी संदेश की डिलीवरी के बारे में अधिक जानकारी प्राप्त करने के लिए:

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

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

अंत में, जब एफसीएम डिवाइस पर एक संदेश देने का प्रयास करता है और ऐप अनइंस्टॉल हो जाता है, तो एफसीएम उस संदेश को तुरंत हटा देता है और पंजीकरण टोकन को अमान्य कर देता है। भविष्य में उस डिवाइस पर संदेश भेजने का प्रयास करने पर NotRegistered त्रुटि उत्पन्न होती है।

थ्रॉटलिंग और स्केलिंग

हमारा लक्ष्य हमेशा FCM के माध्यम से भेजे गए प्रत्येक संदेश को वितरित करना है। हालाँकि, प्रत्येक संदेश को डिलीवर करने से कभी-कभी समग्र उपयोगकर्ता अनुभव ख़राब हो जाता है। अन्य मामलों में, हमें यह सुनिश्चित करने के लिए सीमाएं प्रदान करने की आवश्यकता है कि एफसीएम सभी प्रेषकों के लिए एक स्केलेबल सेवा प्रदान करता है।

संक्षिप्त करने योग्य संदेश थ्रॉटलिंग

जैसा कि ऊपर बताया गया है, संक्षिप्त करने योग्य संदेश सामग्री-मुक्त सूचनाएं हैं जिन्हें एक-दूसरे के ऊपर संक्षिप्त करने के लिए डिज़ाइन किया गया है। ऐसी स्थिति में जब कोई डेवलपर किसी ऐप पर एक ही संदेश को बार-बार दोहरा रहा है, तो हम उपयोगकर्ता की बैटरी पर प्रभाव को कम करने के लिए संदेशों को विलंबित (थ्रॉटल) करते हैं।

उदाहरण के लिए, यदि आप एक ही डिवाइस पर बड़ी संख्या में नए ईमेल सिंक अनुरोध भेजते हैं, तो हम अगले ईमेल सिंक अनुरोध में कुछ मिनट की देरी कर सकते हैं ताकि डिवाइस कम औसत दर पर सिंक हो सके। यह थ्रॉटलिंग उपयोगकर्ता द्वारा अनुभव किए जाने वाले बैटरी प्रभाव को सीमित करने के लिए सख्ती से किया जाता है।

यदि आपके उपयोग के मामले में उच्च बर्स्ट सेंड पैटर्न की आवश्यकता है, तो गैर-बंधनेवाला संदेश सही विकल्प हो सकते हैं। ऐसे संदेशों के लिए, बैटरी की लागत कम करने के लिए ऐसे संदेशों में सामग्री शामिल करना सुनिश्चित करें।

हम संक्षिप्त किए जा सकने वाले संदेशों को प्रति डिवाइस प्रति ऐप 20 संदेशों के विस्फोट तक सीमित करते हैं, जिसमें हर 3 मिनट में 1 संदेश की रिफिल होती है।

एक्सएमपीपी सर्वर थ्रॉटलिंग

हम उस दर को सीमित करते हैं जिसे आप एफसीएम एक्सएमपीपी सर्वर से कनेक्ट कर सकते हैं, प्रति प्रोजेक्ट प्रति मिनट 400 कनेक्शन तक। यह संदेश वितरण के लिए कोई समस्या नहीं होनी चाहिए, लेकिन सिस्टम की स्थिरता सुनिश्चित करने के लिए यह महत्वपूर्ण है। प्रत्येक प्रोजेक्ट के लिए, FCM समानांतर में 2500 कनेक्शन की अनुमति देता है।

एक्सएमपीपी के साथ अपस्ट्रीम मैसेजिंग के लिए, एफसीएम अपस्ट्रीम गंतव्य सर्वर पर ओवरलोडिंग से बचने के लिए प्रति प्रोजेक्ट 1,500,000/मिनट पर अपस्ट्रीम संदेशों को सीमित करता है।

खराब ऐप व्यवहार से बैटरी खत्म होने से बचाने के लिए हम प्रति डिवाइस अपस्ट्रीम संदेशों को 1,000/मिनट पर सीमित करते हैं।

किसी एकल डिवाइस पर अधिकतम संदेश दर

एंड्रॉइड के लिए, आप एक डिवाइस पर प्रति मिनट 240 संदेश और प्रति घंटे 5,000 संदेश भेज सकते हैं। यह उच्च सीमा ट्रैफ़िक के अल्पकालिक विस्फोट की अनुमति देने के लिए है, जैसे कि जब उपयोगकर्ता चैट पर तेजी से बातचीत कर रहे हों। यह सीमा किसी डिवाइस पर अनजाने में बैटरी खत्म होने से लेकर तर्क भेजने में होने वाली त्रुटियों को रोकती है।

आईओएस के लिए, जब दर एपीएन सीमा से अधिक हो जाती है तो हम एक त्रुटि लौटाते हैं।

विषय संदेश सीमा

विषय सदस्यता जोड़ने/निकालने की दर प्रति प्रोजेक्ट 3,000 क्यूपीएस तक सीमित है।

संदेश भेजने की दरों के लिए, फैनआउट थ्रॉटलिंग देखें।

फैनआउट थ्रॉटलिंग

मैसेज फ़ैनआउट एक संदेश को कई डिवाइसों पर भेजने की प्रक्रिया है, जैसे कि जब आप विषयों और समूहों को लक्षित करते हैं, या जब आप ऑडियंस या उपयोगकर्ता सेगमेंट को लक्षित करने के लिए नोटिफिकेशन कंपोज़र का उपयोग करते हैं।

संदेश फैनआउट तात्कालिक नहीं है और इसलिए कभी-कभी आपके पास एक साथ कई फैनआउट चल रहे होते हैं। हम प्रति प्रोजेक्ट समवर्ती संदेश फ़ैनआउट की संख्या 1,000 तक सीमित करते हैं। उसके बाद, हम अतिरिक्त फैनआउट अनुरोधों को अस्वीकार कर सकते हैं या अनुरोधों के फैनआउट को तब तक के लिए स्थगित कर सकते हैं जब तक कि पहले से चल रहे कुछ फैनआउट पूरे नहीं हो जाते।

वास्तविक प्राप्य फैनआउट दर एक ही समय में फैनआउट का अनुरोध करने वाली परियोजनाओं की संख्या से प्रभावित होती है। किसी व्यक्तिगत परियोजना के लिए 10,000 क्यूपीएस की फैनआउट दर असामान्य नहीं है, लेकिन यह संख्या कोई गारंटी नहीं है और सिस्टम पर कुल भार का परिणाम है। यह ध्यान रखना महत्वपूर्ण है कि उपलब्ध फैनआउट क्षमता परियोजनाओं के बीच विभाजित है, न कि फैनआउट अनुरोधों के बीच। इसलिए, यदि आपके प्रोजेक्ट में दो फैनआउट प्रगति पर हैं, तो प्रत्येक फैनआउट को उपलब्ध फैनआउट दर का केवल आधा ही दिखाई देगा। अपनी फैनआउट गति को अधिकतम करने का अनुशंसित तरीका यह है कि एक समय में केवल एक सक्रिय फैनआउट प्रगति पर हो।

एफसीएम पोर्ट और आपका फ़ायरवॉल

यदि आपके संगठन के पास इंटरनेट पर या इंटरनेट से ट्रैफ़िक को प्रतिबंधित करने के लिए फ़ायरवॉल है, तो आपको अपने नेटवर्क पर डिवाइसों को संदेश प्राप्त करने के लिए मोबाइल उपकरणों को एफसीएम से कनेक्ट करने की अनुमति देने के लिए इसे कॉन्फ़िगर करने की आवश्यकता है। एफसीएम आमतौर पर पोर्ट 5228 का उपयोग करता है, लेकिन कभी-कभी यह 443, 5229 और 5230 का उपयोग करता है।

आपके नेटवर्क पर कनेक्ट होने वाले उपकरणों के लिए, एफसीएम विशिष्ट आईपी प्रदान नहीं करता है क्योंकि हमारी आईपी रेंज बहुत बार बदलती है और आपके फ़ायरवॉल नियम पुराने हो सकते हैं, जिससे आपके उपयोगकर्ताओं के अनुभव पर असर पड़ सकता है। आदर्श रूप से, अनुमति सूची पोर्ट 5228-5230 और 443 बिना किसी आईपी प्रतिबंध के। हालाँकि, यदि आपके पास आईपी प्रतिबंध होना चाहिए, तो आपको goog.json में सूचीबद्ध सभी आईपी पतों को अनुमति देनी चाहिए। यह बड़ी सूची नियमित रूप से अपडेट की जाती है, और आपको अपने नियमों को मासिक आधार पर अपडेट करने की सलाह दी जाती है। फ़ायरवॉल आईपी प्रतिबंधों के कारण होने वाली समस्याएं अक्सर रुक-रुक कर होती हैं और उनका निदान करना मुश्किल होता है।

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

खोलने के लिए टीसीपी पोर्ट:

  • 5228
  • 5229
  • 5230
  • 443

खोलने के लिए होस्टनाम:

  • mtalk.google.com
  • mtalk4.google.com
  • mtalk-steasing.google.com
  • mtalk-dev.google.com
  • alt1-mtalk.google.com
  • alt2-mtalk.google.com
  • alt3-mtalk.google.com
  • alt4-mtalk.google.com
  • alt5-mtalk.google.com
  • alt6-mtalk.google.com
  • alt7-mtalk.google.com
  • alt8-mtalk.google.com
  • android.apis.google.com
  • डिवाइस-प्रावधान.googleapis.com
  • firebaseinstallations.googleapis.com

नेटवर्क पता अनुवाद और/या स्टेटफुल पैकेट निरीक्षण फ़ायरवॉल:

यदि आपका नेटवर्क नेटवर्क एड्रेस ट्रांसलेशन (NAT) या स्टेटफुल पैकेट इंस्पेक्शन (SPI) लागू करता है, तो पोर्ट 5228-5230 पर हमारे कनेक्शन के लिए 30 मिनट या उससे बड़ा टाइमआउट लागू करें। यह हमें आपके उपयोगकर्ताओं के मोबाइल उपकरणों की बैटरी खपत को कम करते हुए विश्वसनीय कनेक्टिविटी प्रदान करने में सक्षम बनाता है।

वीपीएन इंटरैक्शन और बायपासेबिलिटी

फायरबेस क्लाउड मैसेजिंग यह सुनिश्चित करने के लिए विभिन्न कदम उठाती है कि फोन से सर्वर तक पुश मैसेजिंग कनेक्शन विश्वसनीय है और जितनी बार संभव हो सके उपलब्ध है। वीपीएन का उपयोग इस प्रयास को जटिल बनाता है।

वीपीएन उस अंतर्निहित जानकारी को छिपा देते हैं जिसकी विश्वसनीयता और बैटरी जीवन को अधिकतम करने के लिए एफसीएम को अपने कनेक्शन को ट्यून करने की आवश्यकता होती है। कुछ मामलों में वीपीएन सक्रिय रूप से लंबे समय तक चलने वाले कनेक्शन को तोड़ देते हैं जिसके परिणामस्वरूप संदेश छूटने या विलंबित होने या उच्च बैटरी लागत के कारण उपयोगकर्ता अनुभव खराब हो जाता है। जब वीपीएन हमें ऐसा करने की अनुमति देने के लिए कॉन्फ़िगर किया जाता है, तो हम एक विश्वसनीय, बैटरी अनुकूल अनुभव सुनिश्चित करने के लिए एन्क्रिप्टेड कनेक्शन (बेस नेटवर्क वाईफाई या एलटीई पर) का उपयोग करके वीपीएन को बायपास करते हैं। एफसीएम द्वारा बायपास करने योग्य वीपीएन का उपयोग एफसीएम पुश नोटिफिकेशन चैनल के लिए विशिष्ट है। अन्य एफसीएम ट्रैफ़िक, जैसे पंजीकरण ट्रैफ़िक, सक्रिय होने पर वीपीएन का उपयोग करता है। जब एफसीएम कनेक्शन वीपीएन को बायपास करता है तो यह वीपीएन द्वारा प्रदान किए जा सकने वाले अतिरिक्त लाभ खो देता है, जैसे आईपी मास्किंग।

इसे बायपास किया जा सकता है या नहीं, इसे नियंत्रित करने के लिए अलग-अलग वीपीएन के अलग-अलग तरीके होंगे। निर्देशों के लिए अपने विशिष्ट वीपीएन के दस्तावेज़ देखें।

यदि वीपीएन को बायपास करने योग्य कॉन्फ़िगर नहीं किया गया है तो फायरबेस क्लाउड मैसेजिंग सर्वर से कनेक्ट करने के लिए वीपीएन नेटवर्क का उपयोग करेगा। इसके परिणामस्वरूप कुछ समय के लिए संदेशों में देरी हो सकती है और इसके परिणामस्वरूप अधिक बैटरी उपयोग हो सकता है क्योंकि क्लाउड मैसेजिंग वीपीएन कनेक्शन पर कनेक्शन बनाए रखने के लिए काम करता है।

साख

आपके द्वारा लागू की जाने वाली FCM सुविधाओं के आधार पर, आपको अपने फायरबेस प्रोजेक्ट से निम्नलिखित क्रेडेंशियल्स की आवश्यकता हो सकती है:

प्रोजेक्ट आईडी आपके फायरबेस प्रोजेक्ट के लिए एक अद्वितीय पहचानकर्ता, जिसका उपयोग FCM v1 HTTP एंडपॉइंट के अनुरोधों में किया जाता है। यह मान फायरबेस कंसोल सेटिंग्स फलक में उपलब्ध है।
पंजीकरण टोकन

एक अद्वितीय टोकन स्ट्रिंग जो प्रत्येक क्लाइंट ऐप इंस्टेंस की पहचान करती है। एकल डिवाइस और डिवाइस समूह मैसेजिंग के लिए पंजीकरण टोकन आवश्यक है। ध्यान दें कि पंजीकरण टोकन गुप्त रखे जाने चाहिए।

प्रेषक आईडी जब आप अपना फायरबेस प्रोजेक्ट बनाते हैं तो एक अद्वितीय संख्यात्मक मान बनाया जाता है, जो फायरबेस कंसोल सेटिंग्स फलक के क्लाउड मैसेजिंग टैब में उपलब्ध होता है। प्रेषक आईडी का उपयोग प्रत्येक प्रेषक की पहचान करने के लिए किया जाता है जो क्लाइंट ऐप पर संदेश भेज सकता है।
एक्सेस टोकन एक अल्पकालिक OAuth 2.0 टोकन जो HTTP v1 API के अनुरोधों को अधिकृत करता है। यह टोकन एक सेवा खाते से संबद्ध है जो आपके फायरबेस प्रोजेक्ट से संबंधित है। एक्सेस टोकन बनाने और घुमाने के लिए, अधिकृत भेजें अनुरोध में वर्णित चरणों का पालन करें।
सर्वर कुंजी (**बहिष्कृत** लीगेसी प्रोटोकॉल के लिए)

एक सर्वर कुंजी जो आपके ऐप सर्वर को Google सेवाओं तक पहुंच के लिए अधिकृत करती है, जिसमें अप्रचलित फायरबेस क्लाउड मैसेजिंग विरासत प्रोटोकॉल के माध्यम से संदेश भेजना भी शामिल है।

महत्वपूर्ण: अपने क्लाइंट कोड में कहीं भी सर्वर कुंजी शामिल न करें। साथ ही, अपने ऐप सर्वर को अधिकृत करने के लिए केवल सर्वर कुंजियों का उपयोग करना सुनिश्चित करें। Android, Apple प्लेटफ़ॉर्म और ब्राउज़र कुंजियाँ FCM द्वारा अस्वीकार कर दी गई हैं।