Firebase сообщение, Android-приложение в фоновом режиме не перехватывает push-уведомление после нажатия на сообщение - PullRequest
0 голосов
/ 20 октября 2018

Я использую сообщения Firebase для отправки push-уведомлений.У меня небольшая проблема с моим приложением для Android.В версии для iOS я могу легко передавать параметры после нажатия на уведомление, когда приложение находится в фоновом режиме.

В версии Android я могу перехватывать сообщения, когда приложение находится на переднем плане, но не когда приложение находится в фоновом режиме (я использую библиотеку com.google.firebase: firebase-messaging: 17.3.4):

my AndroidManifest.xml

<activity android:name=".MainActivity"
        android:screenOrientation="portrait"
        >

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

        <intent-filter>
            <action android:name="OPEN_NOTIFY" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
....
<service
        android:name=".MyFirebaseMessagingService">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT"/>
        </intent-filter>
    </service>

Полезная нагрузка для моего уведомления:

notification:{
 title: "mytitle",
 text: "MYTEXT",
 "data":{
   "type" : "message",
   "id_message" : res
  },
  "click_action" : "OPEN_NOTIFY"
},to: token

Когда я нажимаю на уведомление, оно должно открыть MainActivity, и я хотел бы получитьid_message

my MyFirebaseMessagingService.java

 @Override
public void onMessageReceived(RemoteMessage remoteMessage){

    //never enters if the app is in background

    if(remoteMessage.getNotification() != null){
       //I READ NOTIFY WHEN APP IS IN FOREGROUND
    }
}

Я пытаюсь получить параметры непосредственно из Inten, но это решение не работает

my MainActivity.java:

@Override
protected void onCreate(Bundle savedInstanceState) {
   ....
   if (getIntent().getExtras() != null) {
        for (String key : getIntent().getExtras().keySet()) {
            Object value = getIntent().getExtras().get(key);
            Log.d(TAG, "Key: " + key + " Value: " + value);
        }
    }
   ....
}

Я не могу перехватить мое уведомление:

Вывод:

Key: google.sent_time Value: 1540026384768
Key: google.ttl Value: 2419200
Key: from Value: 635549396240
Key: google.message_id Value: 0:1540026384773623%6b8fed3d6b8fed3d
Key: collapse_key Value: ....

Я иду по правильному пути?Спасибо

1 Ответ

0 голосов
/ 26 мая 2019

Согласно официальным документам Firebase , вы не можете обработать уведомление {} часть уведомления (вы можете установить только значок в манифесте), НО вот решение: отправьте необходимые данные через часть данных {},Теперь вы можете обрабатывать его с MyFirebaseService и показывать уведомление, если хотите и как хотите: данные будут отображаться в remoteMessage.toIntent().getExtras().В вашем случае отправьте уведомление следующим образом:

// ignore notification {}
data {
    "type" : "message",
    "id_message" : res
}
to: key

(не помещайте данные в блок уведомлений). Я могу написать рабочий код отправки и получения уведомления, если вы хотите

...