2014-08-28 62 views
1

我创建了一个使用Android版GCM的Android应用程序。此应用程序适用于多个设备。 但是突然之间,它停止了之前工作过的一台设备上的工作。我只在该设备上遇到问题:它不再收到任何消息。经过一些调试和调整我的代码进行测试后,似乎该设备在GCM上注册时会不断获得新的注册ID(我想当您多次注册设备时,您会收到相同的注册ID?)。我从设备中删除了几次应用程序,然后重新安装了应用程序,并将不同的注册ID保存到我的数据库(而其他设备则保留相同的注册ID)。我总是会收到1个设备的不同注册ID

当我调试邮件传输代码时,我注意到GCM将消息发送给多个注册ID(所有存储在我的数据库中的同一设备),并且每条消息的状态都正常,但我的设备没有收到任何消息。我熟悉一个规范的ID,但是这个规范的ID在每个结果中都是空的。所以我想这不是问题?

这个问题突然出现了。我不知道问题是什么。该应用程序继续在其他设备上工作,我只有一个设备上有这个问题。

任何人都可以帮我解决这个问题吗?

回答

1

首先,你应该知道你从GCM得到的id对你的设备来说并不是恒定的,并且可以改变,所以你不能指望它作为任何东西的主键。

当你从GCM得到一个ID时,你需要保存它(可能在SharedPreferences中),然后每次检查这个ID是否存在,如果是的话就不需要用GCM注册。 然后每次您将发送一条消息到该ID它应该到达。

+0

在“每次检查此ID是否存在”时,您对“每次”的含义是什么?每次应用程序启动?每次安装该应用程序? – pomber 2014-08-28 17:23:48

+0

这是我实施GCM的方式。当SharedPreferences中没有注册ID时,我注册我的设备并将此注册ID保存到SharedPreferences和我的数据库中。当应用程序重新启动时,我检查是否存在注册ID。如果是的话,我不会再次注册。 当我收到'deviceNotRegistred错误'时,我注意到了这个问题。我更改了我的代码进行测试,以便每次打开应用程序时都会注册并获得注册ID。然后我发送了一条消息给该注册ID进行测试。他们都没有到达。并且下一次生成另一个注册ID,也不接收消息。 – 2014-08-28 19:19:41

+0

我的意思是每次启动应用程序时,都需要检查现有的GCM注册ID(如果不存在) - 注册。阅读此链接http://developer.android.com/google/gcm/client.html – Tomer 2014-08-29 08:58:45

0

单个设备的GCM注册ID不相同。 GCM注册ID发生变化,可能会失效,这就是为什么Google建议您在更新应用程序时重新注册的原因,因为您的当前ID无法保证正常工作。

http://developer.android.com/google/gcm/adv.html#reg-state

拨打电话的取得注册ID可能会或可能不会返回你,你之前有同样的注册ID。

相关问题