FCM रजिस्ट्रेशन मैनेज करने के सबसे सही तरीके

अगर प्रोग्राम के ज़रिए, मैसेज भेजने के अनुरोध बनाने के लिए, FCM एपीआई का इस्तेमाल किया जाता है, तो आपको लग सकता है कि समय के साथ-साथ, इस्तेमाल न किए जा रहे डिवाइसों को मैसेज भेजकर, संसाधनों को बर्बाद किया जा रहा है. ऐसा इसलिए, क्योंकि इन डिवाइसों के रजिस्ट्रेशन की समयसीमा खत्म हो चुकी होती है. इस स्थिति से, मैसेज डिलीवरी के डेटा पर असर पड़ सकता है. यह डेटा Firebase कंसोल में रिपोर्ट किया गया है या BigQuery पर एक्सपोर्ट किया गया है. इससे, डिलीवरी रेट में अचानक (लेकिन असल में मान्य नहीं) गिरावट दिख सकती है. इस गाइड में, कुछ ऐसे मेज़रमेंट के बारे में बताया गया है जिनकी मदद से, मैसेज को सही तरीके से टारगेट किया जा सकता है और डिलीवरी की मान्य रिपोर्टिंग की जा सकती है.

ऐसे रजिस्ट्रेशन जिनकी समयसीमा खत्म हो चुकी है या जो अब मान्य नहीं हैं

ऐसे रजिस्ट्रेशन, इस्तेमाल न किए जा रहे डिवाइसों से जुड़े होते हैं जो एक महीने से ज़्यादा समय से FCM से कनेक्ट नहीं हुए हैं. समय बीतने के साथ-साथ, इस बात की संभावना कम होती जाती है कि डिवाइस कभी FCM से दोबारा कनेक्ट होगा. ऐसे रजिस्ट्रेशन के लिए भेजे गए मैसेज और विषय के हिसाब से भेजे गए मैसेज की डिलीवरी होने की संभावना नहीं होती.

रजिस्ट्रेशन के मान्य न होने की कई वजहें हो सकती हैं. उदाहरण के लिए, जिस डिवाइस से रजिस्ट्रेशन जुड़ा है वह खो सकता है, खराब हो सकता है या उसे स्टोरेज में रखा जा सकता है और भूल जाया जा सकता है.

Android के लिए, जब कोई रजिस्ट्रेशन 270 दिनों तक इस्तेमाल नहीं किया जाता, तो FCM उसे एक्सपायर मान लेता है और उसे हटा देता है. रजिस्ट्रेशन की समयसीमा खत्म होने के बाद, FCM उसे अमान्य के तौर पर मार्क कर देता है और उस पर मैसेज भेजने के अनुरोध को अस्वीकार कर देता है. ध्यान दें कि Firebase इंस्टॉलेशन आईडी (एफ़आईडी) को FCM नहीं, बल्कि the Firebase Installations service (FIS) मैनेज करती है. ऐसा बहुत कम होता है कि कोई डिवाइस दोबारा कनेक्ट हो और रजिस्ट्रेशन हटाए जाने के बाद, ऐप्लिकेशन खोला जाए. ऐसे में, क्लाइंट ऐप्लिकेशन, FIS से मिले एफ़आईडी का इस्तेमाल करके, FCM के साथ फिर से रजिस्टर करता है. ध्यान दें कि एफ़आईडी बदल सकता है. एफ़आईडी कब फिर से जारी किए जाते हैं, इस बारे में ज़्यादा जानने के लिए, Firebase इंस्टॉलेशन मैनेज करना लेख पढ़ें.

iOS जैसे अन्य प्लैटफ़ॉर्म के लिए, FCM पुश सेवा (जैसे, APNs) पर निर्भर करता है. इसमें, 270 दिनों तक इस्तेमाल न किए जाने पर, रजिस्ट्रेशन की समयसीमा खत्म होने की सुविधा नहीं होती. हमारा सुझाव है कि आप रजिस्ट्रेशन को अप-टू-डेट रखें और ऐसे रजिस्ट्रेशन हटा दें जिनकी समयसीमा खत्म हो चुकी है.

