Android पर, डाउनस्ट्रीम मैसेज को डिलीवरी की प्राथमिकता असाइन करने के लिए, आपके पास दो विकल्प होते हैं: सामान्य और ज़्यादा प्राथमिकता. सामान्य और ज़रूरी मैसेज डिलीवर करने की सुविधा इस तरह काम करती है:
सामान्य प्राथमिकता. डेटा और सूचना वाले मैसेज के लिए, यह डिफ़ॉल्ट प्राथमिकता होती है. डिवाइस के स्लीप मोड में न होने पर, सामान्य प्राथमिकता वाले मैसेज तुरंत डिलीवर किए जाते हैं. जब डिवाइस डोज़ मोड में होता है, तो बैटरी बचाने के लिए सूचनाएं मिलने में देरी हो सकती है. ऐसा तब तक होता है, जब तक डिवाइस डोज़ मोड से बाहर नहीं आ जाता. जिन मैसेज को तुरंत डिलीवर करने की ज़रूरत नहीं होती उनके लिए, डिलीवरी की सामान्य प्राथमिकता चुनें. जैसे, नए ईमेल की सूचनाएं, यूज़र इंटरफ़ेस (यूआई) को सिंक रखना या बैकग्राउंड में ऐप्लिकेशन के डेटा को सिंक करना.
ज़्यादा प्राथमिकता.FCM इस विकल्प को चुनने पर, ज़्यादा प्राथमिकता वाले मैसेज तुरंत डिलीवर किए जाते हैं. इससे FCM को ज़रूरत पड़ने पर, स्लीप मोड में मौजूद डिवाइस को चालू करने की अनुमति मिलती है. साथ ही, यह कुछ सीमित प्रोसेसिंग (इसमें बहुत सीमित नेटवर्क ऐक्सेस भी शामिल है) कर सकता है. ज़्यादा प्राथमिकता वाली सूचनाओं से आम तौर पर, उपयोगकर्ताओं को आपके ऐप्लिकेशन या उसकी सूचनाओं से इंटरैक्ट करना चाहिए.
ज़्यादा और सामान्य प्राथमिकता वाले मैसेज के बीच फ़ैसला करना
सामान्य प्राथमिकता वाले मैसेज, सामान्य अपडेट के लिए सही होते हैं. हालांकि, अगर आपको ज़रूरी मामलों या कार्रवाइयों के लिए तुरंत डिलीवरी पक्का करनी है, तो ज़्यादा प्राथमिकता वाला विकल्प चुनें. डोज़ मोड की वजह से, सामान्य प्राथमिकता वाले मैसेज की डिलीवरी में देरी हो सकती है. इसलिए, उपयोगकर्ताओं को दिखने वाली ज़्यादातर सूचनाओं को ज़्यादा प्राथमिकता पर सेट करने से, यह पक्का किया जा सकेगा कि उन्हें सूचनाएं तुरंत मिलें. उदाहरण के लिए, चैट मैसेज, खाते से जुड़ी समस्याएं या खाने की डिलीवरी से जुड़े अपडेट जैसी सूचनाओं को 'सबसे ज़्यादा ज़रूरी' के तौर पर सेट किया जाना चाहिए.
ज़्यादा और सामान्य प्राथमिकता वाले मैसेज को प्रोसेस करना
Android डिवाइस पर मिले सबसे ज़रूरी और सामान्य प्राथमिकता वाले मैसेज, दोनों के लिए onMessageReceived हैंडलर में मैसेज पेलोड को प्रोसेस करने के लिए कुछ सेकंड दिए जाते हैं. हालांकि, सबसे ज़रूरी मैसेज के लिए, सामान्य प्राथमिकता वाले मैसेज की तुलना में थोड़ा ज़्यादा समय दिया जाता है. इस समय में, सूचना तुरंत रेंडर हो जाती है. अगर आपको कोई और काम करना है, जैसे कि डिवाइस के स्टोरेज से कोई इमेज लोड करना या अतिरिक्त कॉन्टेंट इकट्ठा करने के लिए अपने सर्वर को कॉल करना, तो आपको कुछ और चरण पूरे करने होंगे.
onMessageReceived तरीके को अलग वर्कर थ्रेड पर कॉल किया जाता है. सबसे सही तरीका यह है कि onMessageReceived तरीके में, मैसेज पेलोड को प्रोसेस किया जाए और सूचना तुरंत दिखाई जाए. आपको onMessageReceived तरीके के अंदर, अतिरिक्त एसिंक्रोनस नेटवर्क कॉल नहीं करने चाहिए या किसी अलग थ्रेड पर पेलोड प्रोसेसिंग नहीं करनी चाहिए. ऐसा करने से, पेलोड के पूरी तरह से प्रोसेस होने से पहले ही आपका ऐप्लिकेशन, प्रोसेस के मान्य लाइफ़साइकल से बाहर हो सकता है. ऐसा होने पर, आपको दिख सकता है कि भेजे गए कुछ FCM मैसेज की सूचनाएं देर से मिल रही हैं या मिल ही नहीं रही हैं.
अगर आपको अपने मैसेज को प्रोसेस करने के लिए ज़्यादा समय चाहिए, जैसे कि मैसेज के पेलोड में मौजूद imageUrl को फ़ेच करने के लिए, तो आपको ऐप्लिकेशन के लाइफ़साइकल को बढ़ाने के लिए, WorkManager या फ़ोरग्राउंड सेवा जैसे कंस्ट्रक्ट का इस्तेमाल करना होगा. सूचनाओं को पूरी तरह से प्रोसेस करने के लिए, onMessageReceived तरीके को बदलने के दौरान, आपको यहां दिए गए दिशा-निर्देशों का पालन करना चाहिए.
- ज़्यादा प्राथमिकता वाली सूचनाओं के लिए: Android
WorkManagerका इस्तेमाल करके, तेज़ी से प्रोसेस होने वाला जॉब शुरू करें. इससे यह पुष्टि की जा सकेगी कि आपकी ज़्यादा प्राथमिकता वाली सूचना को प्रोसेस होने में कम समय लगता है. साथ ही, यह पुष्टि की जा सकेगी कि सूचना रेंडर होने की प्रोसेस पूरी हो गई है. अच्छी बात यह है कि अगर आपको ज़्यादा प्राथमिकता वाली सूचनाओं को प्रोसेस करने के लिए, तेज़ी से प्रोसेस होने वाले जॉब के कोटे के खत्म होने की चिंता है, तो आपको ऐसा करने की ज़रूरत नहीं है. ज़्यादा प्राथमिकता वाली सूचनाओं को प्रोसेस करने के लिए, तेज़ी से प्रोसेस होने वाले जॉब के कोटे में कुछ समय के लिए छूट मिलती है. यह छूट, ज़्यादा प्राथमिकता वाली सूचनाएं भेजने के तुरंत बाद शेड्यूल किए गए तेज़ी से प्रोसेस होने वाले जॉब के लिए मिलती है.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"
}
}
}
}
डोज़ मोड में, ज़रूरी सूचनाओं को टेस्ट करना
यह पक्का करने के लिए कि उपयोगकर्ता को उच्च प्राथमिकता वाली सूचनाएं सही तरीके से मिल रही हैं और उन्हें प्रोसेस किया जा रहा है, सूचनाओं को टेस्ट करने के लिए इन निर्देशों का पालन करें:
- डोज़ मोड में अपने ऐप्लिकेशन को टेस्ट करना में दिए गए निर्देशों का इस्तेमाल करके, अपने डिवाइस को डोज़ मोड पर सेट करें.
- टेस्ट डिवाइस पर अपने ऐप्लिकेशन से, 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 या उसके बाद का वर्शन इस्तेमाल किया जाना चाहिए.
- ऐसा हो सकता है कि आपको प्रॉक्सी सूचनाएं पाने में देरी हो या उनकी संख्या में कमी आए. ऐसा प्रॉक्सी सूचनाएं पाने की सुविधा शुरू होने से पहले की तुलना में हो सकता है. ऐसा इसलिए होता है, क्योंकि प्रॉक्सी की गई सूचनाओं के लिए Analytics, सिर्फ़ तब रिपोर्ट की जाती है, जब आपका ऐप्लिकेशन शुरू होता है. अगर सूचना से ऐप्लिकेशन नहीं खुलता है, तो हो सकता है कि Analytics रिपोर्ट न की जाए.
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 की मदद से कोई टास्क शेड्यूल किया जा सकता है.