如果应用程序长时间未打开,则无法接收GCM推送通知。

3

我有一些使用gcm通知的应用程序。它们工作得很好,但是存在一个问题:如果我很长时间不打开其中一个应用程序(如2个月或更长时间),它将不再接收通知。

实际上,我也在stackoverflow应用程序中遇到了这种行为。 有人能解释一下原因以及如何避免吗?

2个回答

1
通常,GCM通知的寿命为4周,之后谷歌将停止广播。但在您的情况下,应用程序通常具有唤醒计时器,使它们可以定期唤醒并尝试接收通知,即使没有被打开。如果您在某些应用程序上丢失了通知,则请检查是否有节省电池的应用程序,例如Greenify或其他有效地阻止您的应用程序唤醒通知。如果没有,那么可能是您的ROM具有阻止此类唤醒等功能的省电功能。某些条件也可能触发应用程序的唤醒,例如WiFi连接或已打开数据。

谢谢你的回答,我已经在一些不同的手机上进行了测试,但它们都没有启用省电模式。关于通知的4周生命周期,我的意思是这些应用程序在一段时间内处于非活动状态后将不会收到任何通知,例如如果我现在发送一个通知,它将不会在未来的任何时间接收到它,尽管它连接到互联网并且其他应用程序在接收通知方面没有问题。如果我打开这个示例应用程序一次,它将从那时起接收通知。关于“唤醒计时器”,你能用一些代码解释一下吗? - Akram

1

建议在后台持续运行的服务上这里。请注意,IntentService 在没有任务时会停止。

此外,根据此线程

如果用户从设置中强制停止您的应用程序,则您的代码将永远不会再次运行,直到手动运行您的某个组件,通常是用户手动启动某个活动(自 Android 3.1 起)。因此,如果用户从设置中强制停止您的应用程序,则您将无法在新设备/模拟器上接收 GCM 消息。

正如@Bmbariah所说,Android设备上的Android应用程序不需要运行即可接收消息。只要应用程序设置了正确的广播接收器和权限,系统就会通过Intent广播唤醒Android应用程序,当消息到达时。您可以查看此WakefulBroadcastReceiver服务,它让您管理后台任务的生命周期。

文档只说“唤醒”,这对我来说意味着应用程序正在“休眠”或在后台运行。但是当您强制关闭应用程序时,它没有运行的进程来“唤醒”,因此需要启动它。

希望这可以帮助您!


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