Android पर, डाउनस्ट्रीम मैसेज को डिलीवरी की प्राथमिकता असाइन करने के लिए, आपके पास दो विकल्प होते हैं: सामान्य और ज़्यादा प्राथमिकता. सामान्य और ज़रूरी मैसेज इस तरह डिलीवर किए जाते हैं:
सामान्य प्राथमिकता. डेटा और सूचना वाले मैसेज के लिए, यह डिफ़ॉल्ट प्राथमिकता होती है. डिवाइस के स्लीप मोड में न होने पर, सामान्य प्राथमिकता वाले मैसेज तुरंत डिलीवर किए जाते हैं. जब डिवाइस डोज़ मोड में होता है, तो बैटरी बचाने के लिए सूचनाएं मिलने में देरी हो सकती है. ऐसा तब तक होता है, जब तक डिवाइस डोज़ मोड से बाहर नहीं आ जाता. जिन मैसेज को तुरंत डिलीवर करने की ज़रूरत नहीं होती उनके लिए, डिलीवरी की सामान्य प्राथमिकता चुनें. जैसे, नए ईमेल की सूचनाएं, यूज़र इंटरफ़ेस (यूआई) को सिंक रखना या बैकग्राउंड में ऐप्लिकेशन के डेटा को सिंक करना.
सबसे ज़रूरी.FCM सबसे ज़रूरी मैसेज को तुरंत डिलीवर करने की कोशिश करता है. इससे FCM को ज़रूरत पड़ने पर, स्लीप मोड में मौजूद डिवाइस को चालू करने की अनुमति मिलती है. साथ ही, यह कुछ सीमित प्रोसेसिंग (इसमें बहुत सीमित नेटवर्क ऐक्सेस भी शामिल है) कर सकता है. ज़्यादा प्राथमिकता वाले मैसेज आम तौर पर, आपके ऐप्लिकेशन या उसकी सूचनाओं के साथ उपयोगकर्ता के इंटरैक्शन का नतीजा होने चाहिए.
ज़्यादा और सामान्य प्राथमिकता वाले मैसेज के बीच फ़ैसला करना
सामान्य प्राथमिकता वाले मैसेज, सामान्य अपडेट के लिए सही होते हैं. हालाँकि, अगर आपको ज़रूरी मामलों या कार्रवाइयों के लिए तुरंत डिलीवरी पक्का करनी है, तो ज़्यादा प्राथमिकता वाला विकल्प चुनें. डोज़ मोड की वजह से, सामान्य प्राथमिकता वाले मैसेज की डिलीवरी में देरी हो सकती है. इसलिए, उपयोगकर्ताओं को दिखने वाली ज़्यादातर सूचनाओं को ज़्यादा प्राथमिकता पर सेट करने से, यह पक्का किया जा सकेगा कि उन्हें सूचनाएं तुरंत मिलें. उदाहरण के लिए, चैट मैसेज, खाते से जुड़ी समस्याएं या खाने की डिलीवरी से जुड़े अपडेट जैसी सूचनाओं को 'सबसे ज़्यादा ज़रूरी' पर सेट किया जाना चाहिए.
ज़्यादा और सामान्य प्राथमिकता वाले मैसेज को प्रोसेस करना
Android डिवाइस पर मिले सबसे ज़रूरी और सामान्य ईमेल के लिए, onMessageReceived
हैंडलर में मैसेज पेलोड को प्रोसेस करने के लिए कुछ सेकंड दिए जाते हैं. सबसे ज़रूरी ईमेल के लिए, सामान्य ईमेल के मुकाबले थोड़ा ज़्यादा समय दिया जाता है. इस समय में, सूचना तुरंत रेंडर हो जाती है. अगर आपको कोई और काम करना है, जैसे कि डिवाइस स्टोरेज से कोई इमेज लोड करना या अतिरिक्त कॉन्टेंट इकट्ठा करने के लिए अपने सर्वर को कॉल करना, तो आपको कुछ और चरण पूरे करने होंगे.
onMessageReceived
तरीके को अलग वर्कर थ्रेड पर कॉल किया जाता है. सबसे सही तरीका यह है कि आपको मैसेज पेलोड को प्रोसेस करना चाहिए और onMessageReceived
तरीके में तुरंत सूचना दिखानी चाहिए. आपको onMessageReceived
तरीके के अंदर, अतिरिक्त एसिंक्रोनस नेटवर्क कॉल नहीं करने चाहिए या किसी अलग थ्रेड पर पेलोड प्रोसेसिंग नहीं करनी चाहिए. ऐसा करने से, पेलोड पूरी तरह से प्रोसेस होने से पहले ही, आपका ऐप्लिकेशन प्रोसेस के मान्य लाइफ़साइकल से बाहर हो सकता है. ऐसा होने पर, आपको यह दिख सकता है कि भेजे गए कुछ
FCM मैसेज की सूचनाएं देर से मिल रही हैं या मिल ही नहीं रही हैं.
अगर आपको अपने मैसेज को प्रोसेस करने के लिए ज़्यादा समय चाहिए, जैसे कि मैसेज के पेलोड में मौजूद imageUrl
को फ़ेच करने के लिए, तो आपको ऐप्लिकेशन के लाइफ़साइकल को बढ़ाने के लिए, WorkManager
या फ़ोरग्राउंड सेवा जैसे किसी कंस्ट्रक्ट का इस्तेमाल करना होगा. सूचनाओं को पूरी तरह से प्रोसेस किया गया है या नहीं, इसकी पुष्टि करने के लिए, आपको onMessageReceived
तरीके को तब ओवरराइड करना चाहिए, जब आपको नीचे दिए गए दिशा-निर्देशों का पालन करना हो.
- ज़रूरी सूचनाओं के लिए: Android
WorkManager
का इस्तेमाल करके, तेज़ी से पूरा होने वाला काम शुरू करें. इससे यह पुष्टि की जा सकेगी कि आपकी ज़रूरी सूचना को प्रोसेस करने में प्राथमिकता दी गई है. साथ ही, यह पुष्टि की जा सकेगी कि सूचना रेंडर करने की प्रोसेस पूरी हो गई है. अच्छी बात यह है कि अगर आपको ज़्यादा प्राथमिकता वाली 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 मोड में अपने ऐप्लिकेशन को टेस्ट करना में दिए गए निर्देशों का इस्तेमाल करके, अपने डिवाइस को Doze मोड पर सेट करें.
- टेस्ट डिवाइस पर अपने ऐप्लिकेशन से, FCM रजिस्ट्रेशन टोकन ऐक्सेस करें. टोकन को ऐक्सेस करने के तरीके के बारे में ज़्यादा जानने के लिए, बैकग्राउंड में चल रहे ऐप्लिकेशन को टेस्ट मैसेज भेजना लेख पढ़ें.
- FCM टोकन मिलने के बाद, टेस्ट डिवाइस पर ज़रूरी सूचना भेजें. इसके लिए, FCM सूचना भेजने वाले कोड या cURL कमांड का इस्तेमाल करें. इस कमांड में कॉन्फ़िगरेशन पैरामीटर ऐसे होने चाहिए जो आपकी ज़रूरी सूचना से मेल खाते हों.
Android पर, ज़्यादा प्राथमिकता वाले FCM को कम प्राथमिकता देना
Android पर ज़्यादा प्राथमिकता वाले मैसेज, समय के हिसाब से संवेदनशील और उपयोगकर्ता को दिखने वाले कॉन्टेंट के लिए होते हैं. साथ ही, इनसे उपयोगकर्ता को नोटिफ़िकेशन मिलनी चाहिए. अगर FCM को ऐसा पैटर्न दिखता है जिसमें मैसेज भेजने पर उपयोगकर्ताओं को सूचनाएं नहीं मिलती हैं, तो आपके मैसेज को सामान्य प्राथमिकता पर सेट किया जा सकता है. इसके अलावा, उन्हें Google Play services को सौंपा जा सकता है, ताकि वह उन्हें हैंडल कर सके.
FCM, मैसेज को कम प्राथमिकता देने या प्रॉक्सी करने का फ़ैसला लेते समय, सात दिनों के मैसेज के व्यवहार का इस्तेमाल करता है. यह फ़ैसला, आपके ऐप्लिकेशन के हर इंस्टेंस के लिए अलग-अलग लिया जाता है. अगर ज़्यादा ज़रूरी मैसेज के जवाब में, सूचनाएं इस तरह से दिखाई जाती हैं कि वे उपयोगकर्ता को दिखें, तो आने वाले समय में ज़्यादा ज़रूरी मैसेज पर इसका कोई असर नहीं पड़ेगा.
Google Play services की मदद से सूचनाएं भेजने की सुविधा
कुछ शर्तों को पूरा करने वाले, सबसे ज़रूरी सूचना वाले मैसेज को प्राथमिकता से दिखाने के बजाय, Google Play services उन्हें प्रॉक्सी करती है. इसका मतलब है कि सूचनाएं, Google Play services की मदद से ऐप्लिकेशन की ओर से दिखाई जाती हैं. इसके लिए, ऐप्लिकेशन को शुरू करने की ज़रूरत नहीं होती. ऐसा Android डिवाइसों पर उपयोगकर्ताओं को बेहतर अनुभव देने के लिए किया जाता है.
ध्यान दें कि प्रॉक्सी किए गए सूचना मैसेज की वजह से, मैसेज पाने से जुड़ी Analytics रिपोर्टिंग में बदलाव होते हैं:
- प्रॉक्सी की गई सूचनाओं के लिए, आंकड़ों की रिपोर्टिंग की जा सके, इसके लिए आपके ऐप्लिकेशन में FCM SDK का 24.0.0 या उसके बाद का वर्शन इस्तेमाल किया जाना चाहिए.
- ऐसा हो सकता है कि आपको प्रॉक्सी सूचनाएं पाने में देरी हो या उनकी संख्या में कमी आए. ऐसा प्रॉक्सी सूचनाएं पाने की सुविधा शुरू होने से पहले की तुलना में हो सकता है. ऐसा इसलिए होता है, क्योंकि प्रॉक्सी की गई सूचनाओं के लिए आंकड़ों की जानकारी सिर्फ़ तब रिपोर्ट की जाती है, जब आपका ऐप्लिकेशन शुरू होता है. अगर सूचना की वजह से ऐप्लिकेशन नहीं खुलता है, तो हो सकता है कि आंकड़ों की जानकारी रिपोर्ट न की जाए.
Android Q+ और Google Play services के 19054000 या उसके बाद के वर्शन का इस्तेमाल करने वाले ऐप्लिकेशन के लिए, सूचना वाले मैसेज को इस तरह से प्रॉक्सी करना डिफ़ॉल्ट व्यवहार है. HTTP v1 API के ज़रिए भेजे गए मैसेज को प्रॉक्सी किया जाता है. हालांकि, Firebase कंसोल या लेगसी एपीआई के ज़रिए भेजे गए मैसेज प्रॉक्सी नहीं किए जाएंगे. ध्यान दें कि यह सुविधा फ़िलहाल बीटा वर्शन में है और इसमें बदलाव किया जा सकता है.
हमारा सुझाव है कि आप डेलिगेशन की सुविधा को चालू रखें, ताकि डिवाइस की बैटरी और मेमोरी को इसके फ़ायदे मिल सकें. हालांकि, आपके पास इस सुविधा को बंद करने का विकल्प है. इसके लिए, इनमें से कोई भी तरीका अपनाएं:
- ऐप्लिकेशन लेवल पर: अपने ऐप्लिकेशन मेनिफ़ेस्ट में,
<meta-data android:name= "delivery_metrics_exported_to_big_query_enabled" android:value="false"/>
डायरेक्टिव जोड़ें. - ऐप्लिकेशन इंस्टेंस के आधार पर: ऐप्लिकेशन इंस्टेंस के लिए, इस्तेमाल के उदाहरण के हिसाब से अपने ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) फ़्लो में
fun setNotificationDelegationEnabled(disable: Boolean): Task<Void!>
सेट करें. - हर मैसेज के लिए: मैसेज भेजने के अनुरोध के लिए,
AndroidNotification
ऑब्जेक्ट मेंproxy
कुंजी कोDENY
पर सेट करें.
Android पर मैसेज को कम प्राथमिकता देने की सुविधा को मेज़र करना
अलग-अलग मैसेज. डिलिवरी के बाद, यह पता लगाया जा सकता है कि किसी मैसेज की प्राथमिकता कम की गई है या नहीं. इसके लिए, getPriority() से मिली प्राथमिकता की तुलना, getOriginalPriority() से मिली मूल प्राथमिकता से करें.
सभी मैसेज. FCM एग्रीगेट डिलीवरी डेटा एपीआई यह रिपोर्ट कर सकता है कि Android पर भेजे गए आपके सभी मैसेज में से कितने मैसेज को कम प्राथमिकता दी जा रही है. ऐसा हो सकता है कि कुछ मैसेज, एग्रीगेट किए गए डेटा की रिपोर्ट में शामिल न किए गए हों. हालांकि, इन रिपोर्ट से मैसेज को कम प्राथमिकता देने की दरों के बारे में पूरी जानकारी मिलनी चाहिए. ज़्यादा जानकारी और एपीआई से क्वेरी करने के लिए सैंपल कोड पाने के लिए, एग्रीगेट किए गए डिलीवरी डेटा के बारे में हमारा लेख पढ़ें. इसे एपीआई एक्सप्लोरर से भी देखा जा सकता है.
प्रॉक्सी सूचनाएं. प्रॉक्सी की गई सूचनाओं को, FCM या GA की मौजूदा डिलीवरी मेट्रिक में नहीं गिना जाएगा. इसलिए, आपको सूचना डिलीवरी मेट्रिक में 15% तक की गिरावट दिख सकती है. प्रॉक्सी किए गए मैसेज की रिपोर्टिंग के लिए, FCM Aggregate Delivery Data API का इस्तेमाल करें.
ProxyNotificationInsightPercents
में, प्रॉक्सी किए गए नोटिफ़िकेशन का प्रतिशत दिखता है. साथ ही, उन मैसेज की जानकारी भी दिखती है जिन्हें प्रॉक्सी नहीं किया जा सकता.
सूचनाएं मिलने में देरी होने की समस्या हल करना
पक्का करें कि आपके ऐप्लिकेशन इंस्टेंस में सूचनाएं पाने की सुविधा चालू हो. अगर उपयोगकर्ता ने आपके ऐप्लिकेशन के लिए सूचनाएं पाने की अनुमति बंद कर दी है, तो आपकी कोई भी सूचना पोस्ट नहीं की जाएगी. इस वजह से, आपके मैसेज को कम प्राथमिकता दी जाएगी. किसी ऐप्लिकेशन इंस्टेंस को ज़रूरी मैसेज भेजने से पहले, पुष्टि करें कि सूचनाएं पाने की सुविधा चालू है.
सूचना को प्रोसेस करते समय, नेटवर्क के अतिरिक्त कॉल न करें. Android का इस्तेमाल करने वाले कुछ लोग ऐसे नेटवर्क पर हैं जहां डेटा ट्रांसफ़र में ज़्यादा समय लगता है. इसलिए, सूचना दिखाने से पहले अपने सर्वर से कनेक्शन न खोलें. प्रोसेसिंग के लिए तय समय खत्म होने से पहले सर्वर को वापस कॉल करने से, ज़्यादा लेटेन्सी वाले नेटवर्क पर मौजूद उपयोगकर्ताओं के लिए जोखिम हो सकता है.
इसके बजाय, सूचना के कॉन्टेंट को FCM मैसेज में शामिल करें और उसे तुरंत दिखाएं. अगर आपको Android पर ऐप्लिकेशन में मौजूद अतिरिक्त कॉन्टेंट को सिंक करना है, तो WorkManager की मदद से कोई टास्क शेड्यूल करें, ताकि उसे बैकग्राउंड में मैनेज किया जा सके.