android - जब मल्टी-टास्क ट्रे से ऐप को रोका जाता है तो एंड्रॉइड ऐप को फायरबेस नोटिफिकेशन नहीं मिलता है




firebase firebase-cloud-messaging (4)

अद्यतन 03/2017 - here मेरे उत्तर का एक हिस्सा शामिल here ।

बंद / मारे गए / बल को रोकने के संबंध में विषय के लिए, इस विषय पर काफी समय से चर्चा की गई है और इसका कोई निश्चित जवाब नहीं है। मेरे किसी परीक्षण के दौरान, मैं अभी भी एक संदेश प्राप्त कर पा रहा हूं (यदि केवल एक data पेलोड के साथ परीक्षण किया गया है) यदि मैं अपने ऐप को बंद कर देता हूं। लेकिन जब मैंने सेटिंग मेनू से इसे बंद किया, तो मुझे कोई संदेश प्राप्त नहीं हुआ । ध्यान दें कि यह हमेशा व्यवहार नहीं है।

कुछ डिवाइस हैं जिन्हें डिज़ाइन किया गया था कि जब आप ऐप को बंद करते हैं, तो यह बल के समान होगा जो उन्हें रोक देगा (मेरा उत्तर here देखें)।

ऐसे उपकरण भी हैं जहां भले ही एप्लिकेशन अभी भी बस स्वाइप किया गया हो , भले ही यह बलपूर्वक बंद हो , डिवाइस स्वयं संदेश प्राप्त करने से रोक रहा है। दूसरों का कहना है कि यह मामला नहीं हो सकता क्योंकि व्हाट्सएप जैसे ऐप इसे करने में सक्षम थे। इसका कारण मैंने अब तक सीखा है, क्योंकि डिवाइस निर्माताओं ने संभव होने के लिए अधिकांश प्रसिद्ध ऐप को सफेद कर दिया है।

यह कहीं भी प्रलेखित नहीं है क्योंकि (आईएमओ), यह एक ऐसा विषय है जो डिवाइस पर भी निर्भर करता है और एफसीएम का कुल नियंत्रण नहीं है।

मूल उत्तर:

चूंकि यह डिवाइस विशिष्ट है ( जैसा कि आपने अपनी पोस्ट में उल्लेख किया है: विपक्ष F1 श्रृंखला फोन ), यह बहुत अच्छी तरह से संभव हो सकता है कि जब किसी ऐप को उस डिवाइस में मल्टी-टास्क ट्रे से रोका जाता है, तो यह वास्तव में ऐप को मार रहा है, जिससे सेवाओं का कारण बनता है इससे जुड़ी अन्य पृष्ठभूमि प्रक्रियाएं भी नष्ट हो सकती हैं। इस here को थोड़ा और विचार के लिए देखें कि मैं क्या कहना चाह रहा हूं।

यदि आप समुदाय के आसपास खोज करते हैं, तो आमतौर पर यहां जो सुझाव दिया गया है वह START_STICKY ध्वज का उपयोग करना है। हालाँकि, मैंने देखा है कि यह पहले FirebaseMessagingService लिए पहले उल्लेख किया गया था (इस post देखें, @ArthurThompson द्वारा टिप्पणी):

ये सेवाएं Google Play सेवाओं द्वारा शुरू की जाएंगी, जो हमेशा डिवाइस पर चल रही होती हैं। आपको इन सेवाओं को स्वयं शुरू या बंद नहीं करना चाहिए।

इसके साथ ही कहा, इसमें (टिप्पणियों से फिर से) की संभावना भी है:

डिवाइस पर एक सेटिंग हो सकती है जो इसे अनुमति / अस्वीकार करती है।

मेरा सुझाव है कि यदि डिवाइस द्वारा सेवाओं को मार दिया जा रहा है या आगे देख रहे हैं कि क्या ऐसी सेटिंग्स हैं जो सूचनाएं रोक रही हैं।

मैंने एसओ पर एक समान प्रश्न पढ़ा है, हालांकि, मुझे इसका सही उत्तर नहीं मिल पा रहा था।

