আপনি যদি প্রোগ্রাম্যাটিকভাবে অনুরোধ পাঠানোর জন্য FCM API ব্যবহার করেন, তাহলে আপনি দেখতে পেতে পারেন যে, সময়ের সাথে সাথে, আপনি পুরানো রেজিস্ট্রেশন সহ ইনঅ্যাক্টিভ ডিভাইসে মেসেজ পাঠিয়ে রিসোর্স নষ্ট করছেন। এই পরিস্থিতি মেসেজ ডেলিভারি ডেটাকে প্রভাবিত করতে পারে যা Firebase কনসোলে রিপোর্ট করা হয়েছে অথবা BigQuery-এ এক্সপোর্ট করা হয়েছে, ডেলিভারি রেটে নাটকীয় (কিন্তু আসলে বৈধ নয়) ড্রপ হিসেবে দেখানো হয়েছে। এই গাইডটি মেসেজ টার্গেটিং এবং ডেলিভারি রিপোর্টিংয়ের ক্ষেত্রে কিছু ব্যবস্থা নিয়ে আলোচনা করে।
পুরনো ও মেয়াদ শেষ হয়ে যাওয়া রেজিস্ট্রেশন
পুরনো রেজিস্ট্রেশন হল অ্যাক্টিভ না থাকা ডিভাইসের সাথে যুক্ত রেজিস্ট্রেশন যেগুলি এক মাসের বেশি সময় ধরে FCM-এর সাথে কানেক্ট করেনি। সময় যত গড়াবে, ডিভাইসটি FCM-এর সাথে আবার কানেক্ট হওয়ার সম্ভাবনা তত কমতে থাকবে। এইসব পুরনো রেজিস্ট্রেশনের জন্য মেসেজ পাঠানো এবং বিষয়ভিত্তিক ফ্যান-আউট কখনওই ডেলিভার করা হবে না।
রেজিস্ট্রেশন পুরনো হয়ে যাওয়ার একাধিক কারণ থাকতে পারে। যেমন, রেজিস্ট্রেশন যে ডিভাইসের সাথে যুক্ত সেটি হারিয়ে যেতে পারে, ভেঙে যেতে পারে অথবা স্টোরেজে রেখে দেওয়া হতে পারে এবং সেটির কথা ভুলে যাওয়া হতে পারে।
Android-এর ক্ষেত্রে, কোনও রেজিস্ট্রেশন ২৭০ দিন ধরে ইন-অ্যাক্টিভ থাকলে, FCM সেটিকে মেয়াদ শেষ হয়ে গেছে বলে বিবেচনা করে এবং গার্বেজ কালেকশন প্রসেসের মাধ্যমে সেটি সরিয়ে দেয়। রেজিস্ট্রেশনের মেয়াদ শেষ হয়ে গেলে, FCM এটি বাতিল হিসেবে চিহ্নিত করে এবং এতে মেসেজ পাঠানো প্রত্যাখ্যান করে। মনে রাখবেন যে Firebase ইনস্টলেশন আইডি (FID) Firebase ইনস্টলেশন পরিষেবা (FIS) দ্বারা ম্যানেজ করা হয়, FCM দ্বারা নয়। কখনও কখনও, কোনও ডিভাইস আবার কানেক্ট করলে এবং সেটির রেজিস্ট্রেশন গার্বেজ কালেকশন হয়ে যাওয়ার পরে অ্যাপটি খুললে, ক্লায়েন্ট অ্যাপ FIS থেকে পাওয়া FID ব্যবহার করে FCM আবার রেজিস্টার করে। মনে রাখবেন, FID পরিবর্তন হতে পারে; FID কখন আবার ইস্যু করা হয় সেই বিষয়ে বিস্তারিত জানতে Firebase ম্যানেজ করুন ইনস্টলেশন দেখুন।
iOS-এর মতো অন্যান্য প্ল্যাটফর্মের ক্ষেত্রে, FCM অন্তর্নিহিত পুশ পরিষেবার (যেমন, APNs) উপর নির্ভর করে, যার একই ২৭০-দিনের নিষ্ক্রিয়তা-ভিত্তিক মেয়াদ শেষ হওয়ার সময়সীমা নেই। আমরা সাজেস্ট করি যে আপনি আগে থেকেই রেজিস্ট্রেশন সংক্রান্ত তথ্য আপডেট রাখুন এবং পুরনো রেজিস্ট্রেশন সরিয়ে দিন।
সাধারণ পেশাদার পদ্ধতি
প্রোগ্রামাটিক উপায়ে অনুরোধ পাঠানোর জন্য তৈরি করা যেকোনও অ্যাপে আপনাকে কিছু মৌলিক পদ্ধতি অনুসরণ করতে হবে। FCM প্রধান পেশাদার পদ্ধতিগুলি হল:
- Firebase ইনস্টলেশন আইডি (FID) FCM থেকে ফিরিয়ে আনুন এবং আপনার অ্যাপ সার্ভারে স্টোর করুন। সার্ভারের একটি গুরুত্বপূর্ণ কাজ হল প্রতিটি ক্লায়েন্টের রেজিস্টার করা FID ট্র্যাক করা এবং অ্যাক্টিভ FID-এর একটি আপডেট করা তালিকা রাখা। আমরা সাজেস্ট করি যে আপনার ডেটাবেসে রেজিস্ট্রেশন টাইমস্ট্যাম্প প্রয়োগ করুন এবং কোনও রেজিস্ট্রেশন আপলোড করা হলে এটি আপডেট করুন।
- রেজিস্ট্রেশন সংক্রান্ত তথ্য আপডেট রাখুন এবং পুরনো রেজিস্ট্রেশন সরিয়ে দিন। FCM আর বৈধ বলে মনে করে না এমন রেজিস্ট্রেশন সরিয়ে দেওয়ার পাশাপাশি, রেজিস্ট্রেশন পুরনো হয়ে গেছে এমন অন্যান্য লক্ষণও আপনি মনিটর করতে এবং সেগুলি আগে থেকেই সরিয়ে দিতে পারেন। এটি অর্জন করার জন্য আপনার কিছু বিকল্প এই নির্দেশিকায় আলোচনা করা হয়েছে।
Firebase ইনস্টলেশন আইডি রিট্রিভ ও স্টোর করা
আপনার অ্যাপ প্রথমবার চালু করার সময়, FCM SDK, FCM-এর সাথে অ্যাপ ইনস্ট্যান্স রেজিস্টার করে এবং Firebase ইনস্টলেশন আইডি (FID) রিটার্ন করে। এটি হল সেই শনাক্তকারী যা আপনাকে API থেকে টার্গেট করা পাঠানোর অনুরোধে অন্তর্ভুক্ত করতে হবে অথবা বিষয় সাবস্ক্রিপশনের জন্য ব্যবহার করতে হবে।
আমরা বিশেষভাবে সাজেস্ট করি যে, FID আপলোড করার সময় টাইমস্ট্যাম্পের সাথে আপনার অ্যাপ সার্ভারে সেভ করুন। প্রতিটি আপলোড অনুরোধে টাইমস্ট্যাম্প আপডেট করার মাধ্যমে, আপনার সার্ভার জানতে পারে যে অ্যাপ ইনস্ট্যান্সটি কখন শেষবার খোলা হয়েছিল এবং FCM ব্যাকএন্ডের সাথে সফলভাবে সিঙ্ক করা হয়েছে।
অটোমেটিক ইনিশিয়ালাইজেশন চালু বা বন্ধ করা আছে কিনা তার উপর নির্ভর করে (কাজ করে না এমন অবস্থা সহ), আপনাকে নিম্নলিখিত উপায়ে রেজিস্ট্রেশন ও আপডেট ম্যানেজ করতে হবে:
- (সাজেস্ট করা) অটো-ইনিশিয়ালাইজেশন চালু থাকলে: SDK অটোমেটিক
রেজিস্ট্রেশন ফ্রেশ রাখে এবং পরিবর্তন মনিটর করে। অ্যাপ চালু হওয়ার সময় রুটিন সিঙ্কের সময় এবং FID পরিবর্তন হলে
onRegistered()কলব্যাক নিয়মিত ইনভোক করা হয়। আপনার সার্ভারে FID আপলোড করতে এবং বর্তমান টাইমস্ট্যাম্প সেভ করতে, এই কলব্যাকটি প্রয়োগ করুন। - অটোমেটিক ইনিশিয়ালাইজেশন বন্ধ করা থাকলে: শুরুতেই
onRegistered()কলব্যাক অটোমেটিক ইনভোক করা হবে না। রেজিস্ট্রেশন ট্র্যাক করতে এবং সেগুলি আপডেট রাখতে, অ্যাপ চালু হওয়ার সময়register()কল করুন; যেমন, Android-এ, মূল অ্যাক্টিভিটিরonCreate()-এ। কল সফল হলে, FID ব্যবহার করে FCMরেজিস্ট্রেশন প্রসেস ট্রিগার হয় এবং এটি আপনারonRegistered()কলব্যাকে ডেলিভার করা হয়, এর ফলে আপনার অ্যাপ FID আপলোড করতে এবং আপনার সার্ভারে টাইমস্ট্যাম্প আপডেট করতে পারে।
যেমন: Cloud Firestore-এ স্টোর FID ও টাইমস্ট্যাম্প
যেমন, আপনি Cloud Firestore ব্যবহার করে
fcmRegistrations নামের কালেকশনে FID সেভ করতে পারেন। সংগ্রহের প্রতিটি ডকুমেন্ট আইডি ব্যবহারকারীর আইডির সাথে সম্পর্কিত,
এবং ডকুমেন্ট বর্তমান FID ও এর শেষ আপডেট করা টাইমস্ট্যাম্প স্টোর করে। এই Kotlin উদাহরণে দেখানো
set ফাংশন ব্যবহার করুন:
private fun sendRegistrationToServer(installationId: String?) {
// If you're running your own server, call API to send registration details and today's date for the user
// Example shown uses Firestore
// Add FID and timestamp to Firestore for this user
val deviceFid = hashMapOf(
"installationId" to installationId,
"timestamp" to FieldValue.serverTimestamp(),
)
// Get user ID from Firebase Auth or your own server
Firebase.firestore.collection("fcmRegistrations").document("myuserid")
.set(deviceFid)
}
Firebase ইনস্টলেশন আইডি সফলভাবে রেজিস্টার বা আপডেট করা হলে, onRegistered()
কলব্যাককে আহ্বান করা হয়। FID আপলোড করতে এবং টাইমস্ট্যাম্প আপডেট করতে আপনাকে এই কলব্যাক প্রয়োগ করতে হবে:
override fun onRegistered(installationId: String) {
Log.d(TAG, "Registered installation ID: $installationId")
// Send the Firebase Installation ID (FID) to your app server. Your app
// server should save the FID and update the timestamp upon receipt.
sendRegistrationToServer(installationId)
}
যেসব ক্ষেত্রে অটোমেটিক ইনিশিয়ালাইজেশন বন্ধ করা আছে, সেখানে অ্যাপ চালু হওয়ার সময় (যেমন, onCreate()-এ) রেজিস্ট্রেশন ফ্লো ট্রিগার করতে এবং FID
ডেলিভারি
onRegistered()-এর মাধ্যমে পেতে
register()
কল করুন:
// Trigger manual registration if auto-initialization is turned off.
FirebaseMessaging.getInstance().register()
.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
// The registration callback onRegistered() will be invoked with the current FID.
} else {
Log.w(TAG, "Failed to register with Firebase Cloud Messaging", task.exception)
}
}
রেজিস্ট্রেশন সংক্রান্ত তথ্য আপডেট রাখা এবং পুরনো রেজিস্ট্রেশন সরিয়ে দেওয়া
কোনও রেজিস্ট্রেশন নতুন না পুরনো তা নির্ধারণ করা সবসময় সহজ নয়। সব ধরনের পরিস্থিতি কভার করতে, আপনাকে একটি থ্রেশহোল্ড গ্রহণ করতে হবে, যার মাধ্যমে আপনি রেজিস্ট্রেশনকে পুরনো হিসেবে বিবেচনা করবেন। সাধারণত, FCM কোনও রেজিস্ট্রেশনকে পুরনো হিসেবে বিবেচনা করে যদি তার অ্যাপ ইনস্ট্যান্স এক মাস ধরে কানেক্ট না করে। এক মাসের বেশি পুরনো কোনও রেজিস্ট্রেশন ইনঅ্যাক্টিভ ডিভাইস হওয়ার সম্ভাবনা বেশি; অ্যাক্টিভ ডিভাইস হলে সেটি রেজিস্ট্রেশন রিফ্রেশ করে নিত।
আপনার ব্যবহারের কেস অনুযায়ী, এক মাস খুব কম বা খুব বেশি সময় হতে পারে, তাই আপনার জন্য উপযুক্ত নির্ণায়ক নির্ধারণ করার দায়িত্ব আপনার।
FCM ব্যাকএন্ড থেকে ভুল উত্তর শনাক্ত করা
FCM থেকে পাওয়া ভুল উত্তর শনাক্ত করতে ভুলবেন না এবং আপনার সিস্টেম থেকে ভুল বা মেয়াদ শেষ হয়ে গেছে বলে জানা যেকোনও রেজিস্ট্রেশন মুছে দিয়ে উত্তর দিন। HTTP v1 API-এর ক্ষেত্রে, এই সমস্যার মেসেজগুলি থেকে বোঝা যেতে পারে যে আপনার পাঠানোর অনুরোধ ভুল বা মেয়াদ শেষ হয়ে যাওয়া রেজিস্ট্রেশনকে টার্গেট করেছে:
UNREGISTERED(HTTP 404)INVALID_ARGUMENT(HTTP 400)
আপনি যদি নিশ্চিত হন যে মেসেজ পেলোড বৈধ এবং টার্গেট করা রেজিস্ট্রেশনের জন্য আপনি এইসব উত্তরের মধ্যে কোনও একটি পেয়েছেন, তাহলে এই রেজিস্ট্রেশনের রেকর্ড মুছে ফেলা নিরাপদ, কারণ এটি আর কখনও বৈধ হবে না। যেমন, Cloud Firestore থেকে ভুল রেজিস্ট্রেশন মুছে দিতে, আপনি নিম্নলিখিত ফাংশনের মতো কোনও ফাংশন ডেপ্লয় ও রান করতে পারেন:
// Firebase Installation ID comes from the client FCM SDKs
const firebaseInstallationId = 'YOUR_FIREBASE_INSTALLATION_ID';
const message = {
data: {
// Information you want to send inside of notification
},
fid: firebaseInstallationId
};
// Send message to device with provided Firebase Installation ID
getMessaging().send(message)
.then((response) => {
// Response is a message ID string.
})
.catch((error) => {
// Delete registration for user if error code is UNREGISTERED or INVALID_ARGUMENT.
if (error.errorCode == "messaging/registration-token-not-registered") {
// If you're running your own server, call API to delete the registration for the user
// Example shown uses Firestore
// Get user ID from Firebase Auth or your own server
Firebase.firestore.collection("fcmRegistrations").document(user.uid).delete()
}
});
FCM কোনও Android ডিভাইসের রেজিস্ট্রেশন ২৭০ দিন অ্যাক্টিভ না থাকার পরে মেয়াদ শেষ হয়ে গেলে অথবা কোনও ক্লায়েন্ট স্পষ্টভাবে আনরেজিস্টার করলে, একটি ভুল উত্তর ফেরত দেয়। আপনার নিজস্ব সংজ্ঞা অনুযায়ী, আরও সঠিকভাবে পুরনো হয়ে যাওয়া ট্র্যাক করার প্রয়োজন হলে, আপনি আগে থেকেই পুরনো হয়ে যাওয়া রেজিস্ট্রেশন সরিয়ে দিতে পারেন।
নিয়মিত রেজিস্ট্রেশন আপডেট করা
আপনার রেজিস্ট্রেশন FID বা পুরনো রেজিস্ট্রেশন টোকেনের উপর ভিত্তি করে করা হোক না কেন, আপনার সার্ভারকে সবসময় প্রতিটি আপলোড অনুরোধে আপনার ডেটাবেসে রেজিস্ট্রেশন টাইমস্ট্যাম্প আপডেট করতে হবে। এই টাইমস্ট্যাম্পটি অ্যাপ ইনস্টলেশনের জন্য একটি সিগন্যাল হিসেবে কাজ করে, এটি ক্লায়েন্টকে জানায় যে অ্যাপটি সফলভাবে খোলা হয়েছে এবং FCM ব্যাকএন্ডের সাথে সিঙ্ক করা হয়েছে। আপনি কোন API ব্যবহার করছেন তার উপর নির্ভর করে, উপযুক্ত কৌশল প্রয়োগ করুন:
Firebase ইনস্টলেশন আইডি API (সাজেস্ট করা)
FID API ব্যবহার করা ক্লায়েন্ট অ্যাপের জন্য, রেজিস্ট্রেশন রিট্রিভ বা রিফ্রেশ করতে, আপনাকে ক্লায়েন্ট অ্যাপে পিরিয়ডিক
ব্যাকগ্রাউন্ড জব শিডিউল করতে হবে না। SDK
অটোমেটিক ইনিশিয়ালাইজেশনের অধীনে রিফ্রেশ করার বিষয়টি অটোমেটিক দেখে নেয়, নিয়মিত
আপনার
onRegistered()
কলব্যাক ফাংশনে সঠিক বর্তমান FID ডেলিভার করে, অ্যাপ চালু হওয়ার সময় রুটিন সিঙ্ক করা হয়।
আপনার সার্ভার আপডেট রাখতে, Firebase ইনস্টলেশন আইডি রিট্রিভ ও স্টোর করা লিঙ্কে বিস্তারিতভাবে বলা স্টার্ট-আপ আপলোড স্ট্র্যাটেজি প্রয়োগ করুন:
- অটোমেটিক ইনিশিয়ালাইজেশন চালু করা আছে: SDK অটোমেটিক নিশ্চিত করে যে অ্যাপ চালু করার সময় রুটিন সিঙ্ক চলাকালীন আপনার সার্ভারে লেটেস্ট FID পাঠানো হয়েছে।
- অটোমেটিক ইনিশিয়ালাইজেশন বন্ধ করা থাকলে বা কাজ না করলে: অ্যাপ চালু হওয়ার সময় (যেমন, Android-এ, মূল অ্যাক্টিভিটির
onCreate()) রেজিস্ট্রেশন সিকোয়েন্স জোর করে চালু করতে এবং আপনারonRegistered()কলব্যাকে FID ডেলিভারি ট্রিগার করতেregister()কল করুন।
এইসব স্ট্র্যাটেজি নিশ্চিত করে যে আপনার সার্ভারে সবসময় লেটেস্ট অ্যাক্টিভ FID আছে এবং এটি অটোমেটিক ব্যর্থ আপলোড থেকে রিকভার করতে পারে, এর ফলে অ্যাপ্লিকেশনটি অত্যন্ত স্থিতিশীল হয়।
সঞ্চালনে নেই এমন রেজিস্ট্রেশন টোকেন API
আপনি পুরনো রেজিস্ট্রেশন টোকেন ব্যবহার করলে, ক্লায়েন্ট SDK রুটিন সিঙ্কে অটোমেটিক রিফ্রেশ ম্যানেজ করে না। তাই, আমরা সাজেস্ট করি যে আপনি নিজের সার্ভারে সমস্ত রেজিস্ট্রেশন টোকেন মাঝে মাঝে রিট্রিভ ও আপডেট করুন। এর জন্য আপনাকে যা করতে হবে:
- সঠিক API কল (যেমন,
token(completion):Apple প্ল্যাটফর্মের জন্য অথবাgetToken()Android-এর জন্য) ব্যবহার করে বর্তমান টোকেন রিট্রিভ করতে আপনার ক্লায়েন্ট অ্যাপে অ্যাপ লজিক যোগ করুন এবং তারপর স্টোরেজের জন্য আপনার অ্যাপ সার্ভারে বর্তমান টোকেন পাঠান (টাইমস্ট্যাম্প সহ)। এটি এমন একটি মাসিক কাজ হতে পারে যা সমস্ত ক্লায়েন্ট বা টোকেনকে কভার করার জন্য কনফিগার করা হয়েছে। - টোকেন পরিবর্তন হোক বা না হোক, নিয়মিত বিরতিতে টোকেনের টাইমস্ট্যাম্প আপডেট করার জন্য সার্ভার লজিক যোগ করুন।
WorkManager ব্যবহার করে লেগ্যাসি টোকেন আপডেট করার জন্য Android লজিকের উদাহরণ পেতে, Firebase ব্লগে ক্লাউড মেসেজিং টোকেন ম্যানেজ করা দেখুন।
আপনি যে সময়সূচী মেনে চলেন না কেন, নিশ্চিত করুন যে টোকেনগুলি নির্দিষ্ট সময় অন্তর আপডেট করা হয়। প্রতি মাসে একবার আপডেট করার ফ্রিকোয়েন্সি ব্যাটারির উপর প্রভাব এবং নিষ্ক্রিয় রেজিস্ট্রেশন টোকেন শনাক্ত করার মধ্যে একটি ভাল ভারসাম্য তৈরি করে। এই রিফ্রেশ করার মাধ্যমে, আপনি এটিও নিশ্চিত করেন যে কোনও ডিভাইস ইনঅ্যাক্টিভ হয়ে গেলে, সেটি আবার অ্যাক্টিভ হলে রেজিস্ট্রেশন রিফ্রেশ করবে। সপ্তাহে একবারের বেশি রিফ্রেশ করলে কোনও লাভ হয় না।
পুরনো রেজিস্ট্রেশন সরানো
কোনও ডিভাইসে মেসেজ পাঠানোর আগে, ডিভাইসের
রেজিস্ট্রেশনের টাইমস্ট্যাম্প আপনার স্টেলনেস উইন্ডো পিরিয়ডের মধ্যে আছে কিনা তা নিশ্চিত করুন। যেমন, আপনি
Cloud Functions for Firebase প্রয়োগ করে প্রতিদিন চেক করতে পারেন যে
টাইমস্ট্যাম্পটি const
EXPIRATION_TIME = 1000 * 60 * 60 * 24 * 30;-এর মতো আগে থেকে নির্ধারিত স্টেলনেস উইন্ডো পিরিয়ডের মধ্যে আছে কিনা এবং তারপরে পুরনো
রেজিস্ট্রেশন সরিয়ে দিতে পারেন:
exports.pruneRegistrations = functions.pubsub.schedule('every 24 hours').onRun(async (context) => {
// Get all documents where the timestamp exceeds is not within the past month
const staleRegistrationsResult = await admin.firestore().collection('fcmRegistrations')
.where("timestamp", "<", Date.now() - EXPIRATION_TIME)
.get();
// Delete devices with stale registrations
staleRegistrationsResult.forEach(function(doc) { doc.ref.delete(); });
});
বিষয় থেকে পুরনো রেজিস্ট্রেশন আনসাবস্ক্রাইব করা
আপনি বিষয় ব্যবহার করলে, আপনি হয়ত সেইসব বিষয় থেকে পুরনো রেজিস্ট্রেশন আনসাবস্ক্রাইব করতে চাইবেন যেগুলিতে তারা সাবস্ক্রাইব করেছেন। এর মধ্যে দুটি ধাপ রয়েছে:
- Firebase ইনস্টলেশন আইডি (FID) পরিবর্তন হলে আপনার অ্যাপকে অবশ্যই টপিকে আবার সাবস্ক্রাইব করতে হবে। এর ফলে, কোনও অ্যাপ আবার অ্যাক্টিভ হলে সাবস্ক্রিপশন অটোমেটিক আবার দেখা যায়।
- কোনও অ্যাপ ইনস্ট্যান্স এক মাস (বা আপনার নিজস্ব স্টেলনেস উইন্ডো) ধরে নিষ্ক্রিয় থাকলে, আপনাকে Firebase Admin SDK ব্যবহার করে সেটি টপিক থেকে আনসাবস্ক্রাইব করতে হবে, যাতে FCM ব্যাকএন্ড থেকে Firebase ইনস্টলেশন আইডি ও টপিক ম্যাপিং মুছে ফেলা যায়।
এই দুটি ধাপের সুবিধা হল, আপনার ফ্যান-আউট আরও দ্রুত হবে কারণ ফ্যান-আউট করার জন্য কম স্টেল রেজিস্ট্রেশন আছে এবং আপনার স্টেল অ্যাপ ইনস্ট্যান্স আবার অ্যাক্টিভ হলে অটোমেটিক আবার সাবস্ক্রাইব করবে।
ডেলিভারি সাফল্যের হার পরিমাপ করা
মেসেজ ডেলিভারির সবচেয়ে সঠিক ছবি পেতে, অ্যাক্টিভভাবে ব্যবহার করা হচ্ছে এমন অ্যাপ ইনস্ট্যান্সে মেসেজ পাঠানোই সবচেয়ে ভাল। আপনি যদি নিয়মিতভাবে প্রচুর সাবস্ক্রাইবার সহ টপিকে মেসেজ পাঠান, তাহলে এটি বিশেষভাবে গুরুত্বপূর্ণ; যদি সেইসব সাবস্ক্রাইবারদের মধ্যে কিছু অংশ আসলে নিষ্ক্রিয় থাকে, তাহলে আপনার ডেলিভারি পরিসংখ্যানের উপর এর প্রভাব সময়ের সাথে সাথে উল্লেখযোগ্য হতে পারে।
অ্যাপ ইনস্ট্যান্সকে টার্গেট করে মেসেজ পাঠানোর আগে, এইসব বিষয় বিবেচনা করুন:
- Google Analytics, BigQuery-তে ক্যাপচার করা ডেটা বা অন্যান্য ট্র্যাকিং সিগন্যাল কি রেজিস্ট্রেশন অ্যাক্টিভ আছে বলে ইঙ্গিত করে?
- আগে কি বেশ কিছু দিন ধরে ডেলিভারি করার চেষ্টা করা হয়েছে কিন্তু প্রতিবারই ব্যর্থ হয়েছে?
- গত মাসে আপনার সার্ভারে Firebase ইনস্টলেশন আইডি কি আপডেট করা হয়েছে?
- Android ডিভাইসের জন্য, FCM Data API
কি
droppedDeviceInactive-এর কারণে মেসেজ ডেলিভারি ব্যর্থ হওয়ার উচ্চ শতাংশের রিপোর্ট করে?
ডেলিভারি সম্পর্কে আরও জানতে, মেসেজ ডেলিভারি বোঝা দেখুন।