Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

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

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.

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

संदेश प्रकार

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

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

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

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

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

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

सूचना संदेशों का उपयोग तब करें जब आप चाहते हैं कि FCM आपके क्लाइंट ऐप की ओर से एक सूचना प्रदर्शित करे। जब आप अपने क्लाइंट ऐप पर संदेशों को संसाधित करना चाहते हैं तो डेटा संदेशों का उपयोग करें।

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

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

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

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

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

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

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

डेटा संदेश

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Android पर संदेश को संक्षिप्त करने योग्य के रूप में चिह्नित करने के लिए, संदेश पेलोड में collapse_key पैरामीटर शामिल करें। डिफ़ॉल्ट रूप से, संक्षिप्त कुंजी Firebase कंसोल में पंजीकृत ऐप पैकेज नाम है। 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 से जुड़ा है, तो स्क्रीन चालू है और कोई थ्रॉटलिंग प्रतिबंध नहीं हैं, संदेश तुरंत वितरित किया जाता है।

यदि डिवाइस कनेक्ट है लेकिन डोज़ में, डिवाइस के डोज़ से बाहर होने तक कम प्राथमिकता वाला संदेश FCM द्वारा संग्रहीत किया जाता है। और यही वह जगह है जहां 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 संदेश/घंटा भेज सकते हैं। यह उच्च सीमा यातायात के अल्पकालिक विस्फोट की अनुमति देने के लिए है, जैसे कि जब उपयोगकर्ता चैट पर तेजी से बातचीत कर रहे हों। यह सीमा किसी डिवाइस पर अनजाने में बैटरी खत्म होने से तर्क भेजने में त्रुटियों को रोकती है।

IOS के लिए, जब दर APN की सीमा से अधिक हो जाती है, तो हम एक त्रुटि लौटाते हैं।

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

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

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

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

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

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

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

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

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

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

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

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

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

हम ऐसे डोमेन नामों का एक सेट प्रदान करते हैं जिन्हें 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
  • device-provisioning.googleapis.com
  • firebaseinstallations.googleapis.com

नेटवर्क एड्रेस ट्रांसलेशन और/या स्टेटफुल पैकेट इंस्पेक्शन फायरवॉल:

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

साख

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

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

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

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

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

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