दिलचस्प पोस्ट
फोनगैप / कॉर्डोवा के साथ एंड्रॉइड के लिए निर्माण करते समय मैक ओएस एक्स 10.9 मेवेरिक्स पर कमांड 'एंट' निष्पादित करने में त्रुटि 'जेड' शब्दशः के साथ सरलीकृत प्रारूप पार्सिंग की तारीख एक स्ट्रिंग बनाने के लिए वर्णों को जोड़ने के परिणाम अलग परिणाम देते हैं मैं "" "सिकलाइट में समस्या और सी # के आसपास कैसे प्राप्त करूं? एंड्रॉइड में आर क्लास को समझें पायथन के साथ सेलेनियम वेबड्राइवर परीक्षणों में फ़ायरफ़ॉक्स में छवियों को लोड करना और सीएसएस को नहीं करना चाहिए हम System.in से एक बार में एक अक्षर क्यों नहीं पढ़ सकते हैं? दो दशमलव स्थानों पर गोल लूप इंडेक्स अजीबता के लिए जावास्क्रिप्ट समूहित तालिका दृश्य सेल के पृष्ठभूमि / सीमा रंग को कैसे अनुकूलित करें? एंड्रॉइड पर सिस्टम ऐप और विशेषाधिकार वाले ऐप्स के बीच क्या फर्क है? PHP में अधिकतम POST चर को कैसे बढ़ाएं? इस कोड से उत्पन्न होने वाली कोई अनाम आंतरिक श्रेणी क्यों नहीं है? इनपुट और आउटपुट के लिए सी फंक्शन में नॉर्मि एरेज़ पास करना एंड्रॉइड क्या है: लेआउट_वेट का मतलब है?

फ़ायरबेज में पृष्ठभूमि में ऐप के बारे में नोटिफिकेशन कैसे प्रबंधित करें

यहाँ मेरा प्रकट होता है

<service android:name=".fcm.PshycoFirebaseMessagingServices"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service> <service android:name=".fcm.PshycoFirebaseInstanceIDService"> <intent-filter> <action android:name="com.google.firebase.INSTANCE_ID_EVENT" /> </intent-filter> </service> 

जब ऐप पृष्ठभूमि में है और अधिसूचना आती है तो डिफ़ॉल्ट सूचना आती है और onMessageReceived मेरा कोड चलाया नहीं onMessageReceived

यहां मेरी onMessageReceived कोड है onMessageReceived यह कहता है कि मेरा ऐप अग्रभूमि पर चल रहा है, न कि पृष्ठभूमि में ऐप। ऐप पृष्ठभूमि में भी है जब इस कोड को चलाने के लिए?

 // [START receive_message] @Override public void onMessageReceived(RemoteMessage remoteMessage) { // TODO(developer): Handle FCM messages here. // If the application is in the foreground handle both data and notification messages here. // Also if you intend on generating your own notifications as a result of a received FCM // message, here is where that should be initiated. See sendNotification method below. data = remoteMessage.getData(); String title = remoteMessage.getNotification().getTitle(); String message = remoteMessage.getNotification().getBody(); String imageUrl = (String) data.get("image"); String action = (String) data.get("action"); Log.i(TAG, "onMessageReceived: title : "+title); Log.i(TAG, "onMessageReceived: message : "+message); Log.i(TAG, "onMessageReceived: imageUrl : "+imageUrl); Log.i(TAG, "onMessageReceived: action : "+action); if (imageUrl == null) { sendNotification(title,message,action); } else { new BigPictureNotification(this,title,message,imageUrl,action); } } // [END receive_message] 

वेब के समाधान से एकत्रित समाधान "फ़ायरबेज में पृष्ठभूमि में ऐप के बारे में नोटिफिकेशन कैसे प्रबंधित करें"

1. यह क्यों हो रहा है?

एफसीएम (फ़ायरबेज क्लाउड मेसेजिंग) में दो प्रकार के संदेश हैं:

  1. संदेश प्रदर्शित करें : ये संदेश onMessageReceived() कॉलबैक को ट्रिगर करते हैं, जब आपका ऐप अग्रभूमि में होता है
  2. डेटा संदेश : शोधकर्ता संदेश onMessageReceived() कॉलबैक को ट्रिगर करते हैं, भले ही आपका ऐप अग्रभूमि / पृष्ठभूमि / मारे गए हों

