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
सेट है और डिलीवरी के लिए इंतज़ार कर रहे किसी मैसेज में वही collapse key और रजिस्ट्रेशन टोकन है, तो पुराने मैसेज को खारिज कर दिया जाता है. इसके बाद, नया मैसेज उसकी जगह ले लेता है. हालांकि, अगर कोलैप्स की सेट नहीं की जाती है, तो नए और पुराने, दोनों मैसेज को आने वाले समय में डिलीवर करने के लिए सेव किया जाता है.
अगर डिवाइस FCM से कनेक्ट नहीं है, तो मैसेज तब तक सेव रहता है, जब तक डिवाइस कनेक्ट नहीं हो जाता. कनेक्शन बन जाने पर, FCM
डिवाइस को सभी मैसेज भेजता है. अगर डिवाइस कभी कनेक्ट नहीं होता है, तो मैसेज की समयसीमा खत्म हो जाती है और उसे FCMस्टोरेज से हटा दिया जाता है. डिफ़ॉल्ट रूप से, समय खत्म होने की अवधि चार हफ़्ते होती है. हालांकि, अगर ttl
फ़्लैग सेट किया गया है, तो यह अवधि अलग हो सकती है. अगर डिवाइस पर मैसेज डिलीवर करने की FCM कोशिश के दौरान, ऐप्लिकेशन को अनइंस्टॉल कर दिया जाता है, तो FCM उस मैसेज को तुरंत खारिज कर देता है. साथ ही, रजिस्ट्रेशन टोकन को अमान्य कर देता है. उस डिवाइस पर मैसेज भेजने की कोशिश करने पर, NotRegistered
गड़बड़ी का मैसेज दिखता है.
Android डिवाइसों के लिए, अगर डिवाइस एक महीने से ज़्यादा समय से FCM से कनेक्ट नहीं है, तो FCM अब भी मैसेज स्वीकार करता है, लेकिन उसे तुरंत खारिज कर देता है. अगर डिवाइस, आखिरी बार भेजे गए डेटा मैसेज के चार हफ़्तों के अंदर कनेक्ट हो जाता है, तो आपके क्लाइंट ऐप्लिकेशन को onDeletedMessages()
कॉलबैक मिलता है.
Android या Apple प्लैटफ़ॉर्म पर मैसेज डिलीवर होने के बारे में ज़्यादा जानकारी पाने के लिए, FCM रिपोर्टिंग डैशबोर्ड का इस्तेमाल किया जा सकता है. यह Apple और Android डिवाइसों पर भेजे गए और खोले गए मैसेज की संख्या रिकॉर्ड करता है. साथ ही, Android ऐप्लिकेशन के लिए इंप्रेशन का डेटा भी रिकॉर्ड करता है.