在活动处于前台时如何捕获活动中的FCM通知?

时间:2018-09-18 16:51:16

标签: android firebase firebase-cloud-messaging

我的android项目中有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>

现在,在我的一个Activity中,我想使其成为一个应用程序,以便当我的应用程序处于前台时,该Activity直接处理Fcm通知,而无需FirebaseMessagingService东西做任何事情。

我该怎么做?

当它是gcm时,我使用了BroadcastReceiver并在该特定活动中注册了broadcastReceiver。该BroadcastReceiver使用了IntentFilter,我可以调用abortBroadcast()来阻止FirebaseMessagingService进行默认操作。

但是在FCM情况下我该怎么办?如何在“活动”中的broadcastReceiver中捕获推送通知?

2 个答案:

答案 0 :(得分:1)

通知分为2部分。一个是“通知”块,另一个是“数据”块。如果以“ notification”块发送数据,则仅当应用程序处于前台时才可以访问数据,但是如果以“ data”块发送数据,则即使在以下情况下也可以随时访问数据:该应用已关闭。要在“通知”块中发送数据时获取数据,只需执行以下操作:

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

}

答案 1 :(得分:0)

我最终在FCMService中创建了一些静态方法来在我的Activity的onResume和onPause中设置一些变量。

这样,以便当我从FcmService接收消息时,我可以有条件地跳过一些通知。