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

时间:2013-09-08 16:05:12

标签: android mysql push-notification google-cloud-messaging

我一直在为我的Android应用程序研究GCM。我注意到,几乎每次我的设备都有不同的GCM注册ID。对GCM注册ID保持UNIQUE_KEY限制是否安全?并删除包含错误NotRegistered的所有ID并更新所有canonical_ids的ID?

4 个答案:

答案 0 :(得分:12)

  

注册ID与特定设备上运行的特定Android应用程序绑定。

(来自GCM Overview

两个不同的设备始终具有不同的注册ID。即使同一设备上的不同应用程序也有不同的注册ID。

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

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

如果您在Google的回复中获得规范的注册ID,则应更新旧的注册ID。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

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

检查粗体线。根据此注册ID对于不同的应用程序始终不同{从http://developer.android.com/google/gcm/gcm.html}复制此行

注册ID GCM服务器向Android应用程序发出的ID,允许其接收消息。一旦Android应用程序具有注册ID,它就会将其发送到第三方应用程序服务器,该服务器使用它来识别已注册接收给定Android应用程序的消息的每个设备。 换句话说,注册ID与特定设备上运行的特定Android应用程序绑定

答案 3 :(得分:0)

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