当应用程序处于后台或关闭时,我的GCM实现正常工作。
但是当“背景数据”(在设备的“帐户和同步”设置中)被禁用时,我不再收到GCM通知。
我不是100%确定这是否是“背景数据”设置的唯一原因,但根据我们的实验,似乎“背景数据”是应用程序是否接收GCM的变量。
我的第一个问题:
这是预期的行为,还是我们做了一些根本错误的事情?
我的第二个问题:
我从一位程序员那里听说有些人创建了一个新的服务,以便在后台生活并收听传入的GCM。
我仍在试图弄清楚这背后的逻辑,但这听起来像是一个可行的选择吗?
很抱歉我的问题含糊不清。
我仍在努力解决这个问题的解决方案......
答案 0 :(得分:3)
与Google Play要求启用后台数据 Google Play 的方式相同,我猜GCM会这样做。
当您尝试访问GCM并且手机上没有注册帐户时,GCM服务会返回错误ACCOUNT_MISSING,当您检测到它时,您应该重定向到ACCOUNT_SETTINGS,以便用户可以添加Google邮件。 之后,您必须使用ConnectivityManager功能 getBackgroundDataSetting() 检测是否启用了该背景数据。
请注意,它在> = 14 API上已弃用,您必须使用getActiveNetworkInfo()来查看上拉是否已断开连接,因为用户已禁用后台数据。
其他方式如果您看到最后一个链接正在使用过滤器ACTION_BACKGROUND_DATA_SETTING_CHANGED注册一个侦听器(但在API 16上已弃用)。
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(ConnectivityManager.ACTION_BACKGROUND_DATA_SETTING_CHANGED);
答案 1 :(得分:1)
根据android手册:
后台数据控制应用程序和服务是否可以 当您不直接使用它们时传输数据
没有明确说背景数据是GCM,但是有很多证据和一堆线程都说:
禁用后台数据时不会传递GCM消息
您可以自己轻松测试,禁用后台数据,转到Play商店的网络版安装应用。只有在重新启用后台数据时才会收到它。如果不是谷歌可以做到的话,那么你可能也不会。
如果您仍然认为在禁用后台数据时看到应用程序接收GCM消息,则可能是因为:
如果您仍然不相信,那么请设置您的电话以在您的计算机上使用像burp suite这样的代理服务器,您将能够看到其他应用在网络上正在做什么。