Android डिवाइस पर मैसेज की प्राथमिकता सेट करना और उसे मैनेज करना

Android पर, डाउनस्ट्रीम मैसेज को डिलीवरी की प्राथमिकता असाइन करने के लिए, आपके पास दो विकल्प होते हैं: सामान्य और ज़्यादा प्राथमिकता. सामान्य और ज़्यादा ज़रूरी मैसेज की डिलीवरी इस तरह होती है:

  • सामान्य प्राथमिकता. डेटा और सूचना वाले मैसेज के लिए, यह डिफ़ॉल्ट प्राथमिकता होती है. डिवाइस के स्लीप मोड में न होने पर, सामान्य प्राथमिकता वाले मैसेज तुरंत डिलीवर किए जाते हैं. जब डिवाइस डोज़ मोड में होता है, तब बैटरी बचाने के लिए सूचनाएं मिलने में देरी हो सकती है. ऐसा तब तक होता है, जब तक डिवाइस डोज़ मोड से बाहर नहीं आ जाता. जिन मैसेज को तुरंत डिलीवर करने की ज़रूरत नहीं होती उनके लिए, डिलीवरी की सामान्य प्राथमिकता चुनें. जैसे, नए ईमेल की सूचनाएं, यूज़र इंटरफ़ेस (यूआई) को सिंक रखना या बैकग्राउंड में ऐप्लिकेशन का डेटा सिंक करना.

  • ज़्यादा प्राथमिकता.FCM इस विकल्प को चुनने पर, ज़्यादा प्राथमिकता वाले मैसेज तुरंत डिलीवर किए जाते हैं. इससे FCM को ज़रूरत पड़ने पर, स्लीप मोड में मौजूद डिवाइस को चालू करने की अनुमति मिलती है. साथ ही, यह कुछ सीमित प्रोसेसिंग (इसमें बहुत सीमित नेटवर्क ऐक्सेस भी शामिल है) कर सकता है. ज़्यादा प्राथमिकता वाली सूचनाओं से आम तौर पर, उपयोगकर्ता को आपके ऐप्लिकेशन या उसकी सूचनाओं से इंटरैक्ट करना चाहिए.

यह तय करना कि मैसेज को ज़्यादा या सामान्य प्राथमिकता दी जाए

सामान्य प्राथमिकता वाले मैसेज, सामान्य अपडेट के लिए सही होते हैं. हालांकि, अगर आपको यह पक्का करना है कि ज़रूरी मामलों या कार्रवाइयों के लिए मैसेज तुरंत डिलीवर हो जाएं, तो ज़्यादा प्राथमिकता वाला विकल्प चुनें. डोज़ मोड की वजह से, सामान्य प्राथमिकता वाले मैसेज की डिलीवरी में देरी हो सकती है. इसलिए, उपयोगकर्ताओं को दिखने वाली ज़्यादातर सूचनाओं को ज़्यादा प्राथमिकता पर सेट करने से, यह पक्का किया जा सकेगा कि उन्हें सूचनाएं तुरंत मिलें. उदाहरण के लिए, चैट मैसेज, खाते से जुड़ी समस्याएं या खाने की डिलीवरी से जुड़े अपडेट जैसी सूचनाओं को 'सबसे ज़्यादा ज़रूरी' पर सेट किया जाना चाहिए.

ज़्यादा और सामान्य प्राथमिकता वाले मैसेज प्रोसेस करने की सुविधा

Android डिवाइस पर मिले सबसे ज़रूरी और सामान्य ईमेल के मैसेज पेलोड को onMessageReceived हैंडलर में प्रोसेस करने के लिए, कुछ सेकंड का समय दिया जाता है. हालांकि, सबसे ज़रूरी ईमेल के लिए, सामान्य ईमेल की तुलना में थोड़ा ज़्यादा समय दिया जाता है. यह समय सिर्फ़ सूचना को तुरंत रेंडर करने के लिए काफ़ी होना चाहिए. अगर आपको कोई और काम करना है, जैसे कि डिवाइस के स्टोरेज से कोई इमेज लोड करना या अतिरिक्त कॉन्टेंट इकट्ठा करने के लिए अपने सर्वर को कॉल करना, तो आपको कुछ और चरण पूरे करने होंगे.

