两个不同的设备可以有相同的 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 吗?的主要内容,如果未能解决你的问题,请参考以下文章