【问题标题】:Findout when Firebase message recieved when app in background找出当应用程序在后台时收到 Firebase 消息的时间
【发布时间】:2017-02-27 07:28:08
【问题描述】:

我知道这个标题有同样的问题,但不幸的是它没有正确回答,它被接受了!!! here

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

我google了很多,找不到好方法。

【问题讨论】:

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


【解决方案1】:

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

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

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

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

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

通知消息

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

当应用程序处于后台时,通知消息会发送到通知托盘。对于前台应用,消息由这些回调处理:

  • onMessageReceived() 在 Android 上。数据包中的通知键包含通知。

数据消息

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

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

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

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

同时包含通知和数据负载的消息

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

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

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

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

参考

【讨论】:

  • 您写了答案,但其中一位用户在您发表评论之前告诉了这一点。所以我对你的答案投了赞成票,谢谢,等他写下接受的答案。
【解决方案2】:

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

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

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

【讨论】:

  • 谢谢。当用户打开通知模式消息时,有什么办法可以通过带边界的通知标题?
  • 没有。您将能够获得的唯一详细信息是 data 有效负载中包含的详细信息。您必须在data 中包含与notification 中相同的数据。
  • 应用关闭时如何处理消息?
【解决方案3】:

在后台应用中处理通知消息

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

这包括同时包含通知和数据负载的消息(以及从通知控制台发送的所有消息)。在这些情况下,通知会传递到设备的系统托盘,而数据负载会在启动器 Activity 的 Intent 的附加部分中传递。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多