微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – 如何将唯一的GCM注册标识存储到MySQL中

我正在设置Google Cloud Messaging机制的服务器端,使用 MySQL存储移动应用提供的注册ID. Google可以发出最多4k个注册码,我被迫将其存储在TEXT字段中.所有的好,到目前为止,问题是我必须处理这样的情况:

>用户登录到应用程序
>该应用从google请求注册ID
>应用程序将新的注册ID发送到应用服务器
>服务器存储该注册ID并将其链接到当前登录用户
>该用户注销并且新用户登录
>应用程序向服务器发送与之前相同的注册ID
>服务器必须能够看到注册ID已经在数据库中,但是链接到另一个用户
>服务器取消与先前用户注册ID的链接,并将其链接到新的登录用户

所以问题是我必须确保数据库注册ID的唯一性,但是我不能为该TEXT字段添加一个UNIQUE索引.

我可以想到的可能的解决方案:

>计算注册ID的哈希值,并强制该哈希值是唯一的,但可能会有冲突.
>我可以存储唯一的设备ID和注册ID,并强制该设备ID是唯一的.我看到的问题是,我不知道多久可以是一个Android设备ID,我认为有些情况下它是不可用的.
>我可以在每次接收到新的注册ID时执行搜索,但我认为这最终会导致非常差的性能.

我相信我不是唯一面对这个问题的人,但是我找不到好的解决方案.有什么想法可以解决这个问题吗?

解决方法

>为了存储注册ID本身最好使用VARBINARY(4096)列.如果您使用高效的字符集(例如UTF-8)对注册ID进行编码,它比TEXT更有效. >为了有效的搜索,您还应该有一个额外的索引散列列(BINARY(32)) – 我们使用SHA-256摘要算法从注册ID获取32字节的散列.哈希列不一定是唯一的.碰撞应该是非常罕见的,即使发生这种情况,您的查询将给您少量的共享相同哈希值的注册ID,因此它不会影响测试您的Java代码中的哪一个(如果有的话)实际上匹配您要查找的注册ID. >如果您选择存储唯一的设备ID并根据它进行搜索,我建议您为每个设备分配自己的标识符.该标识符可以是(例如)BIGINT(在java中很长).您可以要求应用程序在首次启动时呼叫服务器以获取唯一的标识符.您可以将其存储在设备的外部存储上,以便卸载应用程序然后重新安装的设备仍然具有相同的标识符.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