Android মেসেজের অগ্রাধিকার সেট ও ম্যানেজ করা

Android-এ ডাউনস্ট্রিম মেসেজের ক্ষেত্রে ডেলিভারির অগ্রাধিকার অ্যাসাইন করার জন্য আপনার কাছে দুটি বিকল্প আছে: সাধারণ এবং উচ্চ অগ্রাধিকার। সাধারণ এবং উচ্চ অগ্রাধিকারযুক্ত মেসেজ ডেলিভারি এইভাবে কাজ করে:

  • সাধারণ অগ্রাধিকার। ডেটা ও বিজ্ঞপ্তি মেসেজের জন্য এটি ডিফল্ট অগ্রাধিকার। ডিভাইস স্লিপ মোডে না থাকলে সাধারণ প্রায়োরিটি মেসেজ সাথে সাথে ডেলিভার করা হয়। ডিভাইস ডোজ মোডে থাকলে, ব্যাটারি সাশ্রয় করার জন্য, ডিভাইস ডোজ মোড থেকে বেরিয়ে না আসা পর্যন্ত ডেলিভারিতে দেরি হতে পারে। কম সময়-সংবেদনশীল মেসেজের জন্য, যেমন নতুন ইমেলের বিজ্ঞপ্তি, আপনার UI সিঙ্ক করে রাখা বা ব্যাকগ্রাউন্ডে অ্যাপ ডেটা সিঙ্ক করা, সাধারণ ডেলিভারি অগ্রাধিকার বেছে নিন।

  • বেশি অগ্রাধিকার।FCM বেশি অগ্রাধিকারের মেসেজ অবিলম্বে ডেলিভার করার চেষ্টা করে, প্রয়োজন হলে FCM-কে স্লিপিং ডিভাইস জাগিয়ে তুলতে এবং কিছু সীমিত প্রসেসিং (খুব সীমিত নেটওয়ার্ক অ্যাক্সেস সহ) চালানোর অনুমতি দেয়। উচ্চ অগ্রাধিকারযুক্ত মেসেজের ফলে সাধারণত ব্যবহারকারী আপনার অ্যাপ বা এর বিজ্ঞপ্তির সাথে ইন্টার‍্যাক্ট করেন।

উচ্চ ও সাধারণ অগ্রাধিকারের মেসেজের মধ্যে সিদ্ধান্ত নেওয়া

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

উচ্চ ও সাধারণ অগ্রাধিকারের মেসেজের জন্য মেসেজ প্রসেসিং

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

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

আপনার মেসেজ প্রসেস করার জন্য যদি অতিরিক্ত সময়ের প্রয়োজন হয়, যেমন মেসেজ পেলোডে থাকা imageUrl ফেচ করা, তাহলে অ্যাপ্লিকেশন লাইফসাইকেল বাড়ানোর জন্য আপনাকে WorkManager বা ফোরগ্রাউন্ড সার্ভিসের মতো কনস্ট্রাক্ট ব্যবহার করতে হবে। আপনার বিজ্ঞপ্তি সম্পূর্ণভাবে প্রসেস করা হয়েছে কিনা তা যাচাই করতে onMessageReceived পদ্ধতি ওভাররাইড করার সময় আপনাকে নিম্নলিখিত নির্দেশিকা ব্যবহার করতে হবে।

  • উচ্চ অগ্রাধিকারযুক্ত বিজ্ঞপ্তির জন্য: Android WorkManager ব্যবহার করে জরুরি ভিত্তিক কাজ শুরু করুন যাতে আপনার উচ্চ অগ্রাধিকারযুক্ত বিজ্ঞপ্তি প্রসেস করার জন্য অগ্রাধিকার পায় এবং বিজ্ঞপ্তি রেন্ডারিং সম্পূর্ণ হয়। ভালো খবর হল, আপনি যদি উচ্চ অগ্রাধিকার FCM প্রসেসিংয়ের ফলে জরুরি ভিত্তিক কাজের কোটা শেষ হয়ে যাওয়ার ব্যাপারে চিন্তিত থাকেন, তাহলে আপনাকে আর চিন্তা করতে হবে না। উচ্চ অগ্রাধিকার FCM onMessageReceived পাঠানোর ঠিক পরেই শিডিউল করা জরুরি ভিত্তিক কাজের জন্য সংক্ষিপ্ত ছাড় আছে।
  • সাধারণ প্রায়োরিটি বিজ্ঞপ্তির জন্য: Android WorkManager-এর পরিবর্তে রেগুলার WorkRequest ব্যবহার করে শুরু করুন। এটি যাচাই করবে যে আপনার বিজ্ঞপ্তি প্রসেস করার জন্য প্রয়োজনীয় অতিরিক্ত কাজ অগ্রাধিকারপ্রাপ্ত প্রসেসিং ব্যবহার না করেই এবং ব্যাটারির ব্যবহার সংক্রান্ত অপ্রয়োজনীয় সমস্যা সৃষ্টি না করেই শেষ পর্যন্ত প্রসেস করা হয়েছে।

