একটি বার্তার জীবনকাল সেট করুন

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

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

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

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

এই ফিচারটির কয়েকটি সম্ভাব্য ব্যবহার নিচে দেওয়া হলো:

  • ভিডিও চ্যাট ইনকামিং কল
  • মেয়াদোত্তীর্ণ আমন্ত্রণ ইভেন্ট
  • ক্যালেন্ডারের ইভেন্টগুলি

একটি মেসেজের জীবনকাল নির্দিষ্ট করার আরেকটি সুবিধা হলো, FCM ০ সেকেন্ডের টাইম টু লিভ (TTL) ভ্যালুযুক্ত মেসেজগুলিতে কোলাপসিবল মেসেজ থ্রটলিং প্রয়োগ করে না। মনে রাখবেন যে, 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 এ একটি মেসেজ পোস্ট করে এবং তার বিনিময়ে একটি মেসেজ আইডি পায়, তার মানে এই নয় যে মেসেজটি ইতিমধ্যে ডিভাইসে পৌঁছে গেছে। বরং, এর মানে হলো মেসেজটি ডেলিভারির জন্য গৃহীত হয়েছে। মেসেজটি কখন ডেলিভারি হবে তা অনেকগুলো বিষয়ের উপর নির্ভর করে।

যদি ডিভাইসটি সংযুক্ত থাকা অবস্থায় ডোজ মোডে থাকে, তাহলে ডিভাইসটি ডোজ মোড থেকে বেরিয়ে না আসা পর্যন্ত FCM একটি নিম্ন অগ্রাধিকারের বার্তা সংরক্ষণ করে রাখে। যদি collapse_key সেট করা থাকে এবং একই collapse key ও registration token সহ ডেলিভারির জন্য অপেক্ষারত কোনো বিদ্যমান বার্তা থাকে, তাহলে পুরোনো বার্তাটি বাতিল হয়ে যায় এবং নতুন বার্তাটি তার স্থান নেয়। তবে, যদি collapse key সেট করা না থাকে, তাহলে নতুন এবং পুরোনো উভয় বার্তাই ভবিষ্যতের ডেলিভারির জন্য সংরক্ষণ করা হয়।

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

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

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