如果应用程序未长时间打开,则不会收到GCM推送通知

问题描述:

我有一些使用gcm notification的应用程序。他们工作正常,但这里有一个问题:如果我几乎没有打开其中一个很长时间(如2个月或更长时间),它不会再收到通知。如果应用程序未长时间打开,则不会收到GCM推送通知

实际上,我也遇到过这种与*应用程序的行为。 任何人都可以解释是什么原因以及如何避免它?

通常情况下,gcm notication的使用期限为4周后,它会停止播放它。但就你而言,应用程序通常有唤醒计时器,可以让它们定期唤醒并尝试接收通知,即使没有打开。如果您在某些应用上丢失了通知,请检查您是否有节电应用,例如Greenify或其他可有效阻止您的应用唤醒的应用。如果没有,那么你的ROM可能具有节电功能,可以阻止唤醒功能e.t.c某些情况也可能触发应用程序中的唤醒,如WiFi连接或数据开启。

+0

感谢您的回答,我已经在一些不同的手机上进行了测试,但没有一个人启用了节电功能。此外,关于通知的4周生命周期,我的意思是这些应用在一段时间不活动后将不会收到任何通知,例如,如果我现在发送通知,它将不会收到它,现在也不会收到它未来尽管它是连接到互联网和其他应用程序在接收通知没有问题。如果我打开这个示例应用程序一次,它会收到通知。关于“唤醒计时器”,你可以用一些代码来解释它吗? – Merka

建议here将后台连续运行的服务。请注意,IntentService在停止工作时会自行停止。

此外,根据本thread

如果用户从设置强制停止您的应用程序,你的代码将ň永远永远再跑,直到有手动运行您的组成部分之一,通常是用户手动启动一项活动(截至Android 3.1)。因此,如果用户从设置强制停止您的应用程序,您将不会收到较新设备/仿真器上的GCM消息。

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

文档只会说“唤醒”,这对我来说意味着应用程序正在“睡眠”或在后台。但是当你强制关闭一个应用程序时,它没有运行过程来“醒来”,它需要启动。

希望这会有所帮助!