Android Oreo及以上版本的FCM后台通知

Android Oreo及以上版本的FCM后台通知,android,firebase-cloud-messaging,Android,Firebase Cloud Messaging,由于android的众多应用限制,包括Doze模式和不同的OEM都有自己的电池优化实现 所以我发现GCM服务总是在运行,FCM有没有办法自己在后台处理通知??不依赖于我的应用程序或应用程序状态 我只发送我希望FCM在不使用我的应用程序的情况下处理的通知消息,因为我的应用程序可能会被应用程序杀手强制停止或杀死 FCM能在没有我的应用参与的情况下处理通知吗?声明 使用FCM,您可以向客户端发送两种类型的消息: 通知消息,有时被认为是“显示消息”。这些消息由FCM SDK自动处理 由客户端应用程序

由于android的众多应用限制,包括Doze模式和不同的OEM都有自己的电池优化实现

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

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

FCM能在没有我的应用参与的情况下处理通知吗?

声明

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

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

  • 由客户端应用程序处理的数据消息

在您的情况下,您似乎正在查找
通知消息
。简而言之,当你的应用程序在后台时,FCM将自动显示一个标准的android通知,其中包含标题和消息(
正文

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

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    }
  }
}
至于你的应用程序方面,主要是需要。如果在任何情况下,您希望在应用程序位于前台时也接收/显示通知,则必须创建扩展
FirebaseMessagingService
的服务,如前所述

好处:因为看起来你的目标是安卓8+,你可能还想看看,因为每个通知都必须分配到一个频道才能显示。默认情况下,您将获得一个具有基本设置的设置。

声明

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

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

  • 由客户端应用程序处理的数据消息

在您的情况下,您似乎正在查找
通知消息
。简而言之,当你的应用程序在后台时,FCM将自动显示一个标准的android通知,其中包含标题和消息(
正文

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

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    }
  }
}
至于你的应用程序方面,主要是需要。如果在任何情况下,您希望在应用程序位于前台时也接收/显示通知,则必须创建扩展
FirebaseMessagingService
的服务,如前所述


好处:因为看起来你的目标是安卓8+,你可能还想看看,因为每个通知都必须分配到一个频道才能显示。默认情况下,您将获得一个带有基本设置的通知。

您希望FCM本身对通知做什么?如果您想要的行为仅用于显示通知,则这是一条“显示消息”,即使应用程序被终止,FCM也应该能够为您显示该消息(假设您的通知包含预期的键)。更多信息请在此解释:鉴于您的通知包含预期的密钥,文档肯定会比我更好地解释它;)查看
通知消息
部分,了解有效负载的所有详细信息以及FCM如何处理这些信息(这听起来像是一个好答案的开始@Marino!)很好的观点@FrankvanPuffelen!在下面添加了更多详细信息,欢迎进行任何更正!:)您希望FCM本身如何处理通知?如果您想要的行为仅用于显示通知,则这是一条“显示消息”,即使应用程序被终止,FCM也应该能够为您显示该消息(假设您的通知包含预期的键)。更多信息请在此解释:鉴于您的通知包含预期的密钥,文档肯定会比我更好地解释它;)查看
通知消息
部分,了解有效负载的所有详细信息以及FCM如何处理这些信息(这听起来像是一个好答案的开始@Marino!)很好的观点@FrankvanPuffelen!在下面添加了更多详细信息,欢迎进行任何更正!:)我理解你所说的一切。但你没有回答一个问题:即使我的应用程序被强制停止,FCM还能处理我的消息吗?很高兴听到@Jason!如果这足以解决您的问题,您可以将答案设置为已接受,以便人们知道这已解决!否则,您可以在问题中添加更多详细信息,以获得有关任何其他问题的帮助:)如果应用程序正常(关闭)关闭,FCM将处理通知。据我所知,这也是大多数“应用程序杀手”或内存清理者会做的事情,如果他们强行杀死它,那会很奇怪,因为任何应用程序在这样做时都可能行为不当。我不认为FCM将能够收到通知,如果应用程序已被强制杀死,但我可能是错的。我想最简单的方法就是设置它,然后试一试:)如果你这样做了,我很想知道它是否奏效。我理解你所说的一切。但你没有回答一个问题:即使我的应用程序被强制停止,FCM还能处理我的消息吗?很高兴听到@Jason!如果这足以解决您的问题,您可以将答案设置为已接受,以便人们知道这已解决!否则,您可以在问题中添加更多详细信息,以获得有关任何其他问题的帮助:)如果应用程序正常(关闭)关闭,FCM将处理通知。据我所知,这也是大多数“应用程序杀手”或内存清理者会做的事情,如果他们强行杀死它,那会很奇怪,因为任何应用程序在这样做时都可能行为不当。我不认为FCM将能够收到通知,如果ap