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

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

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

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

iOS-এ, আপনি ApnsConfig অবজেক্টে apns-expiration হেডার সেট করতে পারবেন। আরও বিবরণের জন্য, APNs-এ বিজ্ঞপ্তি সংক্রান্ত অনুরোধ পাঠানো সংক্রান্ত 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 key ও ডেলিভারির জন্য অপেক্ষা করা রেজিস্ট্রেশন টোকেন সহ আগে থেকে থাকা মেসেজ থাকলে, পুরনো মেসেজটি বাতিল করা হয় এবং নতুন মেসেজটি সেটির জায়গায় বসে। তবে, যদি 'কলাপ্স কী' সেট করা না থাকে, তাহলে নতুন ও পুরনো, দুটি মেসেজই ভবিষ্যতে ডেলিভার করার জন্য স্টোর করা হয়।

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

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

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