सबसे सही बुनियादी तरीके

आपको किसी भी ऐसे ऐप्लिकेशन में कुछ बुनियादी तरीके अपनाने चाहिए जो प्रोग्राम के ज़रिए, मैसेज भेजने के अनुरोध बनाने के लिए, FCM एपीआई का इस्तेमाल करता है. सबसे सही बुनियादी तरीके ये हैं:

  • FCM से FCM Firebase इंस्टॉलेशन आईडी (एफ़आईडी) वापस पाएं और उन्हें अपने ऐप्लिकेशन सर्वर पर सेव करें. सर्वर की एक अहम भूमिका यह है कि वह हर क्लाइंट के रजिस्टर किए गए एफ़आईडी को ट्रैक करे और चालू एफ़आईडी की अपडेट की गई सूची को बनाए रखे. हमारा सुझाव है कि अपने डेटाबेस में रजिस्ट्रेशन का टाइमस्टैंप जोड़ें और हर बार रजिस्ट्रेशन अपलोड होने पर, उसे अपडेट करें.
  • रजिस्ट्रेशन को अप-टू-डेट रखें और ऐसे रजिस्ट्रेशन हटा दें जिनकी समयसीमा खत्म हो चुकी है. FCM अब जिन रजिस्ट्रेशन को मान्य नहीं मानता उन्हें हटाने के अलावा, आपको ऐसे अन्य संकेतों पर भी नज़र रखनी चाहिए जिनसे पता चलता है कि रजिस्ट्रेशन की समयसीमा खत्म हो चुकी है. साथ ही, उन्हें पहले से ही हटा देना चाहिए.FCM इस गाइड में, ऐसा करने के कुछ विकल्पों के बारे में बताया गया है.

Firebase इंस्टॉलेशन आईडी वापस पाना और सेव करना

आपके ऐप्लिकेशन के पहली बार शुरू होने पर, FCM SDK, ऐप्लिकेशन इंस्टेंस को FCM के साथ रजिस्टर करता है और Firebase इंस्टॉलेशन आईडी (एफ़आईडी) दिखाता है. यह वह आइडेंटिफ़ायर है जिसे आपको एपीआई से, टारगेट किए गए मैसेज भेजने के अनुरोधों में शामिल करना होगा या विषय की सदस्यता के लिए इस्तेमाल करना होगा.

हमारा सुझाव है कि एफ़आईडी को अपने ऐप्लिकेशन सर्वर पर, टाइमस्टैंप के साथ सेव करें. ऐसा हर बार करें, जब इसे अपलोड किया जाता है. हर अपलोड अनुरोध पर टाइमस्टैंप अपडेट करके, आपका सर्वर यह जान पाता है कि ऐप्लिकेशन इंस्टेंस को पिछली बार कब खोला गया था और वह FCM बैकएंड के साथ कब सिंक हुआ था.

ऑटो-इनिशियलाइज़ेशन की सुविधा चालू है या बंद है (या उपलब्ध नहीं है) के आधार पर, आपको रजिस्ट्रेशन और अपडेट को इस तरह मैनेज करना चाहिए:

  • (सुझाया गया) ऑटो-इनिशियलाइज़ेशन की सुविधा चालू होने पर: SDK, रजिस्ट्रेशन को अपने-आप अप-टू-डेट रखता है और बदलावों की निगरानी करता है. The onRegistered() कॉलबैक को ऐप्लिकेशन शुरू होने के दौरान, रूटीन सिंक के साथ-साथ, एफ़आईडी में बदलाव होने पर, नियमित तौर पर शुरू किया जाता है. एफ़आईडी को अपने सर्वर पर अपलोड करने और मौजूदा टाइमस्टैंप को सेव करने के लिए, बस इस कॉलबैक को लागू करें.
  • ऑटो-इनिशियलाइज़ेशन की सुविधा बंद होने पर: onRegistered() कॉलबैक, शुरू होने पर अपने-आप शुरू नहीं होगा. रजिस्ट्रेशन को ट्रैक करने और उन्हें अप-टू-डेट रखने के लिए, ऐप्लिकेशन शुरू होने पर register() को कॉल करें. उदाहरण के लिए, Android पर, मुख्य गतिविधि के onCreate() में. सक्सेसफ़ुल कॉल, एफ़आईडी का इस्तेमाल करके, FCM रजिस्ट्रेशन की प्रोसेस को ट्रिगर करता है और इसे आपके onRegistered() कॉलबैक पर डिलीवर करता है. इससे, आपका ऐप्लिकेशन, एफ़आईडी को अपलोड कर सकता है और आपके सर्वर पर टाइमस्टैंप को अपडेट कर सकता है .

