Catch up on highlights from Firebase at Google I/O 2023. Learn more

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

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

संदेश प्रकार

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

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

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

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

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

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

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

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

सूचना संदेश

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

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

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

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

अधिसूचना संदेशों के निर्माण के लिए उपलब्ध पूर्वनिर्धारित कुंजियों की पूरी सूची के लिए संदर्भ दस्तावेज देखें:

डेटा संदेश

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

सामान्य क्षेत्रों का उपयोग कब करें

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

FCM 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"
      }
    }
  }
}

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

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

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

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

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

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

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

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

यहां एक अनुरोध का उदाहरण दिया गया है जिसमें TTL शामिल है:

{
  "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 से जुड़ा है, स्क्रीन चालू है और कोई थ्रॉटलिंग प्रतिबंध नहीं है, तो संदेश तुरंत डिलीवर हो जाता है।

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

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

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

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

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

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

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

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

बंधनेवाला संदेश थ्रॉटलिंग

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

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

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

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

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

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

प्रत्येक परियोजना के लिए, FCM समानांतर में 2500 कनेक्शनों की अनुमति देता है।

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

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

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

अपस्ट्रीम संदेश सीमा

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

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

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

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

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

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

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

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

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

FCM पोर्ट और आपका फ़ायरवॉल

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

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

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

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

  • 5228
  • 5229
  • 5230
  • 443

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

  • mtalk.google.com
  • mtalk4.google.com
  • mtalk-staging.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 सुविधाओं के आधार पर, आपको अपने Firebase प्रोजेक्ट से निम्नलिखित क्रेडेंशियल्स की आवश्यकता हो सकती है:

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

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

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

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

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