onMessageReceived तरीके को अलग वर्कर थ्रेड पर कॉल किया जाता है. सबसे सही तरीका यह है कि आप मैसेज के पेलोड को प्रोसेस करें और onMessageReceived तरीके में तुरंत सूचना दिखाएं. आपको onMessageReceived तरीके के अंदर, अतिरिक्त एसिंक्रोनस नेटवर्क कॉल नहीं करने चाहिए. साथ ही, किसी अलग थ्रेड पर पेलोड प्रोसेसिंग नहीं करनी चाहिए. ऐसा करने से, पेलोड के पूरी तरह से प्रोसेस होने से पहले ही आपका ऐप्लिकेशन, प्रोसेस के मान्य लाइफ़साइकल से बाहर हो सकता है. ऐसा होने पर, आपको दिख सकता है कि भेजे गए कुछ FCM मैसेज की सूचनाएं देर से मिल रही हैं या मिल ही नहीं रही हैं.

अगर आपको अपने मैसेज को प्रोसेस करने के लिए ज़्यादा समय चाहिए, तो ऐप्लिकेशन के लाइफ़साइकल को बढ़ाने के लिए, आपको WorkManager या फ़ोरग्राउंड सेवा जैसे किसी कंस्ट्रक्ट का इस्तेमाल करना होगा. उदाहरण के लिए, मैसेज के पेलोड में मौजूद imageUrl को फ़ेच करने के लिए. सूचनाओं को पूरी तरह से प्रोसेस करने के लिए, onMessageReceived तरीके को बदलने के दौरान, आपको यहां दिए गए दिशा-निर्देशों का पालन करना चाहिए.

  • ज़्यादा ज़रूरी सूचनाओं के लिए: Android WorkManager का इस्तेमाल करके, जल्द से जल्द पूरा होने वाला टास्क शुरू करें. इससे यह पुष्टि की जा सकेगी कि आपकी ज़्यादा ज़रूरी सूचना को प्राथमिकता दी गई है. साथ ही, यह भी पुष्टि की जा सकेगी कि सूचना रेंडर करने की प्रोसेस पूरी हो गई है. अच्छी बात यह है कि अगर आपको ज़्यादा प्राथमिकता वाली FCM प्रोसेसिंग की वजह से, जल्द प्रोसेस होने वाले जॉब के कोटे के खत्म होने की चिंता है, तो आपको ऐसा करने की ज़रूरत नहीं है. ज़्यादा प्राथमिकता वाले 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"
          }
      }
  }
}

डोज़ मोड में, सिर्फ़ ज़रूरी सूचनाएं पाने की सुविधा की जांच करना

यह पक्का करने के लिए कि उपयोगकर्ता को मिलने वाली ज़्यादा प्राथमिकता वाली सूचनाएं सही तरीके से मिल रही हैं और प्रोसेस हो रही हैं, सूचनाओं को टेस्ट करने के लिए इन निर्देशों का पालन करें:

  1. Doze मोड में अपने ऐप्लिकेशन को टेस्ट करना में दिए गए निर्देशों का इस्तेमाल करके, अपने डिवाइस को Doze मोड पर सेट करें.
  2. टेस्ट डिवाइस पर अपने ऐप्लिकेशन से, FCM रजिस्ट्रेशन टोकन ऐक्सेस करें. टोकन को ऐक्सेस करने के तरीके के बारे में ज़्यादा जानने के लिए, बैकग्राउंड में चल रहे ऐप्लिकेशन को टेस्ट मैसेज भेजना लेख पढ़ें.
  3. 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 की मदद से कोई टास्क शेड्यूल करें, ताकि उसे बैकग्राउंड में मैनेज किया जा सके.