Android पर, डाउनस्ट्रीम मैसेज को डिलीवरी प्राथमिकता असाइन करने के लिए आपके पास दो विकल्प हैं: सामान्य और ज़्यादा प्राथमिकता. सामान्य और ज़्यादा प्राथमिकता वाले मैसेज की डिलीवरी इस तरह काम करती है:
सामान्य प्राथमिकता. यह डेटा और सूचना वाले मैसेज के लिए डिफ़ॉल्ट प्राथमिकता है. जब डिवाइस स्लीप मोड में नहीं होता, तब सामान्य प्राथमिकता वाले मैसेज तुरंत डिलीवर हो जाते हैं. जब डिवाइस Doze मोड में होता है, तो बैटरी बचाने के लिए डिलीवरी में देरी हो सकती है. यह देरी तब तक हो सकती है, जब तक डिवाइस Doze मोड से बाहर नहीं आ जाता. कम समय में डिलीवर होने वाले मैसेज के लिए, सामान्य डिलीवरी प्राथमिकता चुनें. जैसे, नए ईमेल की सूचनाएं, यूज़र इंटरफ़ेस (यूआई) को सिंक में रखना या बैकग्राउंड में ऐप्लिकेशन का डेटा सिंक करना.
ज़्यादा प्राथमिकता.FCM ज़्यादा प्राथमिकता वाले मैसेज को तुरंत डिलीवर करने की कोशिश करता है. इससे, ज़रूरत पड़ने पर FCM स्लीप मोड में मौजूद डिवाइस को वेक अप कर सकता है और सीमित प्रोसेसिंग कर सकता है. इसमें, बहुत सीमित नेटवर्क ऐक्सेस भी शामिल है. ज़्यादा प्राथमिकता वाले मैसेज आम तौर पर, आपके ऐप्लिकेशन या उसकी सूचनाओं के साथ उपयोगकर्ता के इंटरैक्शन का नतीजा होने चाहिए.
ज़्यादा और सामान्य प्राथमिकता वाले मैसेज के बीच फ़ैसला करना
सामान्य प्राथमिकता वाले मैसेज, सामान्य अपडेट के लिए सही होते हैं. हालांकि, ज़रूरी मामलों या कार्रवाइयों के लिए तुरंत डिलीवरी पक्का करने के लिए, ज़्यादा प्राथमिकता वाले मैसेज चुनें. Doze मोड की वजह से, सामान्य प्राथमिकता वाले मैसेज की डिलीवरी में देरी हो सकती है. इसलिए, उपयोगकर्ता को दिखने वाली ज़्यादातर सूचनाओं को ज़्यादा प्राथमिकता पर सेट करने से, यह पक्का हो जाएगा कि वे तुरंत डिलीवर हो जाएं. उदाहरण के लिए, चैट मैसेज, खाते से जुड़ी समस्याएं या खाने की डिलीवरी के अपडेट जैसी सूचनाओं को ज़्यादा प्राथमिकता पर सेट किया जाना चाहिए.
ज़्यादा और सामान्य प्राथमिकता वाले मैसेज की प्रोसेसिंग
Android डिवाइस पर, ज़्यादा और सामान्य प्राथमिकता वाले मैसेज, दोनों के लिए onMessageReceived हैंडलर में मैसेज पेलोड को प्रोसेस करने के लिए कुछ सेकंड दिए जाते हैं. हालांकि, ज़्यादा प्राथमिकता वाले मैसेज के लिए, सामान्य प्राथमिकता वाले मैसेज के मुकाबले थोड़ा ज़्यादा समय दिया जाता है. उम्मीद है कि यह समय, सूचना को तुरंत रेंडर करने के लिए काफ़ी होगा. अगर आपको कोई अतिरिक्त काम करना है, जैसे कि डिवाइस के स्टोरेज से कोई इमेज लोड करना या अतिरिक्त कॉन्टेंट इकट्ठा करने के लिए अपने सर्वर को कॉल करना, तो आपको अतिरिक्त चरण पूरे करने होंगे.
onMessageReceived तरीका, अलग वर्कर थ्रेड पर कॉल किया जाता है. सबसे सही तरीका यह है कि onMessageReceived तरीके में, मैसेज पेलोड को प्रोसेस करें और तुरंत सूचना दिखाएं. `onMessageReceived` तरीके में, आपको अलग थ्रेड पर अतिरिक्त एसिंक्रोनस नेटवर्क कॉल नहीं करने चाहिए या पेलोड प्रोसेसिंग नहीं करनी चाहिए. ऐसा करने से, पेलोड पूरी तरह से प्रोसेस होने से पहले ही, आपका ऐप्लिकेशन मान्य प्रोसेस लाइफ़साइकल से बाहर हो सकता है. अगर ऐसा होता है, तो आपको दिख सकता है कि भेजे गए कुछ FCM मैसेज की सूचनाएं, देरी से मिली हैं या मिली ही नहीं हैं.
अगर आपको अपने मैसेज को प्रोसेस करने के लिए ज़्यादा समय चाहिए, जैसे कि अपने मैसेज पेलोड में मौजूद imageUrl को फ़ेच करने के लिए, तो आपको ऐप्लिकेशन लाइफ़साइकल को बढ़ाने के लिए, WorkManager या फ़ोरग्राउंड सेवा जैसी किसी कंस्ट्रक्ट का इस्तेमाल करना होगा. अपनी सूचनाओं की पूरी तरह से प्रोसेसिंग की पुष्टि करने के लिए,
तरीके को onMessageReceivedओवरराइड करते समय,
आपको यहां दिया गया तरीका अपनाना चाहिए.
- ज़्यादा प्राथमिकता वाली सूचनाओं के लिए: Android
WorkManagerका इस्तेमाल करके, तुरंत शुरू होने वाला कोई काम शुरू करें. इससे यह पुष्टि की जा सके कि आपकी ज़्यादा प्राथमिकता वाली सूचना को प्राथमिकता के आधार पर प्रोसेसिंग का समय मिला है. साथ ही, यह भी पुष्टि की जा सके कि आपकी सूचना रेंडरिंग पूरी तरह से हो गई है. आपके लिए अच्छी बात यह है कि अगर आपको ज़्यादा प्राथमिकता वाली FCM प्रोसेसिंग की वजह से, तुरंत शुरू होने वाले काम के कोटे खत्म होने की चिंता है, तो आपको ऐसा करने की ज़रूरत नहीं है. ज़्यादा प्राथमिकता वाली FCMonMessageReceivedके डिस्पैच होने के तुरंत बाद शेड्यूल किए गए, तुरंत शुरू होने वाले कामों के लिए, थोड़ी छूट मिलती है. - सामान्य प्राथमिकता वाली सूचनाओं के लिए: इसके बजाय, Android
WorkManagerका इस्तेमाल करके, सामान्यWorkRequestशुरू करें. इससे यह पुष्टि हो जाएगी कि आपकी सूचना को प्रोसेस करने के लिए ज़रूरी अतिरिक्त काम, प्राथमिकता के आधार पर प्रोसेसिंग का इस्तेमाल किए बिना और बैटरी के गैर-ज़रूरी इस्तेमाल की समस्याएं पैदा किए बिना, आखिर में प्रोसेस हो गया है.
मैसेज के लिए प्राथमिकता सेट करना
Admin SDK का इस्तेमाल करके, FCM REST API, और Firebase कंसोल का इस्तेमाल करके, अपने उपयोगकर्ताओं को सूचनाएं भेजी जा सकती हैं. Admin SDK और FCM REST API से, प्राथमिकता सेटिंग बदलने के लिए, आपको मैसेज JSON पेलोड अपडेट करना होगा.Admin SDK प्राथमिकता को ज़्यादा पर सेट करने का तरीका जानने के लिए, कोड का यह सैंपल इस्तेमाल किया जा सकता है. कंसोल से भेजी गई सूचनाओं के लिए, 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 मोड में सेट करने के लिए, अपने ऐप्लिकेशन को Doze मोड में टेस्ट करना लेख में दिए गए निर्देशों का पालन करें.
- टेस्ट डिवाइस पर, अपने ऐप्लिकेशन से FCM रजिस्ट्रेशन टोकन ऐक्सेस करें. टोकन ऐक्सेस करने के तरीके के बारे में ज़्यादा जानने के लिए, बैकग्राउंड में चल रहे किसी ऐप्लिकेशन को टेस्ट मैसेज भेजना लेख पढ़ें.
- FCM टोकन मिलने के बाद, FCM सूचना भेजने वाले कोड या cURL कमांड का इस्तेमाल करके, टेस्ट के लिए डिवाइस को ज़्यादा प्राथमिकता वाली सूचना भेजें. इस कमांड में, कॉन्फ़िगरेशन पैरामीटर, आपकी ज़्यादा प्राथमिकता वाली सूचना से मेल खाने चाहिए.
Android पर, ज़्यादा प्राथमिकता वाली FCM की प्राथमिकता कम करना
Android पर, ज़्यादा प्राथमिकता वाले मैसेज, समय के हिसाब से ज़रूरी और उपयोगकर्ता को दिखने वाले कॉन्टेंट के लिए होते हैं. साथ ही, इनसे उपयोगकर्ता को सूचनाएं मिलनी चाहिए. अगर FCM को ऐसा पैटर्न दिखता है जिसमें मैसेज से उपयोगकर्ता को सूचनाएं नहीं मिलती हैं, तो आपके मैसेज की प्राथमिकता कम करके, सामान्य प्राथमिकता पर सेट की जा सकती है. इसके अलावा, उन्हें Google Play services को सौंपकर, मैनेज करने के लिए भेजा जा सकता है.
FCM मैसेज की प्राथमिकता कम करने या उन्हें प्रॉक्सी करने के बारे में फ़ैसला लेते समय, सात दिनों के मैसेज के व्यवहार का इस्तेमाल करता है. यह फ़ैसला, आपके ऐप्लिकेशन के हर इंस्टेंस के लिए अलग से लिया जाता है. अगर ज़्यादा प्राथमिकता वाले मैसेज के जवाब में, सूचनाएं इस तरह दिखती हैं कि उपयोगकर्ता उन्हें देख सके, तो आने वाले समय में, ज़्यादा प्राथमिकता वाले आपके मैसेज पर कोई असर नहीं पड़ेगा.
Google Play services के साथ सूचनाएं सौंपना
ज़्यादा प्राथमिकता वाली सूचना वाले ऐसे मैसेज जो कुछ शर्तों को पूरा करते हैं, उनकी प्राथमिकता कम करने के बजाय, उन्हें Google Play services के ज़रिए प्रॉक्सी किया जाता है. इसका मतलब है कि सूचनाएं, ऐप्लिकेशन को शुरू किए बिना, Google Play services की मदद से दिखाई जाती हैं. ऐसा Android डिवाइसों पर, बेहतर उपयोगकर्ता अनुभव देने के लिए किया जाता है.
ध्यान दें कि प्रॉक्सी की गई सूचना वाले मैसेज की वजह से, मैसेज मिलने से जुड़े आंकड़ों की रिपोर्टिंग के तरीके में बदलाव होते हैं:
- प्रॉक्सी की गई सूचनाओं के आंकड़ों की रिपोर्टिंग के लिए, आपके ऐप्लिकेशन को 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 Aggregate Delivery Data API से यह रिपोर्ट की जा सकती है कि Android पर भेजे गए आपके सभी मैसेज में से कितने प्रतिशत मैसेज की प्राथमिकता कम की गई है. ऐसा हो सकता है कि एग्रीगेट डेटा रिपोर्ट में कुछ मैसेज शामिल न किए जाएं. हालांकि, कुल मिलाकर, इनसे मैसेज की प्राथमिकता कम होने की दरों की ग्लोबल जानकारी मिलनी चाहिए. ज़्यादा जानकारी और एपीआई से क्वेरी करने के लिए, कोड का सैंपल पाने के लिए, एग्रीगेट डिलीवरी डेटा के बारे में हमारा लेख पढ़ें. इसे एपीआई एक्सप्लोरर से भी एक्सप्लोर किया जा सकता है.
प्रॉक्सी की गई सूचनाएं. प्रॉक्सी की गई सूचनाएं, FCM या GA के मौजूदा डिलीवरी मेट्रिक में नहीं गिनी जाएंगी. इसलिए, सूचना की डिलीवरी के मेट्रिक में 15% तक की गिरावट आ सकती है. प्रॉक्सी किए गए मैसेज की रिपोर्टिंग के लिए, FCM Aggregate Delivery Data API का इस्तेमाल करें.
ProxyNotificationInsightPercentsमें, सफलतापूर्वक प्रॉक्सी की गई सूचनाओं का प्रतिशत रिपोर्ट किया जाता है. साथ ही, उन मैसेज की जानकारी भी दी जाती है जिन्हें सफलतापूर्वक प्रॉक्सी नहीं किया जा सकता.
सूचनाओं की डिलीवरी में होने वाली देरी की समस्या हल करना
पक्का करें कि आपके ऐप्लिकेशन के इंस्टेंस में सूचनाएं पाने की सुविधा चालू हो. अगर उपयोगकर्ता ने आपके ऐप्लिकेशन के लिए, सूचनाएं पाने की अनुमति बंद कर दी है, तो आपकी कोई भी सूचना पोस्ट नहीं की जाएगी. इससे, आपके मैसेज की प्राथमिकता कम हो जाएगी. आपको किसी ऐप्लिकेशन इंस्टेंस को ज़्यादा प्राथमिकता वाले मैसेज भेजने से पहले, यह पुष्टि करनी चाहिए कि सूचनाएं पाने की सुविधा चालू है.
सूचना को प्रोसेस करते समय, अतिरिक्त नेटवर्क कॉल करने से बचें. Android के मोबाइल इस्तेमाल करने वाले लोगों में से कुछ लोग, हाई लेटेंसी नेटवर्क पर हैं. इसलिए, सूचना दिखाने से पहले, अपने सर्वर से कनेक्शन न खोलें. अनुमति वाले प्रोसेसिंग समय के खत्म होने से पहले, सर्वर को वापस कॉल करना, हाई लेटेंसी नेटवर्क पर मौजूद उपयोगकर्ताओं के लिए जोखिम भरा हो सकता है.
इसके बजाय, FCM मैसेज में सूचना का कॉन्टेंट शामिल करें और उसे तुरंत दिखाएं. अगर आपको Android पर, ऐप्लिकेशन में मौजूद अतिरिक्त कॉन्टेंट को सिंक करना है, तो बैकग्राउंड में उसे मैनेज करने के लिए, WorkManager की मदद से कोई टास्क शेड्यूल किया जा सकता है.