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

时间:2017-09-14 06:55:25

标签: java android firebase firebase-cloud-messaging

关于 Firebase云消息传递的热门话题一直是针对某些低端设备从onMessageReceived()方法未触发Data Payload消息的热门话题。这是真的。结果如下:

应用程序被杀死的情况:

设备获得了数据有效负载:

  1. Nexus 5X:OS 7.1
  2. 设备无法获取数据有效负载:

    1. Xiaomi MI 4C:OS 5.1
    2. 华为LUA-U22:OS 5.1
    3. 确保我没有从服务器/邮递员发送通知键。

      我正在寻找解决方案,我从Firebase获得了数据负载,包括所有类型的设备,OS&很明显来自API级别15.我的邮递员详情如下。

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

2 个答案:

答案 0 :(得分:2)

在某些设备中,如 MI ,如果应用程序托盘中的应用程序被删除,您将无法收到通知!但是,如果您杀死某项活动并且未从应用程序托盘中删除,您将收到通知!
在小米手机中,他们根据特定标准将应用列入白名单或将其列入黑名单。如果您下载的是应用程序,并且该应用程序位于白名单中,则会允许该应用显示通知。
如何测试: -
在杀死您的应用活动之后尝试测试您的应用,而不是从应用托盘移除,如果工作正常,那就是您可以在最后完成的任务!

答案 1 :(得分:1)

根据Firebase文档:

  

您可以使用两种方法为下游消息分配传递优先级:普通和高优先级。正常和高优先级消息的传递如下:

     

普通优先级。这是数据消息的默认优先级。

     

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

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

  大多数消息类型都提供了

onMessageReceived   以下例外:

     当您的应用在后台时,

通知消息会传递。在   在这种情况下,通知将传递到设备的系统托盘。   用户点按通知会默认打开应用启动器。

     

数据讯息:在Android平台上,数据讯息可以继续使用   背景和前景。数据消息将由。处理   onMessageReceived()。这里的平台特定说明将是:开   Android,可以在Intent中检索数据有效负载   发起你的活动。

     

包含通知和数据有效负载的消息:背景和   前景。在这种情况下,通知将传递给   设备的系统托盘,数据有效负载在附加功能中提供   您的启动器活动的意图。

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

{
    "data": {
        "message": "message_body",
        "title": "message_title"
    },
    "notification": {
        "body": "message_body",
        "title": "message_title"
    }
}

查看官方文档here.