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

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

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

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

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