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