[英]FCM onMessageReceived does not fire when app is killed (Android Oreo)
[英]Firebase onMessageReceived not called when app is Killed
关于Firebase云消息传递的趋势主题是,对于某些低端设备,不会从onMessageReceived()
方法触发Data Payload消息。 这是真的。 结果如下:
应用程序被杀死场景:
设备获得数据负载:
设备无法获得数据负载:
确保我不从服务器/邮递员发送通知密钥。
我正在寻找解决方案,我从Firebase获得了数据负载,包括所有类型的设备,操作系统以及显然来自API级别15.我的邮递员详细信息如下。
{
"registration_ids": ["fC5uxGSRCsg:APA91bHh9fMXQ41LpX6tjjSsBKGrKTWYpzKimLDzvBGSHDPo2pq87JHqogUp2kqrmJi06siG_p6DfgRCim23iFzlBQAIrgtMDqRW4s39zUqv9CzyPqzxVl5PtnHPRDs4OagTuTePNyDI"],
"data": {
"title" : "my_custom_value",
"message" : "tekksdasdasdsa",
"isBackground" : "",
"payload" : {
},
"timestamp" : "",
"imageUrl" : "",
}
}
在某些类似MI的设备中,如果从应用程序托盘中 删除 应用程序,您将无法收到通知! 但如果您杀死了某项活动并且未从应用程序托盘中 删除 ,您将收到通知!
在小米手机中,他们根据特定标准将应用列入白名单或将其列入黑名单。 如果您下载的是应用程序,并且该应用程序位于白名单中,则会允许该应用显示通知。
如何测试 : -
在杀死您的应用活动之后尝试测试您的应用,而不是从应用托盘中删除,如果工作正常,那就是您可以在最后完成的任务!
根据Firebase文档:
您有两种方法可以为下游消息分配传递优先级:正常和高优先级。 正常和高优先级消息的传递如下所示:
正常优先。 这是数据消息的默认优先级。
高度优先。 这是通知消息的默认优先级。
由于您使用的是数据有效负载,因此默认情况下通知优先级设置为正常。 回到文档:
为大多数消息类型提供
onMessageReceived
,但以下情况除外:通知消息:当您的应用在后台时提供。 在这种情况下,通知将传递到设备的系统托盘。 用户点按通知会默认打开应用启动器。
数据消息:在Android平台上,数据消息可以在后台和前台工作。 数据消息将由
onMessageReceived()
处理。 这里的平台特定说明如下:在Android上,可以在用于启动活动的Intent中检索数据有效负载。包含通知和数据有效负载的消息:背景和前景。 在这种情况下,通知将传递到设备的系统托盘,并且数据有效负载将在启动器活动的附加内容中传递。
我怀疑它与使用数据有效负载有关。 由于应用程序因某些设备中的ram管理而被杀死,因此可能会跳过onMessageReceived()
。 一个简单的解决方法是使用数据和通知有效负载。 因此,即使应用程序不再运行,您仍会在系统托盘中收到通知。 稍后在通知托盘中单击后处理通知。
{
"data": {
"message": "message_body",
"title": "message_title"
},
"notification": {
"body": "message_body",
"title": "message_title"
}
}
查看官方文档。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.