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

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

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

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

iOS पर, apns-expiration हेडर को ApnsConfig ऑब्जेक्ट में सेट किया जा सकता है. ज़्यादा जानकारी के लिए, APNs को सूचना के अनुरोध भेजने के बारे में Apple का दस्तावेज़ पढ़ें.

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

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

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

यहां 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 तब तक सेव रखता है, जब तक डिवाइस 'बैटरी बचाएं' मोड से बाहर नहीं आ जाता. अगर collapse_key सेट है और डिलीवरी के लिए, एक ही कोलैप्स की और रजिस्ट्रेशन टोकन वाला कोई मैसेज पहले से मौजूद है, तो पुराना मैसेज हटा दिया जाता है और उसकी जगह नया मैसेज आ जाता है. हालांकि, अगर कोलैप्स की सेट नहीं है, तो नए और पुराने, दोनों मैसेज सेव किए जाते हैं, ताकि उन्हें बाद में डिलीवर किया जा सके.

अगर डिवाइस, FCM से कनेक्ट नहीं है, तो मैसेज तब तक सेव रहता है, जब तक कनेक्शन नहीं बन जाता. कनेक्शन बनने पर, FCM डिवाइस पर, डिलीवरी के लिए पेंडिंग सभी मैसेज डिलीवर कर देता है. अगर डिवाइस कभी कनेक्ट नहीं होता है तो मैसेज की समयसीमा खत्म हो जाती है और उसे FCM स्टोरेज से हटा दिया जाता है. डिफ़ॉल्ट रूप से, समयसीमा चार हफ़्ते होती है. हालांकि, अगर ttl फ़्लैग सेट है, तो समयसीमा अलग हो सकती है. अगर the app has been uninstalled when FCM attempts to deliver a message to the device, FCM discards that message right away and invalidates the registration token. आने वाले समय में, उस डिवाइस पर मैसेज भेजने की कोशिश करने पर, NotRegistered गड़बड़ी होती है.

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

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