即使后台数据关闭,也想接收GCM通知

3

当应用程序在后台或关闭时,我实现的GCM正常工作,这是应该的。

但是,当设备的“帐户和同步”设置中的“后台数据”被禁用时,我不再接收GCM通知。

我不能100%确定这是否是唯一的原因是“后台数据”设置,但根据我们的实验,似乎“后台数据”是应用程序是否接收GCM的变量。

我的第一个问题:

这是预期行为,还是我们做错了什么?

我的第二个问题:

我听说有些人创建一个新服务来保持后台状态并监听传入的GCM。

我仍在努力弄清楚这背后的逻辑,但这听起来像一个可行的选项吗?

抱歉我的问题不够明确。

我仍在苦苦思索解决此问题的设计方案...

2个回答

3
与Google Play要求启用后台数据一样,我猜GCM也是如此。当您尝试访问GCM并且手机上没有注册帐户时,GCM服务会返回错误ACCOUNT_MISSING。当您检测到此错误时,应将其重定向到ACCOUNT_SETTINGS,以便用户可以添加Google邮件。之后,您需要使用ConnectivityManager函数检测是否已启用后台数据。请注意,该函数在API 14及以上版本中已被弃用,您需要改用getActiveNetworkInfo()函数以查看应用程序是否因为用户禁用了后台数据而显示为断开连接。如果您看到最后一个链接,则可以使用ACTION_BACKGROUND_DATA_SETTING_CHANGED过滤器注册监听器(但在API 16中已被弃用)。
IntentFilter intentFilter = new IntentFilter(); 
intentFilter.addAction(ConnectivityManager.ACTION_BACKGROUND_DATA_SETTING_CHANGED);

谢谢你的回答。我会采纳你的建议,在实现引导用户进入“设置”页面时。但是,我最近发现有些应用程序即使“后台数据”关闭仍能接收到GCM通知,我希望能在这方面找到解决方案。 - ashiina

1
根据Android手册:
背景数据控制应用程序和服务是否可以在您未直接使用它们时传输数据。
它没有明确说明背景数据是GCM,但有很多证据和一堆线程都说:
当禁用背景数据时,GCM消息无法传递。
你可以轻松地测试它,禁用背景数据,转到Play商店的Web版本安装一个应用程序。只有在重新启用后台数据时才会收到它。如果连谷歌都不能实现,那么您也不可能。
如果您仍然认为看到应用程序在禁用背景数据时接收GCM消息,则可能是因为:
1. 在较新的Android手机上,您可以针对每个应用程序启用背景数据,可能已为另一个应用程序启用了此选项。
2. 您看到的可能不是GCM通知,而是当GCM不可用时,应用程序会回退到轮询服务器。
如果您仍然不信,请设置您的手机使用代理服务器(如您机器上的Burp Suite),这样您就可以看到其他应用程序在网络上执行的操作。

谢谢! 一款著名的应用程序实际上可以在“后台数据”关闭时接收通知。当我检查运行的进程时,它有一个额外的进程(可能是服务?),我认为这是通过轮询或某种类似套接字的方案接收通知。 我将按照您的建议使用代理服务器进行调查。 - ashiina
1
一旦你解决了问题,请为公众分享结果。 - Peter Szanto

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