FCM সাধারণত মেসেজ পাঠানোর সাথে সাথেই ডেলিভারি করে। যাইহোক, এটি সবসময় সম্ভব নাও হতে পারে। উদাহরণস্বরূপ, ডিভাইসটি অনুপলব্ধ হতে পারে বা FCM ইচ্ছাকৃতভাবে বার্তাগুলিকে বিলম্বিত করতে পারে যাতে একটি অ্যাপকে অতিরিক্ত সংস্থান গ্রহণ করা এবং ব্যাটারির জীবনকে নেতিবাচকভাবে প্রভাবিত করা থেকে বিরত রাখা যায়।
এই ক্ষেত্রে, FCM বার্তাটি সঞ্চয় করে এবং যত তাড়াতাড়ি সম্ভব বিতরণ করে। যদিও এটি বেশিরভাগ ক্ষেত্রে ঠিক আছে, কিছু অ্যাপ আছে যেগুলির জন্য দেরি না করে বিজ্ঞপ্তি পাঠানোর প্রয়োজন হয়৷ উদাহরণস্বরূপ, একটি ইনকামিং কলের জন্য একটি বিজ্ঞপ্তি বা একটি ইভেন্টে একটি আমন্ত্রণ৷
অ্যান্ড্রয়েড এবং ওয়েবে, আপনি একটি বার্তার সর্বোচ্চ আয়ুষ্কাল নির্দিষ্ট করতে পারেন৷ মানটি অবশ্যই 0 থেকে 2,419,200 সেকেন্ড (28 দিন) সময়কালের হতে হবে এবং এটি FCM সঞ্চয় করে এবং বার্তা সরবরাহ করার প্রচেষ্টার সর্বাধিক সময়ের সাথে সামঞ্জস্যপূর্ণ। ডিফল্টরূপে, যে অনুরোধগুলিতে এই ক্ষেত্রটি নেই, সর্বোচ্চ চার সপ্তাহের জন্য স্থায়ী হয়৷
iOS-এ, আপনি ApnsConfig অবজেক্টে apns-expiration
শিরোনাম সেট করতে পারেন। আরও বিশদ বিবরণের জন্য, APN-কে বিজ্ঞপ্তির অনুরোধ পাঠানোর বিষয়ে অ্যাপলের ডকুমেন্টেশন দেখুন।
এই বৈশিষ্ট্যটির জন্য এখানে কিছু সম্ভাব্য ব্যবহার রয়েছে:
- ভিডিও চ্যাট ইনকামিং কল
- আমন্ত্রণ ইভেন্টের মেয়াদ শেষ হচ্ছে
- ক্যালেন্ডার ইভেন্ট
একটি বার্তার জীবনকাল নির্দিষ্ট করার আরেকটি সুবিধা হল যে FCM 0 সেকেন্ডের লাইভ ভ্যালুর সময় সহ বার্তাগুলিতে সংকোচিত বার্তা থ্রটলিং প্রয়োগ করে না। মনে রাখবেন যে 0 এর ttl
মান মানে যে বার্তাগুলি অবিলম্বে বিতরণ করা যায় না তা বাতিল করা হয়৷ যাইহোক, যেহেতু এই ধরনের বার্তাগুলি কখনই সংরক্ষণ করা হয় না, এটি বিজ্ঞপ্তি বার্তাগুলি পাঠানোর জন্য সর্বোত্তম লেটেন্সি প্রদান করে৷
এখানে একটি অনুরোধের একটি উদাহরণ রয়েছে যা 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-এ, ডিভাইসটি Doze এর বাইরে না হওয়া পর্যন্ত FCM দ্বারা একটি কম অগ্রাধিকার বার্তা সংরক্ষণ করা হয়। যদি collapse_key
সেট করা থাকে, এবং একই পতন কী এবং রেজিস্ট্রেশন টোকেন সহ একটি বিদ্যমান বার্তা সরবরাহের জন্য অপেক্ষা করছে, তাহলে পুরানো বার্তাটি বাতিল হয়ে যায় এবং তারপরে নতুন বার্তাটি তার জায়গা নেয়। যাইহোক, যদি পতন কী সেট করা না থাকে, তাহলে নতুন এবং পুরানো উভয় বার্তাই ভবিষ্যতে ডেলিভারির জন্য সংরক্ষণ করা হয়।
ডিভাইসটি FCM এর সাথে সংযুক্ত না থাকলে, একটি সংযোগ স্থাপন না হওয়া পর্যন্ত বার্তাটি সংরক্ষণ করা হয়। যখন একটি সংযোগ স্থাপন করা হয়, তখন FCM সমস্ত মুলতুবি বার্তাগুলি ডিভাইসে সরবরাহ করে৷ যদি ডিভাইসটি আর কখনো সংযুক্ত না হয়, তাহলে বার্তাটি শেষ হয়ে যায় এবং FCM স্টোরেজ থেকে বাতিল করা হয়। ডিফল্ট টাইমআউট চার সপ্তাহ, যদি না ttl
পতাকা সেট করা হয়। যদি অ্যাপটি আনইনস্টল করা হয়ে থাকে যখন FCM ডিভাইসে একটি বার্তা দেওয়ার চেষ্টা করে, FCM সেই বার্তাটি অবিলম্বে বাতিল করে দেয় এবং নিবন্ধন টোকেনটি বাতিল করে দেয়। সেই ডিভাইসে একটি বার্তা পাঠানোর ভবিষ্যত প্রচেষ্টার ফলে একটি NotRegistered
ত্রুটি দেখা দেয়।
অ্যান্ড্রয়েড ডিভাইসগুলির জন্য, যদি ডিভাইসটি এক মাসের বেশি সময় ধরে FCM সাথে সংযুক্ত না থাকে, FCM এখনও বার্তাটি গ্রহণ করে কিন্তু অবিলম্বে এটি বাতিল করে দেয়। যদি ডিভাইসটি আপনার পাঠানো শেষ ডেটা বার্তার চার সপ্তাহের মধ্যে সংযোগ করে, তাহলে আপনার ক্লায়েন্ট অ্যাপ onDeletedMessages()
কলব্যাক পাবে।
Android বা Apple প্ল্যাটফর্মগুলিতে বার্তাগুলির বিতরণ সম্পর্কে আরও অন্তর্দৃষ্টি পেতে, আপনি FCM রিপোর্টিং ড্যাশবোর্ড ব্যবহার করতে পারেন, যা Apple এবং Android ডিভাইসগুলিতে পাঠানো এবং খোলা বার্তাগুলির সংখ্যা রেকর্ড করে এবং Android অ্যাপগুলির জন্য ইম্প্রেশনের ডেটা সহ।