我一直在为我的 Android 应用程序开发 GCM。我注意到几乎每次我的设备都有不同的 GCM 注册 ID。UNIQUE_KEY
对 GCM 注册 ID 进行限制对我来说安全吗?并删除所有出现错误的 IDNotRegistered
并更新所有 ID 是canonical_ids
?
4 回答
注册 ID 与在特定设备上运行的特定 Android 应用程序相关联。
(来自GCM 概述)
两个不同的设备将始终具有不同的注册 ID。即使是同一设备上的不同应用程序也有不同的注册 ID。
从功能上讲,在注册 ID 上保留 UNIQUE_KEY 约束是安全的,但由于注册 ID 可能很长(最多 4096 字节,尽管实际上它通常更短),一些数据库可能会阻止您定义索引或约束一个大柱子。您可能希望使用单向哈希函数将注册 ID 映射到较小的值,将该值存储在较小的列中,并在该列上具有约束/索引。
当您收到NotRegistered
错误时,您确实应该从您的数据库中删除该注册 ID(或者至少将其标记为处于非活动状态,并停止向其发送消息)。但是,如果该应用程序将重新安装在之前卸载它的设备上,则该应用程序在重新注册到 GCM 时可能会获得相同的注册 ID,因此您的服务器应该允许曾经提供NotRegistered
的注册 ID 再次激活.
当您在 Google 的回复中获得规范的注册 ID 时,您应该更新旧的注册 ID。
这取决于。在某些情况下,我已经证明两个或多个设备可以具有相同的注册 ID。我有一个支持推送的 phonegap 应用程序,它可以在多个设备上运行,所有设备都相同(品牌、型号、规格......)。出于节省时间的原因,我决定对一台设备进行 nandroid 备份,然后将其复制到其他设备中。结果:许多设备,相同的注册 ID。希望这可以帮助。
由于以下地区,我对此也感到困惑,但我没有获得与我创建两个演示相同的注册 ID。
1)但是一个区域,有特定应用程序的特定发件人ID,并且根据该发件人ID,有一个唯一的注册ID
检查粗线。根据此注册 ID 对于不同的应用程序总是不同{从http://developer.android.com/google/gcm/gcm.html复制此行}
注册 ID GCM 服务器向 Android 应用程序发出的 ID,允许其接收消息。一旦 Android 应用程序拥有注册 ID,它就会将其发送到第 3 方应用程序服务器,该服务器使用它来识别已注册以接收给定 Android 应用程序消息的每个设备。换言之,注册 ID 与运行在特定设备上的特定 Android 应用程序相关联。
注册 ID 是唯一的,有时会发生的情况是您的应用程序发生了变化。如果您更改了包名称,或者曾经是发布、调试或发布密钥的任何密钥,那么您的注册 ID 就会更改。