অ্যান্ড্রয়েডে ডাউনস্ট্রিম মেসেজগুলিতে ডেলিভারি অগ্রাধিকার দেওয়ার জন্য আপনার কাছে দুটি বিকল্প রয়েছে: স্বাভাবিক এবং উচ্চ অগ্রাধিকার৷ স্বাভাবিক এবং উচ্চ অগ্রাধিকার বার্তাগুলির বিতরণ এই মত কাজ করে:
স্বাভাবিক অগ্রাধিকার। এটি ডেটা এবং বিজ্ঞপ্তি বার্তাগুলির জন্য ডিফল্ট অগ্রাধিকার৷ সাধারণ অগ্রাধিকার বার্তাগুলি অবিলম্বে বিতরণ করা হয় যখন ডিভাইসটি ঘুমায় না। যখন ডিভাইসটি ডোজ মোডে থাকে, তখন ব্যাটারি সংরক্ষণের জন্য ডেলিভারি বিলম্বিত হতে পারে যতক্ষণ না ডিভাইসটি ডোজ থেকে বেরিয়ে আসে। কম সময়-সংবেদনশীল বার্তাগুলির জন্য, যেমন নতুন ইমেলের বিজ্ঞপ্তি, আপনার UI সিঙ্কে রাখা, বা পটভূমিতে অ্যাপ ডেটা সিঙ্ক করা, স্বাভাবিক বিতরণ অগ্রাধিকার বেছে নিন।
উচ্চ অগ্রাধিকার. FCM অবিলম্বে উচ্চ অগ্রাধিকার বার্তা প্রদান করার চেষ্টা করে, FCM যখন প্রয়োজনে একটি ঘুমন্ত যন্ত্রকে জাগিয়ে তুলতে এবং কিছু সীমিত প্রক্রিয়াকরণ (খুব সীমিত নেটওয়ার্ক অ্যাক্সেস সহ) চালানোর অনুমতি দেয়। উচ্চ অগ্রাধিকারের বার্তাগুলি সাধারণত আপনার অ্যাপ বা এর বিজ্ঞপ্তিগুলির সাথে ব্যবহারকারীর ইন্টারঅ্যাকশনের ফলে হওয়া উচিত।
উচ্চ এবং স্বাভাবিক অগ্রাধিকার বার্তাগুলির মধ্যে সিদ্ধান্ত নেওয়া
যদিও সাধারণ অগ্রাধিকার বার্তাগুলি সাধারণ আপডেটের জন্য উপযুক্ত, আপনি যখন জরুরি বিষয় বা কর্মের জন্য অবিলম্বে বিতরণ নিশ্চিত করতে চান তখন উচ্চ অগ্রাধিকার নির্বাচন করুন৷ যেহেতু সাধারণ অগ্রাধিকার বার্তাগুলির বিতরণের সময় ডোজ মোড দ্বারা প্রভাবিত হতে পারে, তাই আপনার বেশিরভাগ ব্যবহারকারীর দৃশ্যমান বিজ্ঞপ্তিগুলিকে উচ্চ অগ্রাধিকারে সেট করা নিশ্চিত করবে যে সেগুলি অবিলম্বে বিতরণ করা হয়েছে। উদাহরণস্বরূপ, চ্যাট বার্তা, অ্যাকাউন্টের সমস্যা বা খাদ্য সরবরাহের আপডেটের মতো বিজ্ঞপ্তিগুলিকে উচ্চ অগ্রাধিকারে সেট করা উচিত।
উচ্চ এবং স্বাভাবিক অগ্রাধিকার বার্তাগুলির জন্য বার্তা প্রক্রিয়াকরণ
একটি Android ডিভাইসে প্রাপ্ত উচ্চ অগ্রাধিকার এবং স্বাভাবিক অগ্রাধিকার উভয় বার্তাগুলির জন্য, onMessageReceived
হ্যান্ডলারে বার্তা পেলোড প্রক্রিয়া করার জন্য কয়েক সেকেন্ড সময় দেওয়া হয়, সাধারণ অগ্রাধিকারগুলির তুলনায় উচ্চ অগ্রাধিকার বার্তাগুলির জন্য কিছুটা বেশি সময় বরাদ্দ করা হয়৷ অবিলম্বে একটি বিজ্ঞপ্তি রেন্ডার করার জন্য এই সময়টি যথেষ্ট দীর্ঘ হবে বলে আশা করা হচ্ছে৷ যদি আপনাকে কোনো অতিরিক্ত কাজ করতে হয় যেমন ডিভাইস স্টোরেজ থেকে একটি ছবি লোড করা বা অতিরিক্ত সামগ্রী সংগ্রহ করার জন্য আপনার সার্ভারে কল করা আপনাকে অতিরিক্ত পদক্ষেপ নিতে হবে।
onMessageReceived
পদ্ধতিটিকে একটি পৃথক কর্মী থ্রেডে বলা হয়। সর্বোত্তম অনুশীলন হিসাবে, আপনার বার্তা পেলোড প্রক্রিয়া করা উচিত এবং অবিলম্বে onMessageReceived
পদ্ধতির মধ্যে একটি বিজ্ঞপ্তি প্রদর্শন করা উচিত। আপনার অতিরিক্ত অ্যাসিঙ্ক্রোনাস নেটওয়ার্ক কল করা উচিত নয় বা onMessageReceived
পদ্ধতির মধ্যে একটি পৃথক থ্রেডে পেলোড প্রক্রিয়াকরণ করা উচিত নয়, এটি করার ফলে পেলোড সম্পূর্ণরূপে প্রক্রিয়া হওয়ার আগে আপনার আবেদনটি একটি বৈধ প্রক্রিয়া জীবনচক্রের বাইরে হতে পারে। যদি এটি ঘটে, আপনি দেখতে পারেন যে নির্দিষ্ট কিছু FCM বার্তা পাঠানো হয় যার ফলে বিজ্ঞপ্তি বিলম্বিত বা অনুপস্থিত হয়।
আপনার বার্তার জন্য প্রক্রিয়া করার জন্য যদি আপনার অতিরিক্ত সময়ের প্রয়োজন হয়, উদাহরণস্বরূপ আপনার বার্তার পেলোডে থাকা একটি imageUrl
আনার জন্য, আপনাকে অ্যাপ্লিকেশনের জীবনচক্র বাড়ানোর জন্য WorkManager
বা ফোরগ্রাউন্ড পরিষেবার মতো একটি নির্মাণ ব্যবহার করতে হবে। আপনার বিজ্ঞপ্তিগুলি সম্পূর্ণরূপে প্রক্রিয়া করা হয়েছে তা যাচাই করার জন্য আপনি যখন onMessageReceived
পদ্ধতিটি ওভাররাইড করবেন তখন আপনাকে নিম্নলিখিত নির্দেশিকা ব্যবহার করা উচিত।
- উচ্চ অগ্রাধিকার বিজ্ঞপ্তিগুলির জন্য: আপনার উচ্চ অগ্রাধিকার বিজ্ঞপ্তিটি আপনার বিজ্ঞপ্তি রেন্ডারিং সম্পূর্ণ হওয়ার যাচাই করার জন্য অগ্রাধিকারমূলক প্রক্রিয়াকরণের সময় পায় তা যাচাই করতে Android
WorkManager
ব্যবহার করে একটি দ্রুত কাজ শুরু করুন৷ ভাল খবর হল যে আপনি যদি উচ্চ অগ্রাধিকার এফসিএম প্রক্রিয়াকরণের ফলে দ্রুত চাকরির কোটা শেষ করার বিষয়ে উদ্বিগ্ন হন, তাহলে আপনার হওয়ার দরকার নেই। একটি উচ্চ অগ্রাধিকার FCMonMessageReceived
পাঠানোর পরপরই দ্রুত কাজ করার জন্য একটি সংক্ষিপ্ত ছাড় রয়েছে। - স্বাভাবিক অগ্রাধিকার বিজ্ঞপ্তিগুলির জন্য: পরিবর্তে 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 মোডে আপনার উচ্চ অগ্রাধিকার বিজ্ঞপ্তি পরীক্ষা করুন
আপনার উচ্চ অগ্রাধিকার বিজ্ঞপ্তিগুলি গৃহীত হচ্ছে এবং ব্যবহারকারীর দ্বারা প্রাপ্ত হলে সঠিকভাবে প্রক্রিয়া করা হচ্ছে তা নিশ্চিত করতে, আপনার বিজ্ঞপ্তিগুলি পরীক্ষা করতে এই নির্দেশাবলী অনুসরণ করুন:
- ডোজ দিয়ে আপনার অ্যাপ টেস্ট করুন-এর নির্দেশাবলী ব্যবহার করে আপনার ডিভাইসটিকে ডোজ মোডে সেট করুন।
- টেস্ট ডিভাইসে আপনার অ্যাপ থেকে আপনার FCM রেজিস্ট্রেশন টোকেন অ্যাক্সেস করুন। কিভাবে টোকেন অ্যাক্সেস করতে হয় সে সম্পর্কে আরও তথ্যের জন্য, একটি পটভূমি অ্যাপে একটি পরীক্ষা বার্তা পাঠান দেখুন।
- একবার আপনার কাছে FCM টোকেন হয়ে গেলে, আপনার FCM বিজ্ঞপ্তি পাঠানোর কোড বা আপনার উচ্চ অগ্রাধিকার বিজ্ঞপ্তির সাথে মেলে কনফিগারেশন প্যারামিটার আছে এমন একটি cURL কমান্ড ব্যবহার করে আপনার উচ্চ অগ্রাধিকার বিজ্ঞপ্তিটি পরীক্ষা ডিভাইসে পাঠান।
Android-এ উচ্চ অগ্রাধিকারের FCM এর বঞ্চিতকরণ
অ্যান্ড্রয়েডে উচ্চ অগ্রাধিকার বার্তাগুলি সময় সংবেদনশীল, ব্যবহারকারীর দৃশ্যমান সামগ্রীর জন্য বোঝানো হয় এবং এর ফলে ব্যবহারকারীর মুখোমুখি বিজ্ঞপ্তিগুলি হওয়া উচিত৷ যদি FCM এমন একটি প্যাটার্ন শনাক্ত করে যেখানে বার্তাগুলি ব্যবহারকারী-মুখী বিজ্ঞপ্তিগুলির ফলে না হয়, তাহলে আপনার বার্তাগুলিকে স্বাভাবিক অগ্রাধিকার থেকে বঞ্চিত করা হতে পারে বা Google Play পরিষেবাগুলি পরিচালনার জন্য অর্পণ করা হতে পারে ৷
FCM বঞ্চিত বা প্রক্সি বার্তা নির্ধারণ করার সময় 7 দিনের বার্তা আচরণ ব্যবহার করে; এটি আপনার আবেদনের প্রতিটি উদাহরণের জন্য স্বাধীনভাবে এই সংকল্প করে। যদি, উচ্চ অগ্রাধিকার বার্তাগুলির প্রতিক্রিয়া হিসাবে, বিজ্ঞপ্তিগুলি এমনভাবে প্রদর্শিত হয় যা ব্যবহারকারীর কাছে দৃশ্যমান হয়, তাহলে আপনার ভবিষ্যতের উচ্চ-অগ্রাধিকার বার্তাগুলি প্রভাবিত হবে না৷
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
অবজেক্টেDENY
তেproxy
কী সেট করুন।
অ্যান্ড্রয়েডে বার্তা বঞ্চিতকরণ পরিমাপ করা হচ্ছে
স্বতন্ত্র বার্তা। ডেলিভারির সময়, আপনি getOriginalPriority() থেকে, getPriority() থেকে, তার আসল অগ্রাধিকারের সাথে, বিতরণ করা অগ্রাধিকারের তুলনা করে একটি পৃথক বার্তা বঞ্চিত হয়েছে কিনা তা নির্ধারণ করতে পারেন।
সমস্ত বার্তা. FCM এগ্রিগেট ডেলিভারি ডেটা এপিআই রিপোর্ট করতে পারে যে Android-এ আপনার সমস্ত বার্তাগুলির কত শতাংশ বঞ্চিত হচ্ছে। সামগ্রিক ডেটা রিপোর্ট থেকে কিছু বার্তা বাদ দেওয়া হতে পারে, তবে সামগ্রিকভাবে তাদের বার্তা বঞ্চনার হারের একটি বিশ্বব্যাপী দৃষ্টিভঙ্গি দেওয়া উচিত। আরও তথ্যের জন্য সমষ্টিগত ডেলিভারি ডেটার উপর আমাদের নিবন্ধটি দেখুন এবং API জিজ্ঞাসা করার জন্য নমুনা কোড; এটি API এক্সপ্লোরার থেকেও অন্বেষণ করা যেতে পারে।
প্রক্সি বিজ্ঞপ্তি। বর্তমান FCM বা GA ডেলিভারি মেট্রিক্সে প্রক্সি করা বিজ্ঞপ্তিগুলিকে গণনা করা হবে না, তাই আপনি বিজ্ঞপ্তি ডেলিভারি মেট্রিক্সে 15% পর্যন্ত হ্রাস পেতে পারেন। প্রক্সি মেসেজ রিপোর্ট করার জন্য, FCM এগ্রিগেট ডেলিভারি ডেটা API ব্যবহার করুন।
ProxyNotificationInsightPercents
সফলভাবে প্রক্সি করা বিজ্ঞপ্তিগুলির শতাংশের পাশাপাশি সফলভাবে প্রক্সি করা যাবে না এমন বার্তাগুলির বিশদ বিবরণ দেয়৷
সমস্যা সমাধানের বিজ্ঞপ্তি বিলম্ব
নিশ্চিত করুন যে আপনার অ্যাপ ইনস্ট্যান্সে বিজ্ঞপ্তিগুলি সক্ষম করা আছে। ব্যবহারকারী আপনার অ্যাপের জন্য বিজ্ঞপ্তির অনুমতি অক্ষম করে থাকলে, আপনার কোনো বিজ্ঞপ্তি পোস্ট করা হবে না, ফলস্বরূপ, আপনার বার্তাগুলিকে বঞ্চিত করা হবে। একটি অ্যাপ্লিকেশন উদাহরণে উচ্চ অগ্রাধিকার বার্তা পাঠানোর আগে আপনার যাচাই করা উচিত যে বিজ্ঞপ্তিগুলি সক্ষম করা হয়েছে ৷
আপনার বিজ্ঞপ্তি প্রক্রিয়া করার সময় অতিরিক্ত নেটওয়ার্ক কল করা এড়িয়ে চলুন। কারণ অ্যান্ড্রয়েড মোবাইল জনসংখ্যার একটি ছোট অংশ উচ্চ লেটেন্সি নেটওয়ার্কে রয়েছে, একটি বিজ্ঞপ্তি প্রদর্শন করার আগে আপনার সার্ভারে একটি সংযোগ খোলা এড়িয়ে চলুন৷ অনুমোদিত প্রক্রিয়াকরণের সময় শেষ হওয়ার আগে সার্ভারে ফিরে কল করা উচ্চ লেটেন্সি নেটওয়ার্কের ব্যবহারকারীদের জন্য ঝুঁকিপূর্ণ হতে পারে।
পরিবর্তে, FCM বার্তায় বিজ্ঞপ্তি বিষয়বস্তু অন্তর্ভুক্ত করুন এবং অবিলম্বে এটি প্রদর্শন করুন৷ আপনার যদি Android-এ অতিরিক্ত ইন-অ্যাপ সামগ্রীর জন্য সিঙ্ক করার প্রয়োজন হয়, আপনি পটভূমিতে এটি পরিচালনা করার জন্য WorkManager-এর সাথে একটি কাজ নির্ধারণ করতে পারেন।