【问题标题】:Is it possible to receive FCM push notifications when app is killed?应用程序被杀死时是否可以接收 FCM 推送通知?
【发布时间】:2018-05-04 01:45:49
【问题描述】:

我正在开发一个电子邮件应用程序,我希望用户在收到新电子邮件后立即收到推送通知。为此,我正在使用 FCM。我刚刚通过以下链接尝试使用 FCM 推送通知:https://www.youtube.com/watch?v=XijS62iP1Xo&t=6s 以测试 FCM 提供的功能。但是我面临的问题是,当应用程序处于前台或后台时,设备会收到推送通知,但是当应用程序关闭时(从任务管理器中滑动或清除),它不会收到任何推送通知。我不知道如何通过 FCM 实现这一点?我想像 WhatsApp 和 Facebook 应用一样接收推送通知。

感谢您的各种帮助。提前致谢。

【问题讨论】:

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


【解决方案1】:

推送通知有两种类型:数据消息通知消息

如果您使用数据消息,您将负责处理收到的消息并向用户发出通知(当然,如果需要)。但在这种情况下,您可能会在您的应用关闭时错过通知。

如果您使用通知消息,FCM 会为您处理消息并在应用程序处于后台/关闭 时直接显示通知。

请查看更多here

【讨论】:

  • 当您的应用关闭时,您可能会错过通知!认真的吗??
  • 这是怎么回事,我从来没见过??
  • @Xenolion :检查 8.0 设备,特别是 Xiomi、Oppo、Vivo、Lenovo。它们不会显示通知,但如果您关闭电池优化通知,则会显示。但问题是我们不能去找用户并告诉我们这样做。
  • 是和电池优化有关还是因为没有使用通知渠道?但我认为这不好,他们肯定应该重新考虑设计,或者至少使用 AI 来让用户与应用程序交互。因为他可能会错过聊天应用等应用中的一些通知!
  • 我为我的应用关闭了电池优化,现在当我刷出应用时我会收到通知!
【解决方案2】:

无法在应用设置中被“强制停止”杀死/停止的应用中接收推送通知:

让我引用我在向 Firebase 支持人员提出这个问题时得到的回复:

Android 框架建议已停止的应用程序(即 从设置中杀死/强制停止)不应在没有的情况下启动 明确的用户交互。 FCM 遵循此建议,因此 不会向停止的应用程序传递消息。这里有一些文档 讨论这个话题:

这证实了我在使用一个简单的应用程序对其进行测试时所观察到的情况。


但是当应用程序处于后台时,您应该能够从 FCM 获取推送消息,即使它已从“最近”屏幕中滑出,或者在系统重新启动后。也就是说,除非制造商在您的设备上制作了swipe gesture to work the way "Force stop" doesHow you receive it in the background 取决于推送通知是否包含"notification" 载荷:

  • 如果是这样,只有当用户点击通知时,您才会收到"data",并且它会在Intent extras 中传递到通知操作启动的活动中。
  • 如果没有,您将在onMessageReceived 中收到通知,就像应用在前台时一样。

当您的应用没有被杀死但仍可能收不到推送通知的其他一些情况:

【讨论】:

    【解决方案3】:

    只有当您考虑发送数据有效负载而不是通知并在onMessage() 中处理时才可以

    在这里获取更多信息

    How to handle firebase notification on background as well as foreground?

    【讨论】:

      【解决方案4】:

      如果您的应用程序是 Killed 或在后台,请在启动屏幕中检查 Payload 在我的情况下,它是 MainActivity,所以在 onCreate() 检查 Extras:

      if (getIntent().getExtras() != null) {
          for (String key : getIntent().getExtras().keySet()) {
              Object value = getIntent().getExtras().get(key);
              Log.d("MainActivity: ", "Key: " + key + " Value: " + value);
          }
      }
      

      【讨论】:

        【解决方案5】:

        我测试了不同品牌的手机,得到了初步的结论。

        让我们首先关注 Pixel 手机,因为它保留了几乎相同的框架源代码。如果你构建一个没有前台服务的应用程序,你滑动杀死该应用程序,那么它就无法获得任何 fcm 推送。但是如果你构建一个带有前台服务的应用程序,你滑动杀死该应用程序,那么它就有能力接收 fcm 推送。

        这是因为滑动杀死应用程序不会杀死前台服务,即使所有活动都在后台堆栈之外。只要您的应用程序保持活动状态,它就有能力接收 fcm 推送。

        但是如果你在设置中强行停止应用或者卸载应用,那么应用和前台服务将会被彻底关闭。在这种情况下,应用无法接收到任何 fcm 推送。

        我还测试了小米和三星手机。我们需要授权自启动权限或关闭电池优化。然后他们的应用程序的前台服务不能通过刷卡杀死应用程序来关闭。因此,他们的应用可以接收 fcm 推送。

        【讨论】:

        • 请不要对多个问题粘贴相同的答案。如果问题可以用相同的答案来回答,请对其中一个问题发布一个好的答案,并将其他问题标记为重复。如果它们不是重复的,您应该针对特定问题定制一个答案,而不仅仅是剪切/粘贴。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-12
        • 2017-12-02
        • 1970-01-01
        • 1970-01-01
        • 2018-12-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多