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