我在 Android 应用程序中使用 Firebase 作为消息服务。我对 Firebase 研究了很多并且我明白应用程序在前台运行或现在运行是否会更改 onMessageReceived 方法中接收到的数据类型.
我想要完成的是解析来自 Remotemessage 的传入数据,并根据自定义标签对其执行不同的操作。 IE,如果数据映射包含一个名为“My_Custom_Tag”的字段,我想完全覆盖弹出的标准 firebase 消息并编写自定义消息。
问题是,当应用程序在后台运行时,我放入 onMessageReceived 中的任何代码never被触发。当应用程序在前台运行时它工作得很好,但如果应用程序在后台则不会检测/接收任何内容。
下面是一些示例代码:
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
Map<String, String> aMap = remoteMessage.getData();
//Custom object here for easier parsing
PushNotificationsPojo pojo = this.convertResponseToPojo(aMap);
if(pojo == null){
passToFirebase(remoteMessage);
return;
}
if(pojo.getData().getCustomTag().equals(PushNotificationsPojo.ID_TAG_CHAT_MESSAGE)) {
createCustomNotification1(pojo);
} else if (pojo.getData().getCustomTag().equals(PushNotificationsPojo.ID_TAG_SOME_OTHER_MESSAGE)){
createCustomNotification2(pojo);
} else if (pojo.getData().getCustomTag().equals(PushNotificationsPojo.ID_TAG_STUFF_AND_WHATNOT)) {
createCustomNotification3(pojo);
} else {
passToFirebase(remoteMessage);
}
}
我的问题是,我该如何编辑 MyFirebaseMessagingService 以便我可以检查传入数据,确定标签信息,并决定将其传递给 firebase 以便它可以使用标准处理,或者不将其传递给 firebase 并编写我的当我的应用程序在后台运行时,有自己的自定义显示通知吗?
谢谢大家!
PS,有机会的话Firebase 地下城主 Frank van Puffelen有想法吗?
从 FCM 消息中删除通知负载,以便将数据负载传递到 onMessageReceived 方法。
Read this and this小心。
当您的应用程序处于后台时,数据有效负载会传递到 onMessageReceived 方法仅当没有通知负载时. (标记一下单词)
如果两个有效负载都存在,则系统会自动处理通知部分(系统托盘),并且您的应用程序会在启动器活动的意图的额外内容中获取数据有效负载(在用户点击通知后)。
为了能够成功地为 Android 和 iOS 这两个平台提供服务,您可能必须根据客户端的操作系统发送不同的 FCM 消息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)