उदाहरण: Cloud Firestore में एफ़आईडी और टाइमस्टैंप सेव करना

उदाहरण के लिए, एफ़आईडी को fcmRegistrations नाम के कलेक्शन में सेव करने के लिए, Cloud Firestore का इस्तेमाल किया जा सकता है. कलेक्शन में मौजूद हर दस्तावेज़ का आईडी, उपयोगकर्ता आईडी से मेल खाता है. साथ ही, दस्तावेज़ में मौजूदा एफ़आईडी और उसका आखिरी अपडेट किया गया टाइमस्टैंप सेव होता है. इस 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() कॉलबैक शुरू होता है. एफ़आईडी को अपलोड करने और टाइमस्टैंप को अपडेट करने के लिए, आपको इस कॉलबैक को लागू करना चाहिए:

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() में) register() को कॉल करें:onRegistered()

// 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 डिवाइस के लिए किसी रजिस्ट्रेशन की समयसीमा, 270 दिनों तक इस्तेमाल न किए जाने के बाद खत्म हो गई है या किसी क्लाइंट ने साफ़ तौर पर अनरजिस्टर किया है, तो अमान्य जवाब दिखाता है. अगर आपको अपनी परिभाषाओं के हिसाब से, रजिस्ट्रेशन की समयसीमा खत्म होने की जानकारी ज़्यादा सटीक तरीके से ट्रैक करनी है, तो ऐसे रजिस्ट्रेशन पहले से ही हटाए जा सकते हैं जिनकी समयसीमा खत्म हो चुकी है.

रजिस्ट्रेशन को नियमित तौर पर अपडेट करना

आपके रजिस्ट्रेशन, एफ़आईडी या पुराने रजिस्ट्रेशन टोकन पर आधारित हों, आपका सर्वर हर अपलोड अनुरोध पर, आपके डेटाबेस में रजिस्ट्रेशन का टाइमस्टैंप हमेशा अपडेट करे. यह टाइमस्टैंप, ऐप्लिकेशन इंस्टॉलेशन के लिए एक सिग्नल के तौर पर काम करता है. इससे पता चलता है कि क्लाइंट ने ऐप्लिकेशन को सफलतापूर्वक खोला है और वह FCM बैकएंड के साथ सिंक हो गया है. आपके इस्तेमाल किए जा रहे एपीआई के आधार पर, सही रणनीति लागू करें:

एफ़आईडी एपीआई का इस्तेमाल करने वाले क्लाइंट ऐप्लिकेशन के लिए, आपको रजिस्ट्रेशन वापस पाने या उन्हें रीफ़्रेश करने के लिए, अपने क्लाइंट ऐप्लिकेशन में समय-समय पर बैकग्राउंड जॉब शेड्यूल करने की ज़रूरत नहीं है. SDK ऑटो-इनिशियलाइज़ेशन के तहत, रीफ़्रेश की सुविधा को अपने-आप मैनेज करता है. साथ ही, ऐप्लिकेशन शुरू होने के दौरान, रूटीन सिंक के साथ, आपके onRegistered() कॉलबैक पर, मौजूदा सही एफ़आईडी को नियमित तौर पर डिलीवर करता है.