फायरबसे टीम ने आपके डिवाइस पर data-messages भेजने के लिए यूआई विकसित नहीं किया है, फिर भी

2. कैसे?

इसे प्राप्त करने के लिए, आपको निम्न URL पर एक POST करना होगा:

POST https://fcm.googleapis.com/fcm/send

और निम्नलिखित शीर्ष लेख:

  • कुंजी: Content-Type , मान: application/json
  • कुंजी: Authorization , मूल्य: key=<your-server-key>

शारीरिक विषयों का उपयोग :

 { "to": "/topics/my_topic", "data": { "my_custom_key" : "my_custom_value", "other_key" : true } } 

या यदि आप इसे विशिष्ट उपकरणों पर भेजना चाहते हैं:

 { "data": { "my_custom_key" : "my_custom_value", "other_key" : true }, "registration_ids": ["{device-token}","{device2-token}","{device3-token}"] } 

नोट: सुनिश्चित करें कि आप JSON प्रमुख notification नहीं जोड़ रहे हैं
नोट: अपनी सर्वर कुंजी प्राप्त करने के लिए, आप इसे फायरबेज कंसोल में पा सकते हैं: Your project -> settings -> Project settings -> Cloud messaging -> Server Key

3. पुश अधिसूचना संदेश को कैसे संभालना है?

