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

10

我一直在为我的Android应用程序工作,涉及到GCM。 我注意到几乎每次我都有不同的GCM注册ID与我的设备相关联。 对于我来说,在GCM Registration ID上保持 UNIQUE_KEY 限制安全吗? 并删除所有带有错误 NotRegistered 的ID,并更新所有 canonical_ids 的ID,这样做是否可行?

4个回答

12
一个注册ID与在特定设备上运行的特定Android应用程序绑定。
(来自GCM概述
两个不同的设备始终会有不同的注册ID。即使是同一设备上的不同应用程序也有不同的注册ID。
从功能上讲,在Registration ID上保持UNIQUE_KEY约束是安全的,但由于Registration ID可能很长(高达4096字节,尽管实际上通常要短得多),因此某些数据库可能会阻止您在这样的大列上定义索引或约束。您可能需要使用单向哈希函数将Registration ID映射到较小的值,将该值存储在较小的列中,并在该列上具有约束/索引。
当您收到“NotRegistered”错误时,确实应该从您的DB中删除该注册ID(或者至少标记为状态说明它处于非活动状态,并停止向其发送消息)。但是,如果应用程序将从先前卸载它的设备重新安装在设备上,则应用程序在再次向GCM注册时可能会获得相同的注册ID,因此您的服务器应允许曾经给出“NotRegistered”的注册ID再次变为活动状态。
当您从Google的响应中获得规范化的注册ID时,您应更新旧的注册ID。

谢谢。我已经实现了未注册的删除方法和规范ID的编辑方法。再次澄清一下,Google是否保证ID是唯一的?因为我没有找到任何官方的说法。再次感谢。请务必回复。 - Aaswad Satpute
@AaswadSatpute 我在我的回答中添加了GCM概述的一句话。我认为你可以将这句话解释为唯一性的保证。 - Eran
两个不同的设备总是有不同的注册ID。即使是在同一设备上的不同应用程序也有不同的注册ID。这句话出自哪里?我在GCM概述链接中没有找到它。我问这个问题是因为我在我的应用程序中看到了不同设备的重复注册ID。 - Orr

2

这要看情况。 在某些情况下,我已经证明两个或更多设备可以拥有相同的注册ID。 我有一个启用推送的PhoneGap应用程序,可在多个设备上运行,都是相同的品牌、型号和规格。出于时间考虑,我决定对一个设备进行nandroid备份,然后将其复制到其他设备中。结果是:许多设备具有相同的Reg ID。希望这能帮到你。


0

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

1)但在某个地区,特定的应用程序有特定的发送者ID,根据该发送者ID,有一个唯一的注册ID

请查看粗体线。根据这个注册ID,每个应用程序始终不同,{从http://developer.android.com/google/gcm/gcm.html复制此行}

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


0

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


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