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

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

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

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

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

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

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

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 পরিষেবার 19054000 বা এর পরের যেকোনও ভার্সন ব্যবহার করা অ্যাপের ক্ষেত্রে এইভাবে বিজ্ঞপ্তি মেসেজ প্রক্সি করা হল ডিফল্ট আচরণ। 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-এর মাধ্যমে কোনও টাস্ক শিডিউল করতে পারেন।