মেসেজের মেয়াদ সেট করা

FCM সাধারণত মেসেজ পাঠানোর সাথে সাথেই তা ডেলিভার করে দেয়। তবে, এটি সবসময় সম্ভব নাও হতে পারে। যেমন, ডিভাইস উপলভ্য নাও থাকতে পারে অথবা FCM কোনও অ্যাপ যাতে অতিরিক্ত রিসোর্স ব্যবহার করতে না পারে এবং ব্যাটারির আয়ুর উপর নেতিবাচক প্রভাব না ফেলে, সেই জন্য ইচ্ছাকৃতভাবে মেসেজ পাঠাতে দেরি করতে পারে।

এইসব ক্ষেত্রে, FCM মেসেজ স্টোর করে রাখে এবং যত তাড়াতাড়ি সম্ভব তা ডেলিভার করে। বেশিরভাগ ক্ষেত্রে এটি ঠিক হলেও, কিছু অ্যাপের ক্ষেত্রে দেরি না করে বিজ্ঞপ্তি পাঠানো প্রয়োজন। যেমন, ইনকামিং কলের বিজ্ঞপ্তি বা কোনও ইভেন্টে যোগ দেওয়ার আমন্ত্রণ।

Android ও ওয়েবে, আপনি কোনও মেসেজের সর্বাধিক লাইফস্প্যান নির্দিষ্ট করতে পারবেন। ভ্যালু অবশ্যই ০ থেকে ২,৪১৯,২০০ সেকেন্ড (২৮ দিন) সময়সীমার মধ্যে হতে হবে এবং এটি FCM-এর মেসেজ স্টোর করা ও ডেলিভার করার চেষ্টা করার সর্বোচ্চ সময়সীমার সাথে সম্পর্কিত। সাধারণত, যেসব অনুরোধে এই ফিল্ড থাকে না, সেগুলি সর্বাধিক চার সপ্তাহ পর্যন্ত থাকে।

iOS-এ, আপনি apns-expiration হেডার সেট করতে পারবেন ApnsConfig অবজেক্টে। আরও তথ্যের জন্য, APN-এ বিজ্ঞপ্তি সংক্রান্ত অনুরোধ পাঠানো বিষয়ে Apple-এর ডকুমেন্টেশন দেখুন।

এই ফিচারটি কীভাবে ব্যবহার করা যেতে পারে তার কিছু উদাহরণ এখানে দেওয়া হল:

  • ভিডিও চ্যাটে ইনকামিং কল
  • আমন্ত্রণের মেয়াদ শেষ হয়ে যাওয়া ইভেন্ট
  • ক্যালেন্ডার ইভেন্ট

মেসেজের লাইফস্প্যান নির্দিষ্ট করার আরেকটি সুবিধা হল, FCM ০ সেকেন্ডের লাইভ ভ্যালু সহ মেসেজে কোলাপ্সিবল মেসেজ থ্রটলিং প্রয়োগ করে না। মনে রাখবেন, 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 সেট করা থাকলে এবং একই collapse কী ও রেজিস্ট্রেশন টোকেন সহ কোনও মেসেজ ডেলিভারির জন্য অপেক্ষা করলে, পুরনো মেসেজটি বাতিল করা হয় এবং নতুন মেসেজটি তার জায়গা নেয়। তবে, যদি 'কলাপ্স কী' সেট করা না থাকে, তাহলে নতুন ও পুরনো, দুটি মেসেজই ভবিষ্যতে ডেলিভার করার জন্য স্টোর করা হয়।

ডিভাইসটি FCM-এর সাথে কানেক্ট করা না থাকলে, কানেকশন তৈরি না হওয়া পর্যন্ত মেসেজটি স্টোর করা থাকে। কানেকশন তৈরি হয়ে গেলে, FCM ডিভাইসে সব বাকি থাকা মেসেজ ডেলিভার করে। ডিভাইসটি আর কখনও কানেক্ট না হলে, মেসেজটি শেষ পর্যন্ত টাইম-আউট হয়ে যায় এবং FCM স্টোরেজ থেকে বাতিল করা হয়। ttl ফ্ল্যাগ সেট করা না থাকলে, ডিফল্ট টাইমআউট চার সপ্তাহ। FCM কোনও ডিভাইসে মেসেজ ডেলিভার করার চেষ্টা করার সময় অ্যাপটি আনইনস্টল করা থাকলে, FCM সাথে সাথে সেই মেসেজটি বাতিল করে দেয় এবং রেজিস্ট্রেশন টোকেনটি অবৈধ করে দেয়। ভবিষ্যতে ওই ডিভাইসে মেসেজ পাঠানোর চেষ্টা করলে NotRegistered সমস্যা দেখা যায়।

Android ডিভাইসের ক্ষেত্রে, ডিভাইসটি যদি এক মাসের বেশি সময় ধরে FCM-এর সাথে কানেক্ট না করে থাকে, তাহলে FCM মেসেজটি গ্রহণ করে, কিন্তু সঙ্গে সঙ্গে সেটি ডিসকার্ড করে দেয়। আপনি ডিভাইসটিতে শেষ ডেটা মেসেজ পাঠানোর চার সপ্তাহের মধ্যে ডিভাইসটি কানেক্ট হলে, আপনার ক্লায়েন্ট অ্যাপ onDeletedMessages() কলব্যাক পায়।

Android বা Apple প্ল্যাটফর্মে মেসেজ ডেলিভারি সম্পর্কে আরও তথ্য পেতে, আপনি FCM রিপোর্টিং ড্যাশবোর্ড ব্যবহার করতে পারেন, যা Apple এবং Android ডিভাইসে পাঠানো এবং খোলা মেসেজের সংখ্যা রেকর্ড করে, সাথে Android অ্যাপের জন্য ইম্প্রেশন সংক্রান্ত ডেটাও রেকর্ড করে।