即使背景数据已关闭,也希望接收GCM

时间:2013-03-12 13:20:35

标签: android notifications google-cloud-messaging

当应用程序处于后台或关闭时,我的GCM实现正常工作。

但是当“背景数据”(在设备的“帐户和同步”设置中)被禁用时,我不再收到GCM通知。

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

我的第一个问题:

这是预期的行为,还是我们做了一些根本错误的事情?

我的第二个问题:

我从一位程序员那里听说有些人创建了一个新的服务,以便在后台生活并收听传入的GCM。

我仍在试图弄清楚这背后的逻辑,但这听起来像是一个可行的选择吗?

很抱歉我的问题含糊不清。

我仍在努力解决这个问题的解决方案......

2 个答案:

答案 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消息,则可能是因为:

  • 在较新的Android手机中,您可以为每个应用启用背景数据,可能是为另一个应用启用了
  • 您看到的可能不是GCM通知,但是当GCM不可用时,应用程序会回退到轮询服务器

如果您仍然不相信,那么请设置您的电话以在您的计算机上使用像burp suite这样的代理服务器,您将能够看到其他应用在网络上正在做什么。