【问题标题】:FCM background notification in Oreo and aboveOreo 及以上版本中的 FCM 后台通知
【发布时间】:2020-06-07 13:45:41
【问题描述】:

由于 android 的众多应用限制,包括 Doze Mode 和不同的 OEM 有自己的电池优化实施。

所以我发现 GCM 服务一直在运行,有没有办法让 FCM 自己在后台处理通知?不依赖于我的应用或应用状态?

我只发送我希望 FCM 在没有我的应用的情况下处理的通知消息,因为我的应用可能会被应用杀手强制停止或杀死。

FCM 能否在我的应用不参与的情况下只处理通知?

【问题讨论】:

  • 您希望 FCM 本身对通知做什么?如果您想要的行为只是为了显示通知,那就是“显示消息”,即使应用程序被终止,FCM 也应该能够为您显示它(假设您的通知包含预期的键)。更多信息在这里firebase.google.com/docs/cloud-messaging/concept-options
  • 请解释一下:鉴于您的通知包含预期的键
  • 文档肯定会比我更好地解释它;)请查看Notification messages 部分此处firebase.google.com/docs/cloud-messaging/… 了解有效负载的所有详细信息以及 FCM 如何处理它们
  • 这听起来像是一个好的答案的开始@Marino! :)
  • 好点@FrankvanPuffelen!在下面添加了更多详细信息,欢迎任何更正! :)

标签: android firebase-cloud-messaging


【解决方案1】:

FCM documentations 声明

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

  • 通知消息,有时被认为是“显示消息”。这些由 FCM SDK 自动处理。

  • 数据消息,由客户端应用处理。

在您的情况下,您似乎正在寻找Notification messages。简而言之,当您的应用处于后台时,FCM 会自动显示标准的 Android 通知,其中包含标题和消息 (body)。

要使其正常工作,需要通过 Firebase 发送通知(例如使用 firebase consolecloud functions),并且它需要包含 notification 键,如以下示例所示:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    }
  }
}

对于您的应用程序而言,它主要只需要setup as a Firebase client。如果在任何情况下您想在您的应用程序处于前台时也接收/显示通知,那么您必须创建一个扩展 FirebaseMessagingService 的服务,如 here 所述

奖励:因为看起来您的目标是 android 8+,您可能还想查看Notification channels,因为每个通知都必须分配给一个频道才能显示。默认情况下,你会得到一个基本设置。

【讨论】:

  • 我明白你所说的一切。但是你没有回答一个问题:即使我的应用程序被强制停止,FCM 也能处理我的消息吗?
  • 很高兴听到@Jason!如果这最终足以解决您的问题,您可以将答案设置为已接受,以便人们知道这已解决!否则,您可以在问题中添加更多详细信息,以获得有关任何进一步问题的帮助 :)
  • 如果应用程序被正常终止(关闭),FCM 将处理通知。据我所知,这也是大多数“应用程序杀手”或内存清理程序会做的事情,如果他们强行杀死它会很奇怪,因为任何应用程序在这样做时可能会出现行为不端。如果应用程序被强制终止,我认为 FCM 将无法接收通知,但我在这里可能错了。猜猜最简单的方法是设置它并试一试:) 如果你这样做了,我很想知道它是否成功
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-08
  • 1970-01-01
  • 2022-08-15
  • 2020-02-11
相关资源
最近更新 更多