当应用被杀时,不会调用Firebase onMessageReceived

Md *_*din 6 java android firebase firebase-cloud-messaging

关于Firebase Cloud Messaging的热门话题一直是onMessageReceived()某些低端设备的方法没有触发Data Payload消息.这是真的.结果如下:

应用程序被杀死场景:

设备获得数据负载:

  1. Nexus 5X:OS 7.1

设备无法获得数据负载:

  1. 小米MI 4C:OS 5.1
  2. 华为LUA-U22:OS 5.1

确保我不从服务器/邮递员发送通知密钥.

我正在寻找解决方案,我从Firebase获得了数据负载,包括所有类型的设备,操作系统以及显然来自API级别15.我的邮递员详细信息如下.

 {
    "registration_ids": ["fC5uxGSRCsg:APA91bHh9fMXQ41LpX6tjjSsBKGrKTWYpzKimLDzvBGSHDPo2pq87JHqogUp2kqrmJi06siG_p6DfgRCim23iFzlBQAIrgtMDqRW4s39zUqv9CzyPqzxVl5PtnHPRDs4OagTuTePNyDI"],
    "data": {
        "title" : "my_custom_value",
        "message" : "tekksdasdasdsa",
         "isBackground" : "",
          "payload" : {


          },
           "timestamp" : "",
            "imageUrl" : "",
     }

}
Run Code Online (Sandbox Code Playgroud)

Pro*_*kar 1

根据 Firebase 文档:

\n\n
\n

您有两个选项可以为下游消息分配传送优先级:正常优先级和高优先级。普通和高优先级消息的传递工作如下:

\n\n

正常优先级。这是数据消息的默认优先级。

\n\n

高优先级。这是通知消息的默认优先级。

\n
\n\n

由于您使用的是数据负载,因此通知优先级默认设置为正常。回到文档:

\n\n
\n

onMessageReceived为大多数消息类型提供,但\n以下例外:

\n\n

通知消息:当您的应用程序处于后台时发送。在这种情况下,通知将传送到设备\xe2\x80\x99s 系统托盘。\n 默认情况下,用户点击通知会打开应用程序启动器。

\n\n

数据消息:在Android平台上,数据消息可以在后台和前台工作。数据消息将由\n处理 onMessageReceived()。这里的特定于平台的注释是:在 Android 上,可以在用于启动 Activity 的 Intent 中检索数据负载。

\n\n

具有通知和数据负载的消息:后台和\n 前台。在这种情况下,通知将传递到\n 设备\xe2\x80\x99s 系统托盘,并且数据负载将在启动器活动的意图的额外\n 中传递。

\n
\n\n

我怀疑这与使用数据有效负载有关。由于应用程序在某些设备中因内存管理而被终止,onMessageReceived()可能会被跳过。一个简单的解决方法是同时使用数据通知负载。这样,即使应用程序不再运行,您仍然会在系统托盘中收到通知。稍后从通知托盘中单击后处理通知。

\n\n
{\n    "data": {\n        "message": "message_body",\n        "title": "message_title"\n    },\n    "notification": {\n        "body": "message_body",\n        "title": "message_title"\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

查看官方文档

\n