Google 致力于为黑人社区推动种族平等。查看具体举措
इस पेज का अनुवाद Cloud Translation API से किया गया है.
Switch to English

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

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

संदेश प्रकार

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

आम खेतों का उपयोग कब करें

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

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

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

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

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

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

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

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

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

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

गैर-बंधनेवाला और बंधनेवाला संदेश

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

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

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

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

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

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

कोई पेलोड के साथ शीर्ष संदेश डिफ़ॉल्ट रूप से बंधनेवाला हैं।

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

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

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

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

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

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

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

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

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

एफसीएम 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"
      }
    }
  }
}

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

एक संदेश की उम्र निर्धारित करना

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

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

एंड्रॉइड और वेब / जावास्क्रिप्ट पर, आप एक संदेश के अधिकतम जीवनकाल को निर्दिष्ट कर सकते हैं। मान 0 से 2,419,200 सेकंड (28 दिन) की अवधि का होना चाहिए, और यह उस समय की अधिकतम अवधि से मेल खाता है जिसके लिए 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 कई पार्टियों को एक ही क्लाइंट ऐप पर संदेश भेजने की अनुमति देता है। उदाहरण के लिए, मान लीजिए कि क्लाइंट ऐप कई योगदानकर्ताओं के साथ एक लेख एग्रीगेटर है, और उनमें से प्रत्येक को एक नया लेख प्रकाशित करते समय संदेश भेजने में सक्षम होना चाहिए। इस संदेश में एक URL हो सकता है ताकि क्लाइंट ऐप लेख डाउनलोड कर सके। एक स्थान पर सभी भेजने की गतिविधि को केंद्रीयकृत करने के बजाय, एफसीएम आपको इनमें से प्रत्येक योगदानकर्ता को अपने संदेश भेजने की सुविधा देता है।

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

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

अंत में, संबंधित प्रेषकों के साथ पंजीकरण टोकन साझा करें, और वे अपने स्वयं के प्रमाणीकरण कुंजी का उपयोग करके क्लाइंट ऐप पर संदेश भेजने में सक्षम होंगे।

ध्यान दें कि 100 एकाधिक प्रेषकों की सीमा है।

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

XMPP सर्वर थ्रॉटलिंग

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

आने वाले संदेशों के लिए खोलने के लिए पोर्ट:

  • 5228
  • 5229
  • 5230
  • 443

आउटगोइंग कनेक्शन की अनुमति देने के लिए पोर्ट:

इनमें से एक (विकल्प # 1 पसंद किया जाता है):

  1. कोई आईपी प्रतिबंध नहीं
  2. Google के ASN में 15169 के सूचीबद्ध IP ब्लॉक्स में शामिल सभी IP पते। इसे महीने में कम से कम एक बार अपडेट करना न भूलें।

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

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

साख

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

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

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

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

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

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