安卓应用程序关闭/被杀时Firebase推送通知问题

7
Firebase推送在一些设备上无法正常工作,当应用程序只有数据负载时关闭。参见此线程:https://github.com/firebase/quickstart-android/issues/41 我知道当应用程序被滑动关闭时,一些OEM会杀死应用程序的所有服务,这直接影响FirebbaseMessagingService,因此onMessageReceived()方法永远不会被调用。我也尝试了高优先级FCM,但遗憾的是没有成功。以下是我遇到问题的手机:OnePlus、Lenovo、华为。
目前,我正在使用OnePlus 5进行测试,当我将电池设置更改为“不优化”时,推送通知开始工作。
我杀死了应用程序并运行了dumpsys package MY-PACKAGE | grep stopped命令,发现应用程序没有停止。它显示stopped=false。这意味着应用程序正在运行。
推送通知的概念是在应用程序关闭时通知用户,但目前我们无法实现。
有什么建议可以解决这个问题吗?

这个话题在SO上已经讨论了相当长的时间。请参阅此帖子--https://dev59.com/KlkS5IYBdhLWcg3wvI20 - AL.
@AL,你说得没错,但问题还没有解决。 - Faisal Shaikh
我在使用运行Android Oreo的OnePlus手机时遇到了同样的问题,如果我们通过覆盖onTaskRemoved()并重新启动服务来重启FirebaseMessagingService,这样会有效吗? - global_warming
@global_warming 请尝试并告诉我。 - Faisal Shaikh
我给你发布了与 github thread 相同的答案,因为我不能只发布链接答案。 - IgniteCoders
1个回答

7

FirebaseMessagingService可以在应用程序关闭/终止时接收PushNotification

但是,这种方式存在一些问题。应用程序的行为在开发和生产之间会发生变化,并且由于设备提供商的原因。

首先要考虑的是,在应用程序处于开发状态时,如果强制关闭应用程序(kill-process),则FirebaseMessagingService将停止触发。但是在生产中不会发生这种情况,因此如果您的APK已签名,则不必担心此问题。源链接

其次,有一些Android手机提供商通过自己管理进程。我们可以看到像华为手机和它们的“受保护应用程序”这样的例子,这使用户决定是否要保护应用程序。只有像WhatApp或Twitter这样的著名应用程序在安装时才受到保护... 源链接

此时,您的FirebaseMessagingService应该被触发,但与系统(操作系统)管理的内存和进程相关的其他问题还有待解决。由于处理PushNotification所花费的时间,您的Service可能会被取消。您可以找到许多处理此问题的方法,但最好的方法是使用Firebase JobDispatcher源链接


这个答案基于一个真实项目中使用 Silect PushNotification 的已发现解决方案(仅使用 payload 中的 data 键以及 topriority 键)。 - IgniteCoders
你的意思是正在测试一个已签名的apk文件,而且这个应用程序已经添加到了受保护的应用程序中? - IgniteCoders

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接