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

Ken*_*nji 2 android background push-notification firebase firebase-cloud-messaging

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

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

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

Ano*_*p M 6

onMessageReceived()在后台应用程序处理FCM推送通知时,服务器应始终发送仅数据消息.

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

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

  • 通知消息,有时被认为是"显示消息".
  • 数据消息,由客户端应用程序处理.

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

通知消息

{
    "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification" : {
      "body" : "great match!",
      "title" : "Portugal vs. Denmark",
      "icon" : "myicon"
    }
  }
Run Code Online (Sandbox Code Playgroud)

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

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

数据消息

{
   "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
   "data" : {
     "Nick" : "Mario",
     "body" : "great match!",
     "Room" : "PortugalVSDenmark"
   },
 }
Run Code Online (Sandbox Code Playgroud)

在Android上,客户端应用程序接收数据消息,onMessageReceived()并可以相应地处理键值对.

请注意这些进一步的平台特定细节:

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

包含通知和数据有效负载的消息

{
    "to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",
    "notification" : {
      "body" : "great match!",
      "title" : "Portugal vs. Denmark",
      "icon" : "myicon"
    },
    "data" : {
      "Nick" : "Mario",
      "Room" : "PortugalVSDenmark"
    }
  }
Run Code Online (Sandbox Code Playgroud)

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

  • 在后台,应用程序在通知托盘中接收通知有效负载,并仅在用户点击通知时处理数据有效负载.

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

参考


AL.*_*AL. 5

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

您应该使用data-only消息有效负载,以便始终处理它onMessageReceived().

有关详细信息,请参阅Android中处理消息文档.