মেসেজের জন্য অগ্রাধিকার সেট করা

আপনি Admin SDK, FCM REST API এবং Firebase কনসোল ব্যবহার করে আপনার ব্যবহারকারীদের বিজ্ঞপ্তি পাঠাতে পারবেন। Admin SDK এবং FCM REST API থেকে আপনার প্রায়োরিটি সেটিং পরিবর্তন করতে, আপনাকে মেসেজ JSON পেলোড আপডেট করতে হবে। অগ্রাধিকার কীভাবে 'উচ্চ' হিসেবে সেট করতে হয় তা দেখতে, আপনি নিম্নলিখিত কোড স্যাম্পেল ব্যবহার করতে পারেন। কনসোল থেকে পাঠানো বিজ্ঞপ্তির জন্য, Android-নির্দিষ্ট বিজ্ঞপ্তি ফিল্ড সেট করার সুবিধা নেই।

 {
  "message": {
      "notification": {
          "body": "Purchase exceeding $500 detected",
          "title": "Credit card purchase"
      },
      "data": {
          "purchaser": "Your child",
          "items": "Gravity Defier Sneakers"
      },
      "android": {
          "priority": "high"
      },
      "apns": {
          "headers": {
              "apns-priority": "5"
          }
      }
  }
}

Doze মোডে আপনার উচ্চ অগ্রাধিকারযুক্ত বিজ্ঞপ্তি পরীক্ষা করুন

ব্যবহারকারী যখন আপনার উচ্চ অগ্রাধিকারযুক্ত বিজ্ঞপ্তি পান, তখন সেগুলি সঠিকভাবে গৃহীত এবং প্রসেস করা হচ্ছে কিনা তা নিশ্চিত করতে, আপনার বিজ্ঞপ্তি পরীক্ষা করার জন্য এই নির্দেশাবলী অনুসরণ করুন:

  1. Doze-এর মাধ্যমে আপনার অ্যাপ পরীক্ষা করুন লিঙ্কে দেওয়া নির্দেশাবলী অনুসরণ করে আপনার ডিভাইস Doze মোডে সেট করুন।
  2. টেস্ট ডিভাইসে আপনার অ্যাপ থেকে FCM রেজিস্ট্রেশন টোকেন অ্যাক্সেস করুন। কীভাবে টোকেন অ্যাক্সেস করবেন সেই সম্পর্কে আরও জানতে, ব্যাকগ্রাউন্ড অ্যাপে টেস্ট মেসেজ পাঠান নিবন্ধটি দেখুন।
  3. FCM টোকেন পাওয়ার পরে, আপনার FCM বিজ্ঞপ্তি পাঠানোর কোড বা cURL কমান্ড ব্যবহার করে টেস্ট ডিভাইসে আপনার অত্যন্ত গুরুত্বপূর্ণ বিজ্ঞপ্তি পাঠান, যেটিতে আপনার অত্যন্ত গুরুত্বপূর্ণ বিজ্ঞপ্তির সাথে ম্যাচ করা কনফিগারেশন প্যারামিটার আছে।

Android-এ উচ্চ অগ্রাধিকারযুক্ত FCM-এর অগ্রাধিকার কমানো

Android-এ উচ্চ অগ্রাধিকারযুক্ত মেসেজ সময়-সংবেদনশীল, ব্যবহারকারীর কাছে দৃশ্যমান কন্টেন্টের জন্য এবং এর ফলে ব্যবহারকারী-মুখী বিজ্ঞপ্তি দেখানো উচিত। FCM যদি এমন কোনও প্যাটার্ন শনাক্ত করে যেখানে মেসেজের ফলে ব্যবহারকারী নিজে ইন্টার‌্যাক্ট করতে পারেন এমন বিজ্ঞপ্তি দেখানো হয় না, তাহলে আপনার মেসেজকে সাধারণ প্রায়োরিটিতে নামিয়ে আনা হতে পারে অথবা Google Play পরিষেবার মাধ্যমে ম্যানেজ করার জন্য প্রতিনিধি নিযুক্ত করা হতে পারে।