अपने सर्वर को अपडेट रखने के लिए, Firebase इंस्टॉलेशन आईडी वापस पाना और सेव करना में बताई गई, स्टार्टअप अपलोड की रणनीतियां लागू करें:

  • ऑटो-इनिशियलाइज़ेशन की सुविधा चालू होने पर: SDK, यह अपने-आप पक्का करता है कि ऐप्लिकेशन शुरू होने के दौरान, रूटीन सिंक के साथ, आपके सर्वर पर मौजूदा एफ़आईडी भेजा जाए.
  • ऑटो-इनिशियलाइज़ेशन की सुविधा बंद होने या उपलब्ध न होने पर: रजिस्ट्रेशन सीक्वेंस को फ़ोर्स करने और आपके onRegistered() कॉलबैक पर एफ़आईडी की डिलीवरी को ट्रिगर करने के लिए, ऐप्लिकेशन शुरू होने पर register() को कॉल करें. उदाहरण के लिए, Android पर, मुख्य गतिविधि के onCreate()में.

इन रणनीतियों से यह पक्का होता है कि आपके सर्वर के पास हमेशा मौजूदा चालू एफ़आईडी हो और वह अपलोड में गड़बड़ी होने पर, अपने-आप ठीक हो जाए. इससे ऐप्लिकेशन ज़्यादा भरोसेमंद बनता है.

रजिस्ट्रेशन टोकन एपीआई, जिनकी सुविधा बंद कर दी गई है

अगर पुराने रजिस्ट्रेशन टोकन का इस्तेमाल किया जा रहा है, तो क्लाइंट SDK, रूटीन सिंक के साथ, रीफ़्रेश को अपने-आप मैनेज नहीं करता. इसलिए, हमारा सुझाव है कि अपने सर्वर पर, सभी रजिस्ट्रेशन टोकन को समय-समय पर वापस पाएं और अपडेट करें. इसके लिए, आपको ये काम करने होंगे:

  • अपने क्लाइंट ऐप्लिकेशन में, ऐप्लिकेशन लॉजिक जोड़ें, ताकि मौजूदा टोकन को सही एपीआई कॉल (जैसे, token(completion): Apple प्लैटफ़ॉर्म के लिए या getToken() Android के लिए) का इस्तेमाल करके वापस पाया जा सके. इसके बाद, मौजूदा टोकन को अपने ऐप्लिकेशन सर्वर पर, टाइमस्टैंप के साथ सेव करने के लिए भेजें. यह एक महीने में एक बार होने वाली जॉब हो सकती है, जिसे सभी क्लाइंट या टोकन के लिए कॉन्फ़िगर किया जा सकता है.
  • टोकन का टाइमस्टैंप नियमित अंतराल पर अपडेट करने के लिए, सर्वर लॉजिक जोड़ें. भले ही, टोकन में बदलाव हुआ हो या नहीं.

WorkManager का इस्तेमाल करके, पुराने टोकन अपडेट करने के लिए, Android लॉजिक का उदाहरण देखने के लिए, Firebase ब्लॉग पर Cloud Messaging टोकन मैनेज करना लेख पढ़ें.

आप जिस भी टाइमिंग पैटर्न का पालन करें, पक्का करें कि टोकन समय-समय पर अपडेट किए जाएं. हर महीने में एक बार टोकन अपडेट करने से, बैटरी पर पड़ने वाले असर और इस्तेमाल न किए जा रहे रजिस्ट्रेशन टोकन का पता लगाने के बीच सही संतुलन बना रहता है. इस रीफ़्रेश से, यह भी पक्का होता है कि इस्तेमाल न किया जा रहा कोई भी डिवाइस, दोबारा इस्तेमाल किए जाने पर अपना रजिस्ट्रेशन रीफ़्रेश करेगा. हर हफ़्ते से ज़्यादा बार रीफ़्रेश करने का कोई फ़ायदा नहीं है.

ऐसे रजिस्ट्रेशन हटाना जिनकी समयसीमा खत्म हो चुकी है

