বার্তা অগ্রাধিকার সেট করুন এবং পরিচালনা করুন

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

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

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

উচ্চ এবং স্বাভাবিক অগ্রাধিকার বার্তাগুলির মধ্যে সিদ্ধান্ত নেওয়া

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

উচ্চ এবং স্বাভাবিক অগ্রাধিকার বার্তাগুলির জন্য বার্তা প্রক্রিয়াকরণ

অ্যান্ড্রয়েড ডিভাইসে প্রাপ্ত উচ্চ অগ্রাধিকার এবং সাধারণ অগ্রাধিকার উভয় বার্তার জন্য, 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. "Test your app with Doze" এর নির্দেশাবলী ব্যবহার করে আপনার ডিভাইসটিকে Doze মোডে সেট করুন।
  2. পরীক্ষামূলক ডিভাইসে আপনার অ্যাপ থেকে আপনার FCM নিবন্ধন টোকেন অ্যাক্সেস করুন। টোকেন কীভাবে অ্যাক্সেস করবেন সে সম্পর্কে আরও তথ্যের জন্য, ব্যাকগ্রাউন্ড অ্যাপে একটি পরীক্ষামূলক বার্তা পাঠান দেখুন।
  3. একবার আপনার FCM টোকেন হয়ে গেলে, আপনার FCM বিজ্ঞপ্তি প্রেরণ কোড অথবা একটি cURL কমান্ড ব্যবহার করে পরীক্ষা ডিভাইসে আপনার উচ্চ অগ্রাধিকার বিজ্ঞপ্তি পাঠান যার কনফিগারেশন প্যারামিটারগুলি আপনার উচ্চ অগ্রাধিকার বিজ্ঞপ্তির সাথে মেলে।

অ্যান্ড্রয়েডে উচ্চ অগ্রাধিকার FCM এর বঞ্চনা

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

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

Google Play পরিষেবার সাথে বিজ্ঞপ্তি প্রতিনিধিত্ব

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

মনে রাখবেন যে প্রক্সিড নোটিফিকেশন মেসেজগুলি প্রাপ্ত বার্তাগুলির সাথে সম্পর্কিত বিশ্লেষণ কীভাবে রিপোর্ট করা হয় তাতে পরিবর্তন আনে:

  • প্রক্সিড নোটিফিকেশনের বিশ্লেষণ রিপোর্ট করার জন্য, আপনার অ্যাপটিকে অবশ্যই 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 তে সেট করুন।

অ্যান্ড্রয়েডে বার্তা বঞ্চনা পরিমাপ করা হচ্ছে

  • পৃথক বার্তা। ডেলিভারির সময়, আপনি getPriority() থেকে ডেলিভার করা অগ্রাধিকার, getOriginalPriority() থেকে এর মূল অগ্রাধিকারের সাথে তুলনা করে নির্ধারণ করতে পারেন যে কোনও পৃথক বার্তা অগ্রাধিকার থেকে বঞ্চিত হয়েছে কিনা।

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

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

বিজ্ঞপ্তি বিলম্বের সমস্যা সমাধান

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

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

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