Как захватить уведомление FCM в действии, когда оно находится на переднем плане? - PullRequest
0 голосов
/ 18 сентября 2018

В моем проекте Android есть настройка push-уведомлений FCM.

У меня есть класс

public class MyFcmListenerService extends FirebaseMessagingService {
    @Override
    public void onMessageReceived(RemoteMessage message) {
        // handle general push notifications
    }
}

В моем AndoridManifest.xml у меня есть это

<service
    android:name=".model.integration.fcm.MyFcmListenerService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

Теперь в одном из моих занятий я бы хотел сделать этотак что, когда мое приложение находится на переднем плане, эта активность обрабатывает уведомление Fcm напрямую, без каких-либо действий с FirebaseMessagingService.

Как мне это сделать?

Когда это был gcm, я использовалBroadcastReceiver и регистр broadcastReceiver в этой конкретной деятельности.Этот BroadcastReceiver использовал IntentFilter, и я могу просто позвонить abortBroadcast(), чтобы остановить FirebaseMessagingService от выполнения его стандартных действий.

Но что мне делать в случае FCM?Как мне записать push-уведомление в broadcastReceiver в моей активности?

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

В итоге я создал статический метод в FCMService для установки некоторых переменных в моем onResume и onPause своей активности.

Таким образом, чтобы при получении сообщений от FcmService я мог условно пропустить некоторые уведомления.

0 голосов
/ 18 сентября 2018

Есть 2 части уведомления.Один - это блок «уведомления», а другой - «данные»Если вы отправляете данные в блоке «уведомление», то вы можете получить доступ к данным только тогда, когда приложение находится на переднем плане, но если вы отправляете данные в блоке «данные», то вы можете получить доступ к данным в любое время, даже еслиприложение закрыто.Чтобы получить данные, когда данные отправляются в блоке «уведомления», просто выполните:

public void onMessageReceived(RemoteMessage message) {
    // If the data is sent in "notification" block then
    message.getNotification().getTitle() //for Title
    message.getNotification().getBody() //for body
    message.getNotification().getClickAction() //for clickAction
    //etc...

    //Build your notification here using notification builder and the data you have
}

Чтобы получить данные, когда данные отправлены в блоке «данных», просто выполните:

public void onMessageReceived(RemoteMessage message) {
    // If the data is sent in "data" block then
    Map<String, String> data = message.getData();

    //Now extract any data you want as it is a Map using keys that you would have sent in the "data" block

    //Build your notification here using notification builder and the data you have

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...