FCM মেসেজকে কম অগ্রাধিকার দেওয়া হবে নাকি প্রক্সি করা হবে তা নির্ধারণ করার সময় ৭ দিনের মেসেজ সংক্রান্ত আচরণ ব্যবহার করে; এটি আপনার অ্যাপ্লিকেশনের প্রতিটি ইনস্ট্যান্সের জন্য স্বাধীনভাবে এই নির্ধারণ করে। যদি, উচ্চ অগ্রাধিকার মেসেজের উত্তরে, বিজ্ঞপ্তিগুলি এমনভাবে প্রদর্শিত হয় যা ব্যবহারকারীর কাছে দৃশ্যমান হয়, তাহলে আপনার ভবিষ্যতের উচ্চ-অগ্রাধিকার মেসেজ প্রভাবিত হবে না।

Google Play পরিষেবার মাধ্যমে বিজ্ঞপ্তি ডেলিগেশন

নির্দিষ্ট কিছু মাপকাঠি পূরণ করে এমন উচ্চ অগ্রাধিকারের বিজ্ঞপ্তি মেসেজ, অগ্রাধিকার কমানোর পরিবর্তে Google Play পরিষেবার মাধ্যমে প্রক্সি করা হয়। এর অর্থ হল, অ্যাপ চালু না করেই Google Play পরিষেবা অ্যাপের হয়ে বিজ্ঞপ্তি দেখায়। Android ডিভাইসে ব্যবহারকারীকে আরও ভালো অভিজ্ঞতা প্রদান করার জন্য এটি করা হয়।

মনে রাখবেন যে প্রক্সি করা বিজ্ঞপ্তি মেসেজ, মেসেজ পাওয়ার সাথে সম্পর্কিত অ্যানালিটিক্স কীভাবে রিপোর্ট করা হয় সেই পদ্ধতিতে পরিবর্তন নিয়ে আসে:

  • প্রক্সি করা বিজ্ঞপ্তির জন্য অ্যানালিটিক্স রিপোর্ট করতে, আপনার অ্যাপে FCM SDK ভার্সন 24.0.0 বা তার পরবর্তী যেকোনও ভার্সন ব্যবহার করতে হবে।
  • প্রক্সি করা বিজ্ঞপ্তি চালু করার আগে যতগুলি মেসেজ পেতেন, এখন তার থেকে কম মেসেজ পেতে পারেন বা মেসেজ পেতে দেরি হতে পারে। এর কারণ হল, আপনার অ্যাপ চালু হওয়ার পরেই প্রক্সি করা বিজ্ঞপ্তির অ্যানালিটিক্স রিপোর্ট করা হয় এবং বিজ্ঞপ্তির ফলে অ্যাপ না খুললে, এটি একেবারেই রিপোর্ট করা নাও হতে পারে।

এইভাবে বিজ্ঞপ্তি মেসেজ প্রক্সি করা হল Android Q+ এবং Google Play পরিষেবা ভার্সন ১৯০৫৪০০০ বা তার পরবর্তী ভার্সন ব্যবহার করা অ্যাপের জন্য ডিফল্ট অ্যাকশন। HTTP v1 API-এর মাধ্যমে পাঠানো মেসেজ প্রক্সি করা হয়, কিন্তু Firebase কনসোল বা পুরনো API-এর মাধ্যমে পাঠানো মেসেজ প্রক্সি করা হবে না। মনে রাখবেন, এই ফিচারটি বর্তমানে বিটা ভার্সনে আছে এবং এতে পরিবর্তন হতে পারে।

ডিভাইসের ব্যাটারি ও মেমরির জন্য ডেলিগেশন চালু রাখার সুবিধা আমরা বিশেষভাবে সাজেস্ট করলেও, আপনি এইসব উপায়ের যেকোনও একটির মাধ্যমে এই আচরণ থেকে অপ্ট-আউট করতে পারবেন:

  • অ্যাপ-লেভেল ভিত্তিতে: আপনার অ্যাপ ম্যানিফেস্টে, <meta-data android:name= "delivery_metrics_exported_to_big_query_enabled" android:value="false"/> নির্দেশিকা যোগ করুন।
  • অ্যাপ ইনস্ট্যান্সের ভিত্তিতে: অ্যাপ ইনস্ট্যান্সের জন্য, নির্দিষ্ট ব্যবহারের ক্ষেত্রের উপর নির্ভর করে আপনার অ্যাপের UI ফ্লোতে fun setNotificationDelegationEnabled(disable: Boolean): Task<Void!> সেট করুন।
  • প্রতিটি মেসেজের ভিত্তিতে: পাঠানোর অনুরোধের জন্য AndroidNotification অবজেক্টে proxy কী DENY-এ সেট করুন।

