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

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 ऐप्लिकेशन के इंप्रेशन का डेटा भी शामिल होता है.