Android的GCM设备ID是否改变过?

我正在build立GCM到我的应用程序,我想确保我没有最终的重复的设备ID。

是否有处理设备ID的“最佳做法”? 我的原始,当应用程序加载它调用gcm.register,并张贴ID到我的服务器,如果密钥没有在我的数据库中,我会存储它,然后当我发出通知,循环通过DB和发送消息。

但我想知道ID是否改变,我不想发送多个消息到一个设备。

Solutions Collecting From Web of "Android的GCM设备ID是否改变过?"

是的,ID可以改变。 如果你看一下SDK中的教程,每当应用程序更新到新版本时,它将会去获得一个新的ID,因为以前的ID不能保证工作。

具体看看这个页面

http://developer.android.com/google/gcm/client.html

Check if app was updated; if so, it must clear the registration ID since the existing regID is not guaranteed to work with the new app version. 

当您GCM注册ID可能会改变时,我在这里读到了两个原因:

  1. 每次更新应用程序时都需要重新注册每个设备。
  2. 如果运行的Android版本已经更新,您还需要重新注册设备

PS:下面的旧回答的参考已从Google的页面中删除。

除了@ tyczj在更新应用程序时更改ID的答案之外,Google还说它也可以自动刷新ID。 如果您阅读“在build筑概述”页面上启用GCM标题下的第二个点,则说:

Note that Google may periodically refresh the registration ID, so you should design your Android application with the understanding that the com.google.android.c2dm.intent.REGISTRATION intent may be called multiple times. Your Android application needs to be able to respond accordingly.

只是一个额外的信息来处理这种情况下,你应该有一个Broadcast Listener ,可以处理com.google.android.c2dm.intent.REGISTRATION意图,当它必须刷新注册ID时发送到应用程序。 广播接收器将具有带有意图的onReceive方法。 从意图你可以得到Bundle使用你可以从Google提取新的注册ID。 您可以保存并将其发送到第三方服务器,以replace您之前为该用户注册的ID。

我认为,如果您可以在每次login时validation或更新基于login的应用和身份证,那将会更好。 我有一个类似的应用程序,它正在为我工​​作。