प्राप्त संदेश को आप कैसे संभालते हैं:

 @Override public void onMessageReceived(RemoteMessage remoteMessage) { Map<String, String> data = remoteMessage.getData(); String myCustomKey = data.get("my_custom_key"); // Manage data } 

फायरबसे लाइब्रेरी को निम्नलिखित मामलों में अपने ऑन मेसेज रिसीडेड () कॉल करने के लिए

  1. अग्रभूमि में ऐप
  2. पृष्ठभूमि में ऐप
  3. ऐप को मार दिया गया है

आपको फायरबसे एपीआई के लिए अपने अनुरोध में जेएसओएन कुंजी 'नोटिफिकेशन' नहीं डालना चाहिए बल्कि इसके बजाय 'डेटा' का उपयोग करना चाहिए, नीचे देखें।

जब आपका ऐप पृष्ठभूमि में है या मारे गए, तो निम्न संदेश आपके ऑन मेसेज रिएक्वेइड () को कॉल नहीं करेगा, और आप अपनी सूचना को कस्टमाइज़ नहीं कर सकते।

  { "to": "/topics/journal", "notification": { "title" : "title", "text": "data!", "icon": "ic_notification" } } 

लेकिन इसका उपयोग करने के बजाय यह काम करेगा

 { "to": "/topics/dev_journal", "data": { "text":"text", "title":"", "line1":"Journal", "line2":"刊物" } } 

असल में, मैसेज के रूप में आपके डेटा ऑब्जेक्ट के साथ तर्क रिमोट मैसेज में संदेश भेजा जाता है, फिर आप यहां पर स्निपेट के रूप में मेसेज पर सूचना को प्रबंधित कर सकते हैं

 @Override public void onMessageReceived(RemoteMessage remoteMessage) { Map<String, String> data = remoteMessage.getData(); //you can get your text message here. String text= data.get("text"); NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) // optional, this is to make beautiful icon .setLargeIcon(BitmapFactory.decodeResource( getResources(), R.mipmap.ic_launcher)) .setSmallIcon(smallIcon) //mandatory ....... /*You can read more on notification here: https://developer.android.com/training/notify-user/build-notification.html https://www.youtube.com/watch?v=-iog_fmm6mE */ } 

मुझे लगता है कि सभी प्रतिक्रियाएं अधूरे हैं, लेकिन उनमें से सभी के पास कुछ ऐसा है जो आपको एक ऐसी सूचना पर कार्रवाई करने की आवश्यकता है जिसमें आपका ऐप पृष्ठभूमि में है

इन चरणों का पालन करें और जब आप ऐप पृष्ठभूमि में हैं, तो आप अपनी सूचनाओं को संसाधित करने में सक्षम होंगे।

1. इस तरह एक इरादा-फ़िल्टर जोड़ें:

  <activity android:name=".MainActivity"> <intent-filter> <action android:name=".MainActivity" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> 

एक गतिविधि के लिए जिसे आप अधिसूचना डेटा को संसाधित करना चाहते हैं।

  1. अगले प्रारूप के साथ सूचनाएं भेजें:

     { "notification" : { "click_action" : ".MainActivity", "body" : "new Symulti update !", "title" : "new Symulti update !", "icon" : "ic_notif_symulti" }, "data": { ... }, "to" : "c9Vaa3ReGdk:APA91bH-AuXgg3lDN2WMcBrNhJZoFtYF9" } 

यहां कुंजी जोड़ दी गई है

 "click_action" : ".MainActivity" 

जहां। मौन एक्टिविटी आपके द्वारा चरण 1 में जोड़े गए आशय-फ़िल्टर के साथ की गतिविधि है।

  1. "मेन ऐक्टिविटी" के क्रिएट में सूचना से "डेटा" जानकारी प्राप्त करें:

     protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //get notification data info Bundle bundle = getIntent().getExtras(); if (bundle != null) { //bundle must contain all info sent in "data" field of the notification }} 

और यह आपको बस इतना करना चाहिए था। मुझे उम्मीद है कि यह किसी को मदद करता है 🙂

डॉक्स के अनुसार

पृष्ठभूमि वाले ऐप में संदेशों को संभालना

जब आपका ऐप पृष्ठभूमि में है, तो एंड्रॉइड सिस्टम ट्रे को अधिसूचना संदेशों को निर्देश देता है अधिसूचना पर एक उपयोगकर्ता टैप डिफ़ॉल्ट रूप से ऐप लॉन्चर खोलता है

इसमें ऐसे संदेश शामिल होते हैं जिनमें सूचना और डेटा पेलोड दोनों होते हैं। इन मामलों में, सूचना डिवाइस के सिस्टम ट्रे को डिलीवर की जाती है, और डेटा पेलोड आपके लॉन्चर गतिविधि के इरादे के अतिरिक्त में वितरित किया जाता है।

यदि आप अपना ऐप खोलना चाहते हैं और एक विशिष्ट कार्य निष्पादित करना चाहते हैं, तो अधिसूचना पेलोड में क्लिक_अनैस सेट करें और उस गतिविधि में आशय फ़िल्टर करें जिसे आप लॉन्च करना चाहते हैं। उदाहरण के लिए, निम्न मान की तरह इन्टेंट फ़िल्टर को ट्रिगर करने के लिए OPEN_ACTIVITY_1 पर click_action सेट करें:

  <intent-filter> <action android:name="OPEN_ACTIVITY_1" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> 

संपादित करें:

इस धागे के आधार पर:

आप फ़ायरबेज कंसोल का उपयोग करके click_action पेलोड सेट नहीं कर सकते। आप कर्ल कमांड या कस्टम HTTP सर्वर से जांच कर सकते हैं

 curl --header "Authorization: key=<YOUR_KEY_GOES_HERE>" --header Content-Type:"application/json" https://fcm.googleapis.com/fcm/send -d "{\"to\":\"/topics/news\",\"notification\": {\"title\": \"Click Action Message\",\"text\": \"Sample message\",\"click_action\":\"OPEN_ACTIVITY_1\"}}" 

फायरबेज प्रलेखन के अनुसार फायरबेज का उपयोग करके डाउनस्ट्रीम भेजें , इसमें 2 प्रकार का पेलोड है:

  1. डेटा

    यह पैरामीटर संदेश के पेलोड के कस्टम कुंजी-मान जोड़ों को निर्दिष्ट करता है। ग्राहक एप्लिकेशन डेटा संदेशों को प्रसंस्करण के लिए जिम्मेदार है। डेटा संदेशों में केवल कस्टम कुंजी-मान जोड़े हैं

  2. अधिसूचना

    यह पैरामीटर अधिसूचना पेलोड के पूर्वनिर्धारित, उपयोगकर्ता-दृश्यमान कुंजी-मान जोड़े निर्दिष्ट करता है। एफसीएम स्वचालित रूप से क्लाइंट एप्लिकेशन की ओर से एंड-यूज़र डिवाइसेज़ को संदेश प्रदर्शित करता है सूचना संदेश में उपयोगकर्ता-दृश्य कुंजी का एक पूर्वनिर्धारित सेट है।

जब आप अग्रभूमि में होते हैं तो आप मेसेसेज () पर एफसीएम के अंदर डेटा प्राप्त कर सकते हैं, आप डेटा पेलोड से अपना डेटा प्राप्त कर सकते हैं।

 data = remoteMessage.getData(); String customData = (String) data.get("customData"); 

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

 { "notification": { "title" : "title", "body" : "body text", "icon" : "ic_notification" } } 

यह सूचना पेलोड तब उपयोग किया जाता है जब आप स्वचालित रूप से सिस्टम ट्रे पर अधिसूचना दिखाना चाहते हैं, जब आपका ऐप पृष्ठभूमि में है अधिसूचना डेटा प्राप्त करने के लिए जब पृष्ठभूमि में आपका ऐप होता है, तो आपको नोटिफिकेशन पेलोड के अंदर click_action जोड़ना चाहिए।

यदि आप अपना ऐप खोलना चाहते हैं और एक विशिष्ट क्रिया [पृष्ठभूमि के दौरान] करते हैं, तो अधिसूचना पेलोड में क्लिक_ऑक्शन सेट करें और उस गतिविधि में आशय फ़िल्टर करें जिसे आप लॉन्च करना चाहते हैं। उदाहरण के लिए, निम्न मान की तरह इन्टेंट फ़िल्टर को ट्रिगर करने के लिए OPEN_ACTIVITY_1 पर click_action सेट करें:

 <intent-filter> <action android:name="OPEN_ACTIVITY_1" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> 

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

 Bundle b = getIntent().getExtras(); String someData = b.getString("someData"); 

मैं अपने एंड्रॉइड ऐप के लिए एफसीएम का उपयोग कर रहा हूं और पेलोड दोनों का उपयोग करता हूं। यहां मैं JSON उदाहरण का उपयोग कर रहा हूं:

 { "to": "FCM registration ID", "notification": { "title" : "title", "body" : "body text", "icon" : "ic_notification" }, "data": { "someData" : "This is some data", "someData2" : "etc" } } 

चूंकि फ़ॉरबसे नोटिफिकेशन UI से भेजे display-messages केवल काम करता है अगर आपका ऐप अग्रभूमि में है data-messages , एफसीएम को एक डाक कॉल करने की आवश्यकता है

कदम

  1. उन्नत रेस्ट क्लाइंट Google Chrome एक्सटेंशन इंस्टॉल करें यहां छवि विवरण दर्ज करें

  2. निम्नलिखित शीर्षलेख जोड़ें

    कुंजी : सामग्री-प्रकार, मान : आवेदन / जेसन

    कुंजी : प्राधिकरण, मान : कुंजी = "आपकी सर्वर कुंजी" यहां छवि विवरण दर्ज करें

  3. शरीर जोड़ें

    • यदि विषय का उपयोग कर रहे हैं:

    { "to" : "/topics/topic_name", "data": { "key1" : "value1", "key2" : "value2", } }

    • पंजीकरण आईडी का उपयोग करते समय:

    { "registration_ids" : "[{"id"},{id1}]", "data": { "key1" : "value1", "key2" : "value2", } }


बस!। अब सामान्य रूप से onMessageReceived कॉलबैक को onMessageReceived

 @Override public void onMessageReceived(RemoteMessage remoteMessage) { Map<String, String> data = remoteMessage.getData(); String value1 = data.get("key1"); String value2 = data.get("key2"); } 

पृष्ठभूमि में संदेश को कैप्चर करने के लिए आपको BroadcastReceiver का उपयोग करने की आवश्यकता है

 public class FirebaseDataReceiver extends WakefulBroadcastReceiver { private final String TAG = "FirebaseDataReceiver"; public void onReceive(Context context, Intent intent) { Log.d(TAG, "I'm in!!!"); Bundle dataBundle = intent.getBundleExtra("data"); Log.d(TAG, dataBundle.toString()); } } 

और इसे अपने मैनिफेस्ट में जोड़ें:

  <receiver android:name="MY_PACKAGE_NAME.FirebaseDataReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND"> <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> </intent-filter> </receiver> 

यहां फायरबेज संदेश के बारे में अधिक स्पष्ट अवधारणा है मुझे इसकी सहायता टीम से मिला

फायरबेज में तीन संदेश प्रकार हैं :

अधिसूचना संदेश : सूचना संदेश पृष्ठभूमि या अग्रभूमि पर काम करता है जब ऐप पृष्ठभूमि में है, तो सूचना संदेश सिस्टम ट्रे पर वितरित किए जाते हैं। यदि ऐप अग्रभूमि में है, तो संदेशों को onMessageReceived() द्वारा किया जाता है या didReceiveRemoteNotification कॉलबैक किया जाता है। ये अनिवार्य रूप से प्रदर्शन संदेशों के रूप में संदर्भित होते हैं।

डेटा संदेश : एंड्रॉइड प्लेटफॉर्म पर, डेटा संदेश पृष्ठभूमि और अग्रभूमि पर काम कर सकता है। डेटा संदेश ऑन मेसेज रिएक्वेइड () द्वारा नियंत्रित किया जाएगा। यहां एक प्लेटफ़ॉर्म विशिष्ट नोट होगा: एंड्रॉइड पर, डेटा पेलोड को आपकी गतिविधि लॉन्च करने के लिए उपयोग किए गए आशय में पुनर्प्राप्त किया जा सकता है। विस्तृत करने के लिए, यदि आपके पास "click_action":"launch_Activity_1" , आप केवल इस Activity_1 से getIntent() माध्यम से ही Activity_1 पुनः प्राप्त कर सकते हैं।

सूचना और डेटा पेलोड दोनों के साथ संदेश : जब पृष्ठभूमि में, ऐप्स अधिसूचना ट्रे में अधिसूचना पेलोड प्राप्त करते हैं, और जब उपयोगकर्ता अधिसूचना पर नल तब डेटा पेलोड को संभालना। अग्रभूमि में होने पर, आपके ऐप को उपलब्ध दोनों पेलोड के साथ एक संदेश ऑब्जेक्ट प्राप्त होता है दूसरे, click_action पैरामीटर अक्सर सूचना पेलोड में उपयोग किया जाता है, डेटा पेलोड में नहीं। यदि डेटा पेलोड के भीतर उपयोग किया जाता है, तो यह पैरामीटर कस्टम कुंजी-मान जोड़ी के रूप में माना जाएगा और इसलिए आपको इसके लिए कस्टम लॉजिक को कार्यान्वित करने की आवश्यकता होगी जैसा कि वह इरादा है

साथ ही, मैं आपको डेटा बंडल निकालने के लिए onMessageReceived विधि (डेटा संदेश देखें) का उपयोग करने की सलाह देता हूं। आपके तर्क से, मैंने बंडल ऑब्जेक्ट की जांच की और मुझे अपेक्षित डेटा सामग्री नहीं मिली। यहां एक ऐसा मामला है जो अधिक स्पष्टता प्रदान कर सकता है।

अधिक जानकारी के लिए इस धागे पर जाएं I

  @Override public void onMessageReceived(RemoteMessage remoteMessage) { } 

हर बार इसे केवल तब ही कहा जाता है जब एप के लिए अग्रभूमि में कहा जाता है

वहाँ एक ओवरराइड विधि है, इस विधि को हर बार कहा जाता है, चाहे कोई भी ऐप अग्रभूमि में या पृष्ठभूमि में हो या मारे गए लेकिन यह विधि इस फायरबेस एपीआई संस्करण के साथ उपलब्ध है

यह संस्करण है जिसे आपको ढाल से आयात करना है

 compile 'com.google.firebase:firebase-messaging:10.2.1' 

यह विधि है

  @Override public void handleIntent(Intent intent) { super.handleIntent(intent); // you can get ur data here //intent.getExtras().get("your_data_key") } 

पिछली फायरबसे एपीआई के साथ इस पद्धति में ऐसा नहीं था कि उस स्थिति में जब आग पृष्ठभूमि में होती है तो उस स्थिति में आग का आधार खुद ही होता है …. अब आपके पास यह विधि है जो कभी भी आप करना चाहते हैं … यू इसे इस विधि में कर सकते हैं .. …

अगर आप पिछले संस्करण का उपयोग कर रहे हैं तो डिफ़ॉल्ट गतिविधि की तुलना में उस स्थिति में शुरू हो जाएगा, तो आप उसी तरह डेटा प्राप्त कर सकते हैं

 if(getIntent().getExtras() != null && getIntent().getExtras().get("your_data_key") != null) { String strNotificaiton = getIntent().getExtras().get("your_data_key").toString(); 

// क्या कभी आप चाहते हैं ….}

आम तौर पर यह हम अधिसूचना में प्राप्त सर्वर से संरचना है

 { "notification": { "body": "Cool offers. Get them before expiring!", "title": "Flat 80% discount", "icon": "appicon", "click_action": "activity name" //optional if required..... }, "data": { "product_id": 11, "product_details": "details.....", "other_info": "......." } } 

यह आप पर निर्भर है कि आप उस डेटा कुंजी को कैसे देना चाहते हैं या आप अधिसूचना देना चाहते हैं, जो कुछ भी दे सकता है ……. क्या आप यहां एक ही कुंजी के साथ दे देंगे …….. ।

कुछ मामलों में अगर यूआर उस स्थिति में क्लिक करने का क्रिया नहीं भेज रहा है, जब आप अधिसूचना की डिफ़ॉल्ट गतिविधि पर क्लिक करेंगे, तो खुल जाएगा, लेकिन अगर आप अपनी विशिष्ट गतिविधि को खोलना चाहते हैं, जब पृष्ठभूमि पृष्ठभूमि में है, तो आप इसे अपनी गतिविधि को handle handle विधि पर कॉल कर सकते हैं क्योंकि यह हर बार कहा जाता है

2017 अद्यतन उत्तर

इस बारे में डॉक्स से स्पष्ट उत्तर दिया गया है:

यहां छवि विवरण दर्ज करें

इस तरह सरल सारांश

  • यदि आपका ऐप चल रहा है;

     onMessageReceived() 

ट्रिगर हो जाता है

  • यदि आपका ऐप नहीं चल रहा है (स्वाइप करके मार दिया गया है);

     onMessageReceived() 

शुरू हो गया और सिकड़टी द्वारा वितरित नहीं किया गया है यदि आपके पास कोई विशेष कुंजी-मूल्य जोड़ी है वे मैसेज रीसएक्ड () काम नहीं कर रहे हैं पर काम नहीं करते हैं।

मैंने इस तरीके से पाया है;

आपके लॉन्चर गतिविधि में, यह तर्क दें,

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState, R.layout.activity_splash); if (getIntent().getExtras() != null && getIntent().getExtras().containsKey("PACKAGE_NAME")) { // do what you want // and this for killing app if we dont want to start android.os.Process.killProcess(android.os.Process.myPid()); } else { //continue to app } } 

अगर ब्लॉक में, फायरबेज यूआई के अनुसार अपनी चाबियाँ खोजें।

इस उदाहरण में मेरी चाबी और मूल्य ऊपर है; (भाषा के लिए खेद है =)) यहां छवि विवरण दर्ज करें

जब मेरा कोड काम करता है, तो मुझे "com.rda.note" मिलता है।

 android.os.Process.killProcess(android.os.Process.myPid()); 

कोड की इस पंक्ति के साथ, मैंने अपना आवेदन बंद कर दिया और Google Play Market खोल दिया

खुश कोडन =)

डॉक्स के अनुसार: 17 मई, 2017

जब आपका ऐप पृष्ठभूमि में है , तो एंड्रॉइड सिस्टम ट्रे को अधिसूचना संदेशों को निर्देश देता है अधिसूचना पर एक उपयोगकर्ता टैप डिफ़ॉल्ट रूप से ऐप लॉन्चर खोलता है

इसमें संदेश शामिल हैं जिसमें सूचना और डेटा पेलोड दोनों शामिल हैं (और नोटिफिकेशन कंसोल से भेजे गए सभी संदेश)। इन मामलों में, सूचना डिवाइस के सिस्टम ट्रे को डिलीवर की जाती है, और डेटा पेलोड आपके लॉन्चर गतिविधि के इरादे के अतिरिक्त में वितरित किया जाता है।

इसलिए, आपको पेलोड अधिसूचना + डेटा दोनों का उपयोग करना चाहिए:

 { "to": "FCM registration ID", "notification": { "title" : "title", "body" : "body text", "icon" : "ic_notification" }, "data": { "someData" : "This is some data", "someData2" : "etc" } } 

Click_action का उपयोग करने की कोई ज़रूरत नहीं है। आपको केवल लांचर गतिविधि पर इरादे से एक्सा प्राप्त करना चाहिए

 <activity android:name=".MainActivity"> <intent-filter> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> 

जावा कोड मुख्य गतिविधि पर क्रिएट विधि पर होना चाहिए:

 Intent intent = getIntent(); if (intent != null && intent.getExtras() != null) { Bundle extras = intent.getExtras(); String someData= extras.getString("someData"); String someData2 = extras.getString("someData2"); } 

आप फ़ायरबेज अधिसूचना कंसोल से पेलोड नोटिफिकेशन + डेटा दोनों का परीक्षण कर सकते हैं। उन्नत विकल्प अनुभाग पर कस्टम डेटा फ़ील्ड्स को भरना न भूलें

अपने सर्वर अनुरोध से अधिसूचना पेलोड पूरी तरह से निकालें केवल डेटा भेजें और इसे onMessageReceived() में संभाल लें, अन्यथा आपकी onMessageReceived नहीं होगी, जब ऐप पृष्ठभूमि में है या मारे गए

यहां मैं सर्वर से क्या भेज रहा हूं:

 { "data":{ "id": 1, "missedRequests": 5 "addAnyDataHere": 123 }, "to": "fhiT7evmZk8:APA91bFJq7Tkly4BtLRXdYvqHno2vHCRkzpJT8QZy0TlIGs......" } 

तो आप अपना डेटा onMessageReceived(RemoteMessage message) में प्राप्त कर सकते हैं: onMessageReceived(RemoteMessage message) लें मुझे आईडी प्राप्त करना है)

 Object obj = message.getData().get("id"); if (obj != null) { int id = Integer.valueOf(obj.toString()); } 

और इसी प्रकार आप किसी भी डेटा को प्राप्त कर सकते हैं जिसे आपने सर्वर से onMessageReceived() भेजा है।

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

आराम ग्राहक उपकरण लिंक: https://chrome.google.com/webstore/detail/advanced-rest-client/hgmloofddffdnphfgcellkdfbfbjeloo

इस यूआरएल का प्रयोग करें: – https://fcm.googleapis.com/fcm/send सामग्री प्रकार: आवेदन / जेएसएन प्राधिकरण: कुंजी = आपकी सर्वर कुंजी या एयूथोइज़ेशन कुंजी (रेफरी नीचे देखें)

 { "data": { "image": "https://static.pexels.com/photos/4825/red-love-romantic-flowers.jpg", "message": "Firebase Push Message Using API" "AnotherActivity": "True" }, "to" : "device id Or Device token" } 

प्राधिकरण कुंजी Google डेवलपर कंसोल पर जाकर प्राप्त की जा सकती है और अपने प्रोजेक्ट के बाएं मेनू पर क्रेडेंशियल बटन पर क्लिक कर सकते हैं। सूचीबद्ध एपीआई कुंजी के बीच, सर्वर कुंजी आपकी प्राधिकरण कुंजी होगी

और आपको एपीआई का उपयोग करते हुए भेजे गए आपके पोस्ट अनुरोध के "से" अनुभाग में रिसीवर के टोकन आईडी को डालनी होगी।

मैंने परिदृश्यों का पता लगाया,

जब ऐप अग्रभूमि में होता है , ऑन मेसेज रिसीसेड () विधि को फायरबसेसेवा से बुलाया जाता है .इसलिए सर्विस क्लास में परिभाषित लंबित प्रदाता को बुलाया जाएगा।

और जब ऐप पृष्ठभूमि में है , तो पहली गतिविधि को कहा जाता है।

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

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

 "data": { "user_name": "arefin sajib", "value": "user name notification" } 

तो पहली गतिविधि में, आप देखेंगे, एक मान्य इरादा ( getIntent () नल नहीं है ), मान्य बंडल और अंदर बंडल, वहाँ पूरे JSON कुंजी के रूप में डेटा के साथ ऊपर वर्णित होगा।

इस परिदृश्य के लिए, मान निष्कर्षण के लिए कोड इस तरह दिखेगा,

  if(getIntent()!=null){ Bundle bundle = getIntent().getExtras(); if (bundle != null) { JSONObject jsonResponse = new JSONObject(); try { JSONObject object = new JSONObject(bundle.getStringExtra("data")); String user_name = object.optString("user_name"); } catch (JSONException e) { e.printStackTrace(); } } } 

मैंने एक ही समस्या का अनुभव किया है और फायरबसे पुस्तकालय को पुनः कंपाइल किया है और इसे पृष्ठभूमि में आवेदन करते समय नोटिफिकेशन भेजने से रोका है

* पुस्तकालय https://github.com/erdalceylan/com-google-firebase-messaging

  dependencies { compile 'com.google.firebase:firebase-core:11.2.0' compile 'com.github.erdalceylan:com-google-firebase-messaging:v1-11.2.0' } 

*

 @WorkerThread public void onMessageReceived(RemoteMessage var1) { //your app is in background or foreground all time calling } 

आशा में मदद करता है सौभाग्य