我的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中捕获推送通知?
答案 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接收消息时,我可以有条件地跳过一些通知。