当应用程序在后台时收到Firebase消息时的Findout

时间:2017-02-27 07:28:09

标签: android firebase push-notification background firebase-cloud-messaging

我知道这个标题存在同样的问题,但遗憾的是它没有得到正确回答而且被接受了! here

我想知道如何在应用程序处于后台时找到收到的FCM消息,以便在用户点击之前对收到的消息执行某些操作。但当应用程序处于后台时onMessageReceived未触发!

我搜索了这么多,找不到好办法。

3 个答案:

答案 0 :(得分:6)

要处理来自onMessageReceived()的FCM推送通知,当应用程序在后台运行时,应始终发送仅数据消息

通知消息只能在应用处于前台时处理。当应用程序在后台时,会显示自动生成的通知。当用户点击通知时,他们将返回到应用程序。包含通知和数据有效负载的消息将被视为通知消息。

使用FCM,您可以向客户端发送两种类型的消息:

  • 通知消息,有时被视为“显示消息”。
  • 数据消息,由客户端应用程序处理。

通知消息是一个更轻量级的选项,具有2KB限制和一组预定义的用户可见键。数据消息允许开发人员发送最多4KB的自定义键值对。通知消息可以包含可选的数据有效负载,当用户点击通知时会传递该负载。

通知消息

{
    "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification" : {
      "body" : "great match!",
      "title" : "Portugal vs. Denmark",
      "icon" : "myicon"
    }
  }

当应用在后台时,通知消息将传递到通知托盘。对于前台的应用程序,消息由这些回调处理:

    Android上的
  • onMessageReceived()。数据包中的通知密钥包含通知。

数据讯息

{
   "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
   "data" : {
     "Nick" : "Mario",
     "body" : "great match!",
     "Room" : "PortugalVSDenmark"
   },
 }

在Android上,客户端应用会在onMessageReceived()中收到数据消息,并可以相应地处理键值对。

请注意这些特定于平台的详细信息:

  • 在Android上,可以在用于启动活动的Intent中检索数据有效负载。

包含通知和数据有效负载的邮件

{
    "to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",
    "notification" : {
      "body" : "great match!",
      "title" : "Portugal vs. Denmark",
      "icon" : "myicon"
    },
    "data" : {
      "Nick" : "Mario",
      "Room" : "PortugalVSDenmark"
    }
  }

接收包含通知和数据有效负载的消息时的应用行为取决于应用是在后台还是在前台 - 实际上是否在接收时处于活动状态。

  • 在后台,应用会在通知托盘中收到通知有效负载,并仅在用户点击通知时处理数据有效负载。

  • 在前台时,您的应用会收到一个消息对象,其中包含两个有效负载。

<强>参考

答案 1 :(得分:5)

正如我在评论部分中所提到的,当发送带有notification消息有效负载的消息时,Android系统(通知托盘)将在您的应用处于后台时处理推送通知。

您应该使用仅data的消息有效负载,以便始终由onMessageReceived()处理。

有关详细信息,请参阅Handling Messages docs in Android

答案 2 :(得分:0)

处理后台应用程序中的通知消息

当您的应用在后台时,Android会将通知消息定向到系统托盘。用户点按通知会默认打开应用启动器。

这包括包含通知和数据有效负载的消息(以及从Notifications控制台发送的所有消息)。在这些情况下,通知将传递到设备的系统托盘,并且数据有效负载将在启动器活动的附加内容中传递。