长时间未打开应用,收不到 GCM 推送通知

Posted

技术标签:

【中文标题】长时间未打开应用,收不到 GCM 推送通知【英文标题】:GCM push notification is not received if app was not opened in a long time 【发布时间】:2017-01-01 12:19:41 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

感谢您的回答,我已经在一些不同的手机上进行了测试,但都没有启用省电功能。另外关于通知的 4 周生命周期,我的意思是这些应用程序在一段时间不活动后根本不会收到任何通知,例如,如果我现在发送通知,它现在不会收到,以后也不会收到。未来尽管它已连接到互联网,但其他应用程序在接收通知方面没有问题。如果我打开此示例应用程序一次,它将从那时起收到通知。关于“唤醒定时器”你能用一些代码解释一下吗?【参考方案2】:

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

另外,据此thread:

如果用户从设置中强制停止您的应用,您的代码将永远永远再次运行,直到手动运行您的组件之一,通常是用户手动启动一个活动(从 android 3.1)。因此,如果用户从“设置”中强制停止您的应用,您将不会在较新的设备/模拟器上收到 GCM 消息。

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

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

希望这会有所帮助!

【讨论】:

以上是关于长时间未打开应用,收不到 GCM 推送通知的主要内容,如果未能解决你的问题,请参考以下文章

使用极光/友盟推送,APP进程杀死后为啥收不到推送

如果我强制停止应用程序,GCM 会收到推送通知

使用 GCM 关闭应用程序时在 iOS 中接收推送通知

关闭应用程序时如何避免处理来自 GCM 的推送通知

Android GCM:通知关闭后重复推送

APNS - 连一个推送通知都收不到