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 को ऐसा पैटर्न दिखता है जिसमें मैसेज से उपयोगकर्ता को सूचनाएं नहीं मिलती हैं, तो आपके मैसेज की प्राथमिकता कम करके, सामान्य प्राथमिकता पर सेट की जा सकती है या उन्हें सौंप दिया जा सकता है.
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 की मदद से कोई टास्क शेड्यूल किया जा सकता है.