Android-এ মেসেজ ডিপ্রায়োরাইটাইজেশন পরিমাপ করা

  • ব্যক্তিগত মেসেজ। ডেলিভারির সময়, আপনি getPriority() থেকে পাওয়া ডেলিভারি সংক্রান্ত প্রায়োরিটির সাথে getOriginalPriority() থেকে পাওয়া আসল প্রায়োরিটি তুলনা করে কোনও নির্দিষ্ট মেসেজের প্রায়োরিটি কমানো হয়েছে কিনা তা নির্ধারণ করতে পারবেন।

  • সব মেসেজ। FCM Aggregate Delivery Data API Android-এ পাঠানো আপনার সব মেসেজের কত শতাংশের অগ্রাধিকার কমানো হচ্ছে তা রিপোর্ট করতে পারে। কিছু মেসেজ এগ্রিগেট ডেটা রিপোর্ট থেকে বাদ দেওয়া হতে পারে, তবে সামগ্রিকভাবে এগুলি মেসেজ ডিপ্ৰায়োরিটাইজেশন রেটের গ্লোবাল ভিউ প্রদান করে। আরও তথ্য এবং API কোয়েরি করার জন্য স্যাম্পেল কোডের জন্য অ্যাগ্রিগেট করা ডেলিভারি ডেটা সংক্রান্ত আমাদের নিবন্ধ দেখুন; এটি API এক্সপ্লোরার থেকেও এক্সপ্লোর করা যেতে পারে।

  • প্রক্সি করা বিজ্ঞপ্তি। প্রক্সি করা বিজ্ঞপ্তি বর্তমান FCM বা GA ডেলিভারি মেট্রিক্সে গণনা করা হবে না, তাই আপনি বিজ্ঞপ্তি ডেলিভারি মেট্রিক্সে ১৫% পর্যন্ত ড্রপ অনুভব করতে পারেন। প্রক্সি করা মেসেজের রিপোর্ট পেতে, FCM Aggregate Delivery Data API ব্যবহার করুন। ProxyNotificationInsightPercents-এ সফলভাবে প্রক্সি করা বিজ্ঞপ্তির শতাংশের পাশাপাশি যেসব মেসেজ সফলভাবে প্রক্সি করা যায়নি সেগুলির বিবরণও রিপোর্ট করে।

বিজ্ঞপ্তি দেরিতে পাওয়ার সমস্যার সমাধান করা

  • আপনার অ্যাপ ইনস্ট্যান্সে বিজ্ঞপ্তি চালু করা আছে কিনা তা নিশ্চিত করুন। ব্যবহারকারী আপনার অ্যাপের জন্য বিজ্ঞপ্তির অনুমতি বন্ধ করে দিলে, আপনার কোনও বিজ্ঞপ্তি পোস্ট করা হবে না, ফলস্বরূপ, আপনার মেসেজকে কম অগ্রাধিকার দেওয়া হবে। কোনও অ্যাপ্লিকেশন ইনস্ট্যান্সে উচ্চ প্রায়োরিটি মেসেজ পাঠানোর আগে আপনাকে বিজ্ঞপ্তি চালু করা আছে কিনা তা যাচাই করতে হবে।

  • আপনার বিজ্ঞপ্তি প্রসেস করার সময় অতিরিক্ত নেটওয়ার্ক কল করা এড়িয়ে চলুন। Android মোবাইল ব্যবহারকারীদের একটি ছোট অংশ হাই লেটেন্সি নেটওয়ার্কে থাকার কারণে, বিজ্ঞপ্তি দেখানোর আগে আপনার সার্ভারে কানেকশন খোলা এড়িয়ে চলুন। অনুমোদিত প্রসেসিং সময় শেষ হওয়ার আগে সার্ভারে কল ব্যাক করা হাই লেটেন্সি নেটওয়ার্কে থাকা ব্যবহারকারীদের জন্য ঝুঁকিপূর্ণ হতে পারে।

    পরিবর্তে, FCM মেসেজে বিজ্ঞপ্তির কন্টেন্ট অন্তর্ভুক্ত করুন এবং অবিলম্বে এটি দেখান। Android-এ অতিরিক্ত ইন-অ্যাপ কন্টেন্টের জন্য সিঙ্ক করার প্রয়োজন হলে, ব্যাকগ্রাউন্ডে সেটি ম্যানেজ করার জন্য আপনি WorkManager-এর মাধ্যমে কোনও টাস্ক শিডিউল করতে পারেন।