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

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

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

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

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

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

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

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

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

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

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

मैसेज के लिए प्राथमिकता सेट करना

Admin SDK का इस्तेमाल करके, FCM REST API, और Firebase कंसोल का इस्तेमाल करके, अपने उपयोगकर्ताओं को सूचनाएं भेजी जा सकती हैं. और FCM REST API से, प्राथमिकता की सेटिंग बदलने के लिएAdmin SDK, आपको मैसेज 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"
          }
      }
  }
}

Doze मोड में, ज़्यादा प्राथमिकता वाली सूचनाओं को टेस्ट करना

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

  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 डिवाइसों पर, बेहतर उपयोगकर्ता अनुभव देने के लिए किया जाता है.

ध्यान दें कि प्रॉक्सी की गई सूचना वाले मैसेज की वजह से, सूचनाएं मिलने से जुड़े आंकड़ों की रिपोर्टिंग के तरीके में बदलाव होते हैं:

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

  • Individual Messages. डिलीवरी के दौरान, यह पता लगाया जा सकता है कि किसी मैसेज की प्राथमिकता कम की गई है या नहीं. इसके लिए, getPriority() से मिली डिलीवरी की प्राथमिकता की तुलना, getOriginalPriority() से मिली ओरिजनल प्राथमिकता से करें.

  • All Messages. FCM Aggregate Delivery Data API से यह रिपोर्ट की जा सकती है कि Android पर, आपके सभी मैसेज में से कितने प्रतिशत मैसेज की प्राथमिकता कम की गई है. ऐसा हो सकता है कि कुछ मैसेज, एग्रीगेट डेटा रिपोर्ट में शामिल न किए जाएं. हालांकि, कुल मिलाकर, इनसे मैसेज की प्राथमिकता कम होने की दरों की जानकारी मिलनी चाहिए. ज़्यादा जानकारी और एपीआई को क्वेरी करने के लिए सैंपल कोड पाने के लिए, एग्रीगेट डिलीवरी डेटा के बारे में हमारा लेख पढ़ें. इसे एपीआई एक्सप्लोरर से भी देखा जा सकता है.

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

सूचनाओं की डिलीवरी में होने वाली देरी से जुड़ी समस्याओं को हल करना

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

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

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