当应用程序在后台时,Firebase onMessageReceived没有被调用。
当应用程序在后台时,Firebase onMessageReceived没有被调用。
我正在我们的安卓应用中使用Firebase作为我们的消息服务。我对Firebase进行了相当多的研究,我了解到如果应用在前台或后台运行,将会改变onMessageReceived方法接收到的数据类型。
我想要完成的是解析Remotemessage中传入的数据,并根据自定义标签对其执行不同的操作。例如,如果Data Map中包含一个名为“My_Custom_Tag”的字段,我想要完全覆盖弹出的标准firebase消息,然后编写一个自定义消息。
问题是,当应用在后台运行时,我放在onMessageReceived中的任何代码永远无法触发。当应用在前台运行时它能正常工作,但如果应用处于后台,就无法检测或接收任何内容。
以下是一些示例代码:
@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有没有什么想法?
admin 更改状态以发布 2023年5月21日
同学们,请认真听,我经过了许多链接并最终在这里找到了解决方案。
- 当应用在后台时,应该调用onMessageReceived方法
这个有效负荷将起作用...
{ "data":{ "title": "hello", "body": "this is body" }, "to": "c5iuJ7iDnoc:APA91bG6j2c5tiQ3rVR9tBdrCTfDQYxkPwLuNFWzRuGHrBpWiOajR-DKef9EZEEVKA-kUBfXVcqHT-mClYfad06R_rBjhRZFKVdBL7_joXE5hFEwR45Qk8wgQdia2b-LmjI1IheFGZS8" }
这个有效负荷将不起作用...
{ "notification":{ "title": "hello", "body": "this is body" }, "to": "c5iuJ7iDnoc:APA91bG6j2c5tiQ3rVR9tBdrCTfDQYxkPwLuNFWzRuGHrBpWiOajR-DKef9EZEEVKA-kUBfXVcqHT-mClYfad06R_rBjhRZFKVdBL7_joXE5hFEwR45Qk8wgQdia2b-LmjI1IheFGZS8" }
因为当负载包含"notification"时,onMessageReceived将不会调用。