FCM आम तौर पर, मैसेज भेजे जाने के तुरंत बाद उन्हें डिलीवर कर देता है. हालांकि, ऐसा हमेशा नहीं हो पाता. उदाहरण के लिए, ऐसा हो सकता है कि डिवाइस उपलब्ध न हो या FCM जान-बूझकर मैसेज भेजने में देरी कर रहा हो, ताकि कोई ऐप्लिकेशन ज़्यादा संसाधनों का इस्तेमाल न करे और बैटरी लाइफ़ पर बुरा असर न पड़े.
ऐसे मामलों में, FCM मैसेज को सेव कर लेता है और जल्द से जल्द उसे डिलीवर करता है. ज़्यादातर मामलों में यह ठीक है, लेकिन कुछ ऐप्लिकेशन ऐसे होते हैं जिनसे सूचनाएं तुरंत भेजी जानी चाहिए. उदाहरण के लिए, इनकमिंग कॉल या किसी इवेंट के न्योते की सूचना.
Android और वेब पर, यह तय किया जा सकता है कि कोई मैसेज कितने समय तक दिखेगा. यह वैल्यू, 0 से 24,19,200 सेकंड (28 दिन) के बीच की होनी चाहिए. यह वैल्यू, उस ज़्यादा से ज़्यादा समय के बराबर होती है जिसके लिए FCM, मैसेज को सेव करके रखता है और उसे डिलीवर करने की कोशिश करता है. डिफ़ॉल्ट रूप से, जिन अनुरोधों में यह फ़ील्ड नहीं होता है वे ज़्यादा से ज़्यादा चार हफ़्तों तक मान्य रहते हैं.
iOS पर, ApnsConfig ऑब्जेक्ट में apns-expiration हेडर सेट किया जा सकता है. ज़्यादा जानकारी के लिए, APNs को सूचना के अनुरोध भेजने के बारे में Apple का दस्तावेज़ देखें.
इस सुविधा का इस्तेमाल इन कामों के लिए किया जा सकता है:
- वीडियो चैट के लिए इनकमिंग कॉल
- ऐसे इवेंट जिनकी समयसीमा खत्म होने वाली है
- कैलेंडर इवेंट
मैसेज की समयसीमा तय करने का एक और फ़ायदा यह है कि FCM, छोटे किए जा सकने वाले मैसेज को थ्रॉटल करने की सुविधा को उन मैसेज पर लागू नहीं करता जिनकी समयसीमा 0 सेकंड है. ध्यान रखें कि ttl की वैल्यू 0 होने का मतलब है कि जो मैसेज तुरंत डिलीवर नहीं किए जा सकते उन्हें खारिज कर दिया जाता है. हालांकि, ऐसे मैसेज कभी सेव नहीं किए जाते. इसलिए, सूचना वाले मैसेज भेजने में सबसे कम इंतज़ार का समय लगता है.
यहां एक ऐसे अनुरोध का उदाहरण दिया गया है जिसमें टीटीएल शामिल है:
{
"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 फ़्लैग सेट नहीं है, तो डिफ़ॉल्ट टाइम आउट चार हफ़्ते का होता है. अगर FCM किसी डिवाइस पर मैसेज डिलीवर करने की कोशिश करता है और उस दौरान ऐप्लिकेशन को अनइंस्टॉल कर दिया जाता है, तो FCM उस मैसेज को तुरंत खारिज कर देता है. साथ ही, रजिस्ट्रेशन टोकन को अमान्य कर देता है. उस डिवाइस पर मैसेज भेजने की अगली कोशिशों के नतीजे के तौर पर, NotRegistered गड़बड़ी का मैसेज दिखता है.
Android डिवाइसों के लिए, अगर डिवाइस एक महीने से ज़्यादा समय से FCM से कनेक्ट नहीं हुआ है, तो FCM अब भी मैसेज स्वीकार करता है, लेकिन उसे तुरंत खारिज कर देता है. अगर डिवाइस, आपके भेजे गए आखिरी डेटा मैसेज के चार हफ़्तों के अंदर कनेक्ट हो जाता है, तो आपके क्लाइंट ऐप्लिकेशन को onDeletedMessages() कॉलबैक मिलता है.
Android या Apple प्लैटफ़ॉर्म पर मैसेज की डिलीवरी के बारे में ज़्यादा अहम जानकारी पाने के लिए, FCM रिपोर्टिंग डैशबोर्ड का इस्तेमाल किया जा सकता है. यह डैशबोर्ड, Apple और Android डिवाइसों पर भेजे गए और खोले गए मैसेज की संख्या रिकॉर्ड करता है. साथ ही, Android ऐप्लिकेशन के इंप्रेशन का डेटा भी रिकॉर्ड करता है.