两个不同的设备可以有相同的 GCM 注册 ID 吗?

Posted

技术标签:

【中文标题】两个不同的设备可以有相同的 GCM 注册 ID 吗?【英文标题】:Can two different devices have same GCM Registration ID? 【发布时间】:2013-09-08 16:05:11 【问题描述】:

我一直在为我的 android 应用程序开发 GCM。我注意到几乎每次我的设备都有不同的 GCM 注册 ID。在 GCM 注册 ID 上保留 UNIQUE_KEY 约束对我来说是否安全?并删除所有错误NotRegistered的ID并更新所有canonical_ids的ID?

【问题讨论】:

【参考方案1】:

注册 ID 与在特定设备上运行的特定 Android 应用程序相关联。

(来自GCM Overview)

两个不同的设备总是有不同的注册 ID。即使是同一台设备上的不同应用程序也有不同的注册 ID。

从功能上讲,在注册 ID 上保留 UNIQUE_KEY 约束是安全的,但由于注册 ID 可能很长(最多 4096 字节,但实际上它通常更短),一些数据库可能会阻止您定义索引或对这么大的列的约束。您可能希望使用单向哈希函数将注册 ID 映射到较小的值,将该值存储在较小的列中,并在该列上具有约束/索引。

当您收到NotRegistered 错误时,您确实应该从您的数据库中删除该注册 ID(或至少将其标记为处于非活动状态,并停止向其发送消息)。但是,如果该应用程序将重新安装在之前卸载它的设备上,则该应用程序在重新注册到 GCM 时可能会获得相同的注册 ID,因此您的服务器应该允许注册 ID 在某一时刻提供 NotRegistered 给再次活跃起来。

当您在 Google 的回复中获得规范的注册 ID 时,您应该更新旧的注册 ID。

【讨论】:

谢谢。我已经实现了未注册的删除方法和规范 ID 的编辑方法。再次澄清一下,Google 是否保证 ID 是唯一的?因为我没有找到任何官方消息。再次感谢。请回复。 @AaswadSatpute 我在我的答案中添加了 GCM 概述中的引用。我认为您可以将此引用解释为唯一性的保证。 "两个不同的设备总是有不同的注册 ID。即使是同一设备上的不同应用也有不同的注册 ID。" - 这句话出自哪里?我没有在 GCM 概述的链接上找到它。我之所以问,是因为我在我的应用中看到针对不同设备的注册 ID 重复【参考方案2】:

这取决于。 在某些情况下,我已经证明两个或多个设备可以具有相同的注册 ID。 我有一个支持推送的 phonegap 应用程序,它可以在多个设备上运行,所有设备都相同(品牌、型号、规格......)。出于节省时间的原因,我决定对一台设备进行 nandroid 备份,然后将其复制到其他设备中。结果:许多设备,相同的注册 ID。希望这会有所帮助。

【讨论】:

【参考方案3】:

由于以下地区,我对此也感到困惑,但我没有获得与我创建两个演示相同的注册 ID。

1) 但是一个地区,有特定应用程序的特定发件人 ID,并且根据该发件人 ID,有一个唯一的注册 ID

检查粗线。因为根据此注册 id 对于不同的应用程序总是不同的Copy this line from http://developer.android.com/google/gcm/gcm.html

注册 ID 由 GCM 服务器颁发给 Android 应用程序的 ID,允许其接收消息。一旦 Android 应用程序拥有注册 ID,它就会将其发送到第 3 方应用程序服务器,该服务器使用它来识别已注册以接收给定 Android 应用程序消息的每个设备。 换句话说,注册 ID 与运行在特定设备上的特定 Android 应用程序相关联

【讨论】:

【参考方案4】:

注册 ID 是唯一的,有时会发生的情况是您的应用程序发生了变化。 如果您更改了包名称,或用于发布、调试或发布密钥的任何密钥,那么您的注册 ID 会更改。

【讨论】:

以上是关于两个不同的设备可以有相同的 GCM 注册 ID 吗?的主要内容,如果未能解决你的问题,请参考以下文章

GCM/APNS 如何生成注册 ID

使用相同项目凭据的 GCM 的最大连接数

管理 GCM 注册 ID

GCM 多设备令牌

GCM:在多个设备上使用相同的帐户 - 会发生啥?

gcm 一次可以接收多少个设备推送消息