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

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

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

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

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

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

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

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