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

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

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

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

ज़्यादा और सामान्य प्राथमिकता वाले मैसेज के बीच फ़ैसला करना

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

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

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

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

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

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

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

  1. डोज़ मोड में अपने ऐप्लिकेशन को टेस्ट करना में दिए गए निर्देशों का इस्तेमाल करके, अपने डिवाइस को डोज़ मोड पर सेट करें.
  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 या उसके बाद का वर्शन इस्तेमाल किया जाना चाहिए.
  • ऐसा हो सकता है कि आपको प्रॉक्सी सूचनाएं पाने में देरी हो या उनकी संख्या में कमी आए. ऐसा प्रॉक्सी सूचनाएं पाने की सुविधा शुरू होने से पहले की तुलना में हो सकता है. ऐसा इसलिए होता है, क्योंकि प्रॉक्सी की गई सूचनाओं के लिए आंकड़ों की जानकारी सिर्फ़ तब रिपोर्ट की जाती है, जब आपका ऐप्लिकेशन शुरू होता है. अगर सूचना से ऐप्लिकेशन नहीं खुलता है, तो हो सकता है कि आंकड़ों की जानकारी रिपोर्ट न की जाए.

Android Q+ और Google Play services के 19054000 या इसके बाद के वर्शन का इस्तेमाल करने वाले ऐप्लिकेशन के लिए, सूचना वाले मैसेज को इस तरह से प्रॉक्सी करना डिफ़ॉल्ट व्यवहार है. एचटीटीपी v1 एपीआई के ज़रिए भेजे गए मैसेज को प्रॉक्सी किया जाता है. हालांकि, 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 एग्रीगेट डिलीवरी डेटा API यह रिपोर्ट कर सकता है कि Android पर भेजे गए आपके सभी मैसेज में से कितने प्रतिशत मैसेज को कम प्राथमिकता दी जा रही है. ऐसा हो सकता है कि कुछ मैसेज को एग्रीगेट किए गए डेटा की रिपोर्ट में शामिल न किया गया हो. हालांकि, इन रिपोर्ट से मैसेज को कम प्राथमिकता देने की दरों के बारे में पूरी जानकारी मिलनी चाहिए. ज़्यादा जानकारी और एपीआई से क्वेरी करने के लिए सैंपल कोड पाने के लिए, विज्ञापन से जुड़ी परफ़ॉर्मेंस के एग्रीगेट किए गए डेटा के बारे में हमारा लेख पढ़ें. इसे एपीआई एक्सप्लोरर से भी देखा जा सकता है.

  • प्रॉक्सी सूचनाएं. प्रॉक्सी की गई सूचनाओं को, FCM या GA की मौजूदा डिलीवरी मेट्रिक में नहीं गिना जाएगा. इसलिए, आपको सूचना डिलीवरी मेट्रिक में 15% तक की गिरावट दिख सकती है. प्रॉक्सी किए गए मैसेज की रिपोर्टिंग के लिए, FCM Aggregate Delivery Data API का इस्तेमाल करें. ProxyNotificationInsightPercents में, प्रॉक्सी किए गए नोटिफ़िकेशन का प्रतिशत दिखता है. साथ ही, उन मैसेज की जानकारी भी दिखती है जिन्हें प्रॉक्सी नहीं किया जा सकता.

सूचनाएं मिलने में देरी होने की समस्या हल करना

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

  • सूचना को प्रोसेस करते समय, नेटवर्क के अतिरिक्त कॉल न करें. Android का इस्तेमाल करने वाले कुछ लोग, हाई लेटेंसी वाले नेटवर्क पर हैं. इसलिए, सूचना दिखाने से पहले अपने सर्वर से कनेक्शन न खोलें. प्रोसेसिंग के लिए तय समय खत्म होने से पहले सर्वर को वापस कॉल करना, ज़्यादा इंतज़ार के समय वाले नेटवर्क पर मौजूद उपयोगकर्ताओं के लिए जोखिम भरा हो सकता है.

    इसके बजाय, सूचना के कॉन्टेंट को FCM मैसेज में शामिल करें और उसे तुरंत दिखाएं. अगर आपको Android पर ऐप्लिकेशन में मौजूद अतिरिक्त कॉन्टेंट को सिंक करना है, तो बैकग्राउंड में उस कॉन्टेंट को मैनेज करने के लिए, WorkManager की मदद से कोई टास्क शेड्यूल किया जा सकता है.