一个 Android GCM 设备 ID 会改变吗?

11

我正在将GCM集成到我的应用程序中,并希望确保我不会得到重复的设备ID。

在处理设备ID时有没有最佳实践? 我最初的想法是当应用程序加载时调用gcm.register,将ID发送到我的服务器,如果该键不在我的数据库中,那么我将存储它,然后在发送通知时遍历数据库并发送消息。

但我在想,如果ID会改变,我就不想向一个设备发送多条消息。

3个回答

12

是的,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.

6

我在这里阅读到了GCM注册ID可能会更改的两个原因:

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

附注:Google页面中下面旧答案的参考已被删除。

除了@tyczj的答案之外,Google表示它也可以自动刷新ID。如果您阅读架构概述页面下标题为“启用GCM”的第二个要点,它说:

请注意,Google可能会定期刷新注册ID,因此您应该设计您的Android应用程序,了解com.google.android.c2dm.intent.REGISTRATION意图可能会被多次调用。您的Android应用程序需要能够相应地响应。

补充一点信息,为了处理这种情况,您需要有一个广播监听器,它可以处理Google发送给应用程序的com.google.android.c2dm.intent.REGISTRATION意图,当应用程序需要刷新注册ID时。广播接收器将具有带有Intent的onReceive方法。从意图中,您可以使用Bundle获取新的注册ID,然后保存并将其发送到第三方服务器以替换该用户先前注册的ID。


1
我认为你可以把它放进去,如果你收到一个Intent,检查那个特定的Intent是否是它。如果是,那么你可以从Intent中提取新的ID。 - Shobhit Puri
刷新信息似乎已从文档中删除,所以我认为这不再需要(希望如此)。还请参考https://dev59.com/LmQn5IYBdhLWcg3wa2uV。 - Dori
你可能是对的。如果我们不需要它,那就更好了:)。他们应该保持文档的版本。可能会有好处。 - Shobhit Puri

0

我认为如果您可以拥有基于登录的应用程序并在每次登录时进行身份验证或更新,那将会更好。我有一个类似的应用程序,它对我很有效。


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