Android-এ ডাউনস্ট্রিম মেসেজকে ডেলিভারি অগ্রাধিকার অ্যাসাইন করার জন্য আপনার কাছে দুটি বিকল্প আছে: সাধারণ ও উচ্চ অগ্রাধিকার। সাধারণ ও উচ্চ অগ্রাধিকারযুক্ত মেসেজ ডেলিভারি এইভাবে কাজ করে:
সাধারণ অগ্রাধিকার। ডেটা ও বিজ্ঞপ্তি মেসেজের জন্য এটি হল ডিফল্ট অগ্রাধিকার। ডিভাইস স্লিপ মোডে না থাকলে সাধারণ অগ্রাধিকারের মেসেজ সঙ্গে সঙ্গে ডেলিভার করা হয়। ডিভাইস ডোজ মোডে থাকলে, ডিভাইস ডোজ মোড থেকে বেরিয়ে না আসা পর্যন্ত ব্যাটারি সাশ্রয় করার জন্য ডেলিভারি দেরিতে হতে পারে। কম সময়-সংবেদনশীল মেসেজের জন্য, যেমন নতুন ইমেলের বিজ্ঞপ্তি, আপনার UI সিঙ্ক করা বা ব্যাকগ্রাউন্ডে অ্যাপ ডেটা সিঙ্ক করার জন্য, সাধারণ ডেলিভারি অগ্রাধিকার বেছে নিন।
উচ্চ অগ্রাধিকার।FCM উচ্চ অগ্রাধিকার মেসেজ অবিলম্বে ডেলিভার করার চেষ্টা করে, এর ফলে FCM প্রয়োজনে স্লিপিং ডিভাইসকে ওয়েক-আপ করতে এবং সীমিত প্রসেসিং (খুব সীমিত নেটওয়ার্ক অ্যাক্সেস সহ) চালাতে পারে। উচ্চ অগ্রাধিকারযুক্ত মেসেজ সাধারণত আপনার অ্যাপ বা এর বিজ্ঞপ্তিগুলির সাথে ব্যবহারকারীর ইন্টার্যাকশন ঘটাতে সাহায্য করে।
উচ্চ ও সাধারণ অগ্রাধিকারযুক্ত মেসেজের মধ্যে সিদ্ধান্ত নেওয়া
সাধারণ আপডেট দেওয়ার জন্য সাধারণ অগ্রাধিকারযুক্ত মেসেজ উপযুক্ত হলেও, জরুরি বিষয় বা অ্যাকশনের ক্ষেত্রে অবিলম্বে ডেলিভারি নিশ্চিত করতে হলে, উচ্চ অগ্রাধিকার বেছে নিন। সাধারণ অগ্রাধিকারের মেসেজ ডেলিভার করার সময় ডোজ মোডের কারণে প্রভাবিত হতে পারে, তাই ব্যবহারকারীদের দেখানো বেশিরভাগ বিজ্ঞপ্তি উচ্চ অগ্রাধিকার হিসেবে সেট করলে সেগুলি দ্রুত ডেলিভার করা যাবে। যেমন, চ্যাট মেসেজ, অ্যাকাউন্ট সংক্রান্ত সমস্যা বা ফুড ডেলিভারি আপডেট, এই ধরনের বিজ্ঞপ্তিগুলিকে উচ্চ অগ্রাধিকার হিসেবে সেট করা উচিত।
উচ্চ ও সাধারণ অগ্রাধিকারযুক্ত মেসেজের জন্য মেসেজ প্রসেসিং
Android ডিভাইসে পাওয়া
অত্যন্ত গুরুত্বপূর্ণ ও সাধারণ গুরুত্বপূর্ণ মেসেজ, দু'টির ক্ষেত্রেই মেসেজ পেলোড প্রসেস করার জন্য
onMessageReceived হ্যান্ডলারে কয়েক সেকেন্ড সময় দেওয়া হয়। তবে, সাধারণ গুরুত্বপূর্ণ মেসেজের তুলনায় অত্যন্ত গুরুত্বপূর্ণ
মেসেজের জন্য একটু বেশি সময় বরাদ্দ করা হয়। এই সময়সীমা শুধুমাত্র বিজ্ঞপ্তি অবিলম্বে রেন্ডার করার জন্য
যথেষ্ট দীর্ঘ হওয়ার কথা। আপনাকে যদি ডিভাইস স্টোরেজ থেকে ছবি লোড করা বা অতিরিক্ত কন্টেন্ট সংগ্রহ করার জন্য
আপনার সার্ভারকে কল করার মতো কোনও অতিরিক্ত কাজ করতে হয়, তাহলে আপনাকে অতিরিক্ত পদক্ষেপ নিতে হবে।
onMessageReceived পদ্ধতিটি একটি আলাদা ওয়ার্কার থ্রেডে কল করা হয়। সবচেয়ে ভাল
প্র্যাক্টিস হিসেবে, আপনাকে মেসেজ পেলোড প্রসেস করতে হবে এবং onMessageReceived পদ্ধতির মধ্যে অবিলম্বে একটি বিজ্ঞপ্তি
দেখাতে হবে। আপনাকে onMessageReceived পদ্ধতির মধ্যে
অতিরিক্ত অ্যাসিঙ্ক্রোনাস নেটওয়ার্ক কল করা বা আলাদা
থ্রেডে পেলোড প্রসেসিং করা উচিত নয়। এটি করলে, পেলোড সম্পূর্ণ প্রসেস হওয়ার আগে আপনার
অ্যাপ্লিকেশনটি
বৈধ প্রসেস লাইফসাইকেল
এর বাইরে চলে যেতে পারে। এটি হলে, আপনি দেখতে পেতে পারেন যে পাঠানো নির্দিষ্ট
FCM মেসেজের ফলে বিজ্ঞপ্তি পেতে দেরি হচ্ছে বা বিজ্ঞপ্তি পাওয়া যাচ্ছে না।
আপনার মেসেজ প্রসেস করার জন্য যদি অতিরিক্ত সময়ের প্রয়োজন হয়, যেমন, আপনার মেসেজ পেলোড থেকে
imageUrl কোনও ডেটা ফেচ করার জন্য, তাহলে আপনাকে অ্যাপ্লিকেশন
লাইফসাইকেল বাড়ানোর জন্য WorkManager বা ফোরগ্রাউন্ড সার্ভিসের মতো
কনস্ট্রাক্ট ব্যবহার করতে হবে। আপনার বিজ্ঞপ্তি সম্পূর্ণ প্রসেস করা হয়েছে কিনা তা যাচাই করতে
onMessageReceived পদ্ধতি ওভাররাইড করার
সময় আপনাকে নিম্নলিখিত নির্দেশিকা ব্যবহার করতে হবে।
- উচ্চ অগ্রাধিকারযুক্ত বিজ্ঞপ্তির জন্য: Android
WorkManagerব্যবহার করে দ্রুত কাজ শুরু করুন যাতে আপনার উচ্চ অগ্রাধিকারযুক্ত বিজ্ঞপ্তি যাচাই করার জন্য অগ্রাধিকারমূলক প্রসেসিং টাইম পায় এবং আপনার বিজ্ঞপ্তি সম্পূর্ণভাবে রেন্ডার করা যায়। ভাল খবর হল, আপনি যদি দ্রুত অগ্রাধিকারযুক্ত জব কোটা শেষ হয়ে যাওয়া নিয়ে চিন্তিত হন, তাহলে আপনাকে চিন্তিত হতে হবে না। হাই প্রয়োরিটি FCMonMessageReceivedপাঠানোর সাথে সাথেই শিডিউল করা দ্রুত জবের জন্য একটি সংক্ষিপ্ত ছাড় আছে। - সাধারণ অগ্রাধিকারের বিজ্ঞপ্তির জন্য: Android
WorkManagerব্যবহার করে সাধারণWorkRequestশুরু করুন। এর ফলে যাচাই করা যাবে যে আপনার বিজ্ঞপ্তি প্রসেস করার জন্য প্রয়োজনীয় অতিরিক্ত কাজ অগ্রাধিকার ভিত্তিক প্রসেসিং ব্যবহার না করেই শেষ পর্যন্ত প্রসেস করা হয়েছে এবং এর ফলে ব্যাটারি ব্যবহারের অপ্রয়োজনীয় সমস্যা হয়নি।
মেসেজের অগ্রাধিকার সেট করা
আপনি Admin SDK, the 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 মোডে আপনার উচ্চ অগ্রাধিকারযুক্ত বিজ্ঞপ্তি পরীক্ষা করা
ব্যবহারকারী যখন আপনার উচ্চ অগ্রাধিকারযুক্ত বিজ্ঞপ্তি পান, তখন সেটি সঠিকভাবে প্রসেস করা হচ্ছে কিনা তা নিশ্চিত করতে, আপনার বিজ্ঞপ্তি পরীক্ষা করার জন্য এইসব নির্দেশাবলী অনুসরণ করুন:
- Doze-এর সাথে আপনার অ্যাপ পরীক্ষা করুন লিঙ্কে দেওয়া নির্দেশাবলী অনুসরণ করে আপনার ডিভাইসকে Doze মোডে সেট করুন।
- টেস্ট ডিভাইসে থাকা আপনার অ্যাপ থেকে FCM রেজিস্ট্রেশন টোকেন অ্যাক্সেস করুন। টোকেন কীভাবে অ্যাক্সেস করবেন সেই সম্পর্কে আরও জানতে, ব্যাকগ্রাউন্ড অ্যাপে টেস্ট মেসেজ পাঠান দেখুন।
- 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-এর সাথে টাস্ক শিডিউল করতে পারেন।