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

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

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

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

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

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

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

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 पेलोड अपडेट करना होगा.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 मोड में, ज़्यादा प्राथमिकता वाली सूचनाओं को टेस्ट करना

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

  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 पर, मैसेज की प्राथमिकता कम होने की दर मेज़र करना

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

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

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

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