代码之家  ›  专栏  ›  技术社区  ›  Dean Blakely

关闭应用程序后,FirebaseMessagingService不在内存中保留[重复]

  •  1
  • Dean Blakely  · 技术社区  · 7 年前

    我读过 similar question 然而,就这样,我无法从中得到正确的答案。

    我有一个系统,我们可以向大约500台设备发送通知。

    不幸的是,其中许多设备没有收到通知。我发现oppo f1系列手机尤其没有收到通知。

    我观察到,如果应用程序从多任务托盘中停止,则会发生这种情况。我该如何解决?

    更新: 我观察到,当我从任务托盘关闭应用程序时,我的应用程序在应用程序管理器中被强制停止。当我关闭任务托盘中的whatsapp时,它仍然没有被强制停止。WhatsApp是如何处理的?

    0 回复  |  直到 8 年前
        1
  •  47
  •   Community Mohan Dere    9 年前

    更新03/2017-包括我的部分答案 here .

    关于 刷卡关闭/关闭/强制停止 ,这个话题已经讨论了很长一段时间,似乎没有一个明确的答案。在我的一次测试中,我能够 仍然收到消息 (用 data - 只有 消息有效载荷)如果 刷卡关闭 我的应用程序。但是当我 力封闭 从设置菜单,我 无法接收任何消息 . 请注意这是 总是那种行为。

    有些设备在设计时 刷卡关闭 应用程序,它将与 强制停止 他们(看我的回答 here )

    还有一些设备即使应用程序仍然只是简单的 擦掉 ,即使不是 力封闭 ,设备本身正在阻止它接收消息。也有人说,这不可能是因为像whatsapp这样的应用程序能够做到这一点。到目前为止,我了解到这一点的原因是因为设备制造商 怀特莱斯特 大多数著名的应用程序都有可能做到这一点。

    这在任何地方都没有记录,因为(imo),这也是一个依赖于设备的主题,fcm没有 完全控制 结束。


    原始答案:

    因为它是特定于设备的( 正如你在帖子中提到的:oppo f1系列手机 ,当应用程序 从多任务托盘停止 在那个装置里,实际上 谋杀 应用程序,导致与之关联的服务和其他后台进程也被销毁。看到这个 answer 想知道我想说什么。

    如果您在社区中搜索,这里通常建议您使用 START_STICKY 旗帜。不过,我看到之前提到过 FirebaseMessagingService (见此 post ,评论人@arthurthompson):

    这些服务将由google play服务启动,该服务始终在设备上运行。您不必也不应该自己启动/停止这些服务。

    尽管如此,也有可能(再次从评论中得出):

    设备上可能有允许/不允许这样做的设置。


    我建议进一步测试服务是否被设备本身终止,或者查看是否存在阻止通知的设置。

        2
  •  18
  •   danesz    9 年前

    你试过用 stopWithTask 服务类属性?

    <service
        android:name="com.yourapp.YourPushService"
        android:stopWithTask="false" />
    

    如果设置为true,则当 用户删除应用程序拥有的活动中的根任务。这个 默认值为false。

    如果旗子是假的,就有一个 onTaskRemoved 服务类中的回调。

    在这种情况下,您可以检测到“swipe”事件,并且可以实现一个解决方案。

        3
  •  9
  •   thetanuj    9 年前

    我也经历过同样的经历,但在我的情况下,是小米手机,而不是oppo手机。实际上,当你从系统托盘关闭应用程序时,系统会完全杀死应用程序。这意味着你的应用程序将无法通过gcm/fcm接收通知。 WAKE_LOCK 许可也没用。

    这并不意味着手机没有收到通知。它是.它只是不让应用程序显示它。您可以通过从adb发送广播并查看logcat来验证这一点。

    解决这个问题的一个可能方法是 SyncAdapter . 虽然不建议这么做,但我已经看到一些应用程序在使用它。其他可能的解决方案是使用某种始终运行的后台服务。有些人也使用 AlarmManager 因为它几乎永远不会被杀死。我的观点是-你不能依赖GCM/FCM来通知你。

    我们现在来谈谈whatsapp-

    在小米手机中,他们会根据特定标准将应用程序列入白名单或黑名单。如果你下载了一个应用程序并且它在他们的白名单中,他们将允许该应用程序显示通知。如果没有,你已经知道会发生什么。但好的是你可以改变这些设置。查找名为security的应用程序。如果撤销正确的权限,即使whatsapp也将停止显示通知。

        4
  •  4
  •   Pravin Divraniya    9 年前

    我也面临同样的问题,但经过大量调试之后,我意识到,我正在停止接收 Firebase 其中一个活动的on-stop方法中的通知。

    1. 请检查您是否正在应用程序中的任何位置停止这些服务。
    2. 确保您使用的是服务而不是意图服务。
    3. 刷应用程序永远不会停止服务。所以试着调试应用程序的前两点。
        5
  •  2
  •   Community Mohan Dere    9 年前

    找到了答案 here

    无法从通知控制台发送数据消息。

    但也有其他的方式发送通知到设备,他们将捕获内的消息接收!

    您需要使用终端(Mac或Linux)或某些服务(如邮递员)在此链接上发送POST请求: https://fcm.googleapis.com/fcm/send

    下一个身体:

    {
        "to": "/topics/your_topic_here",
       "data": {
           "text":"text",
           "text1":"text1",
           ...
       }
    }
    

    还需要添加2个标题:

    1. authorization-key=您的服务器密钥
    2. 内容类型-应用程序/json

    要获取服务器密钥,可以在firebase控制台中找到它: 您的项目->设置->项目设置->云消息->服务器密钥

    enter image description here

    enter image description here

        6
  •  -3
  •   Community Mohan Dere    9 年前

    当应用程序关闭时,它将关闭服务。必须重新启动服务。见 here