当应用程序处于后台并带有数据负载时,如何处理Android FCM消息?

5

使用 FCM 进行 Android 推送通知时,无法处理应用程序在后台运行的情况。默认消息会显示在通知栏中。

有人能帮我处理应用程序在后台时如何处理消息吗?

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    super.onMessageReceived(remoteMessage);

当应用程序在后台时,不会调用此方法。希望能得到任何帮助。


请查看此链接:https://dev59.com/Ip_ha4cB1Zd3GeqPuzPW#42268901 - Zaki Pathan
1
这就是通知消息的工作原理...正如文档中所述,有两种消息类型...它们的工作原理也已经写明。 - Selvin
@ZakiPathan 嘿,伙计.. 你的stackoverflow参考很不错。但问题是我应该在哪里实现stackoverflow中提到的逻辑。因为当应用程序进入后台时,我对代码没有任何控制权。 - Raghul Sugathan
@ZakiPathan,我明白你的意思了。我的问题是,“onMessageReceived”块在应用程序在后台时没有被调用。如果上述方法被调用,那么你的参考资料就是好的,并且将被实现。你能否建议一下为什么“onMessageReceived”方法没有被调用? - Raghul Sugathan
1
我的问题是当应用程序在后台时,“onMessageReceived”块没有被调用。再次强调,这就是通知类型消息的工作方式,您无法更改它,您需要发送第二种类型的消息...什么是第二种类型以及如何发送它?所有这些都在FCM的文档中(以及成千上万类似的问题,在stackoverflow上进行互联网搜索:“onmessagereceived not called”)。 - Selvin
显示剩余3条评论
1个回答

3

如果您总是从服务器接收到“data”作为有效载荷,则将始终调用onMessageReceived()。

示例: 来自服务器的有效负载应该如下:

{
 "data":{
 "id": 1,
 "missedRequests": 5
 "addAnyDataHere": 123
 },
 "to":"fhiT7evmZk8:APA91bFJq7Tkly4BtLRXdYvqHno2vHCRkzpJT8QZy0TlIGs......"
}

如果您想了解更多关于此问题的信息,请参考以下网址:Firebase在应用程序后台时未调用onMessageReceived


谢谢您的建议。我已经发现这是问题所在,仍然为您正确的建议点赞。 - Raghul Sugathan
即使数据有效载荷来自服务器,我也无法理解它,只有在前台时才能记录日志。 - Dilip Poudel
整个有效负载应该在"data"中。 - Ankit Mehta
混合通知载荷和数据载荷会导致消息无法在后台处理。因此,请确保剥离所有的通知载荷! - Ton Snoei

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接