मेरे पास एक प्रणाली है जिसमें हम लगभग 500 उपकरणों को सूचना भेजते हैं।

दुर्भाग्य से, इन उपकरणों में से कई अधिसूचना प्राप्त नहीं कर रहे हैं। मैंने पाया है कि ओप्पो एफ 1 श्रृंखला के फोन विशेष रूप से अधिसूचना प्राप्त नहीं कर रहे हैं।

मैंने देखा है कि यह तब होता है जब ऐप को मल्टी-टास्क ट्रे से रोका जाता है। मैं इसका कैसे समाधान करूं?

अपडेट: मैंने देखा है कि जब मैं ऐप को टास्क-ट्रे से बंद करता हूं, तो मेरा ऐप एप्लिकेशन मैनेजर में बंद हो जाता है। जब मैं व्हाट्सएप को टास्क-ट्रे से बंद करता हूं, तब भी यह जबरदस्ती बंद नहीं होता है। व्हाट्सएप द्वारा कैसे संभाला जा रहा है?


क्या आपने अपने सेवा वर्ग पर stopWithTask विशेषता का उपयोग करने की कोशिश की है?

<service
    android:name="com.yourapp.YourPushService"
    android:stopWithTask="false" />

यदि यह सही है, तो उपयोगकर्ता द्वारा एप्लिकेशन के स्वामित्व वाली गतिविधि में निहित कार्य को हटाने पर यह सेवा अपने आप बंद हो जाएगी। डिफॉल्ट गलत है।

यदि ध्वज गलत है, तो आपकी सेवा कक्षा में onTaskRemoved कॉलबैक है।

मामले में आप "स्वाइप" घटना का पता लगा सकते हैं, और आप वर्कअराउंड को लागू कर सकते हैं।


मैं उसी के माध्यम से गया हूं लेकिन मेरे मामले में, यह ओपो फोन के बजाय श्याओमी फोन था। वास्तव में क्या होता है कि जब आप सिस्टम ट्रे से ऐप को बंद करते हैं, तो सिस्टम पूरी तरह से ऐप को मार देता है। इसका मतलब है कि आपका ऐप GCM / FCM के माध्यम से सूचनाएं प्राप्त करने में सक्षम नहीं होगा। WAKE_LOCK अनुमति या तो मदद नहीं करता है।

इसका मतलब यह नहीं है कि फोन अधिसूचना प्राप्त नहीं कर रहा है। यह है। यह सिर्फ ऐप्स को इसे दिखाने नहीं देगा। आप adb से प्रसारण भेजकर और अपने logcat को देख कर इसे सत्यापित कर सकते हैं।

इस समस्या का एक संभावित समाधान SyncAdapter का उपयोग करना है। हालांकि यह सलाह नहीं दी गई है, मैंने कुछ ऐप का उपयोग करते हुए देखा है। अन्य संभावित समाधान कुछ प्रकार की पृष्ठभूमि सेवा का उपयोग करना है जो हमेशा चल रहा है। कुछ लोग AlarmManager भी उपयोग करते हैं क्योंकि यह लगभग कभी नहीं मारा जाता है। मेरा कहना है - आप अपनी सूचनाओं के लिए GCM / FCM पर भरोसा नहीं कर सकते।

अब व्हाट्सएप के बारे में बात करते हैं -

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


मैं भी इसी मुद्दे का सामना कर रहा था, लेकिन तब मुझे बहुत डिबगिंग के बाद एहसास हुआ कि, मैं उन गतिविधियों को रोक रहा था जो किसी एक गतिविधि के स्टॉप मेथड पर Firebase नोटिफिकेशन प्राप्त करती हैं।

  1. कृपया जांचें कि क्या आप इन सेवाओं को ऐप में कहीं भी रोक रहे हैं।
  2. सुनिश्चित करें कि आप सेवा का उपयोग कर रहे हैं और इरादे-सेवा का नहीं।
  3. ऐप को स्वाइप करने से सेवाएं कभी बंद नहीं होंगी। इसलिए पहले दो बिंदु के लिए एप्लिकेशन को डीबग करने का प्रयास करें।




firebase-notifications