किसी डिवाइस को मैसेज भेजने से पहले, पक्का करें कि डिवाइस के रजिस्ट्रेशन का टाइमस्टैंप, आपकी तय की गई समयसीमा के अंदर हो. उदाहरण के लिए, को लागू करके, हर दिन जांच की जा सकती है, ताकि यह पक्का किया जा सके कि टाइमस्टैंप, तय की गई समयसीमा के अंदर हो. जैसे, const EXPIRATION_TIME = 1000 * 60 * 60 * 24 * 30; इसके बाद, ऐसे रजिस्ट्रेशन हटाए जा सकते हैं जिनकी समयसीमा खत्म हो चुकी है:Cloud Functions for Firebase

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(); });
});
exports.pruneTokens = functions.pubsub.schedule('every 24 hours').onRun(async (context) => { // Get all documents where the timestamp exceeds is not within the past month const staleTokensResult = await admin.firestore().collection('fcmTokens') .where("timestamp", "<", Date.now() - EXPIRATION_TIME) .get(); // Delete devices with stale tokens staleTokensResult.forEach(function(doc) { doc.ref.delete(); }); });

विषयों से, ऐसे रजिस्ट्रेशन की सदस्यता खत्म करना जिनकी समयसीमा खत्म हो चुकी है

अगर विषयों का इस्तेमाल किया जाता है, तो आपको उन विषयों से, ऐसे रजिस्ट्रेशन की सदस्यता खत्म करनी पड़ सकती है जिनकी समयसीमा खत्म हो चुकी है और जिनसे वे जुड़े हुए हैं. इसमें दो चरण शामिल हैं:

  1. Firebase इंस्टॉलेशन आईडी (एफ़आईडी) में बदलाव होने पर, आपके ऐप्लिकेशन को विषयों की सदस्यता फिर से लेनी चाहिए. इससे, ऐप्लिकेशन के दोबारा चालू होने पर, सदस्यताएं अपने-आप दिखने लगती हैं.
  2. अगर कोई ऐप्लिकेशन इंस्टेंस एक महीने तक इस्तेमाल नहीं किया जाता है (या आपकी तय की गई समयसीमा के हिसाब से), तो आपको Firebase Admin SDK का इस्तेमाल करके, उसकी सदस्यता खत्म कर देनी चाहिए. ऐसा करने से, FCM बैकएंड से, Firebase इंस्टॉलेशन आईडी से विषय की मैपिंग मिट जाएगी.FCM

इन दोनों चरणों का फ़ायदा यह है कि आपके मैसेज तेज़ी से भेजे जाएंगे, क्योंकि ऐसे रजिस्ट्रेशन कम होंगे जिनकी समयसीमा खत्म हो चुकी है. साथ ही, आपके ऐसे ऐप्लिकेशन इंस्टेंस जिनकी समयसीमा खत्म हो चुकी है, दोबारा चालू होने पर अपने-आप सदस्यता ले लेंगे.

डिलीवरी की सफलता को मेज़र करना

मैसेज डिलीवरी की सटीक जानकारी पाने के लिए, सिर्फ़ ऐसे ऐप्लिकेशन इंस्टेंस को मैसेज भेजें जिनका इस्तेमाल किया जा रहा है. यह खास तौर पर तब ज़रूरी है, जब विषयों को नियमित तौर पर मैसेज भेजे जाते हैं और उनके सदस्यों की संख्या ज़्यादा होती है. अगर उन सदस्यों में से कुछ लोग असल में इस्तेमाल नहीं किए जा रहे हैं, तो समय के साथ-साथ, डिलीवरी के आंकड़ों पर इसका काफ़ी असर पड़ सकता है.

किसी ऐप्लिकेशन इंस्टेंस को मैसेज टारगेट करने से पहले, इन बातों पर ध्यान दें:

  • क्या Google Analytics, BigQuery में कैप्चर किया गया डेटा या अन्य ट्रैकिंग सिग्नल से पता चलता है कि रजिस्ट्रेशन चालू है?
  • क्या पिछले डिलीवरी के अनुरोध, समय-समय पर लगातार फ़ेल हुए हैं?
  • क्या पिछले एक महीने में, आपके सर्वर पर Firebase इंस्टॉलेशन आईडी अपडेट किया गया है?
  • Android डिवाइसों के लिए, क्या FCM Data API मैसेज डिलीवरी में फ़ेल होने की दर ज़्यादा रिपोर्ट करता है? droppedDeviceInactive

डिलीवरी के बारे में ज़्यादा जानने के लिए, मैसेज डिलीवरी को समझना लेख पढ़ें.