Google 的 GCM 服务器将为每个应用程序/设备对颁发一个 GCM registrationId。因此,如果某个用户在两台设备上拥有您的应用程序,则每台设备都会有自己的registrationId。
我面临的问题是我将这些registrationId存储在一个有两列的表上:
+---------+-----------+
|userId |userGCMId +
+---------+-----------+
其中 userId 是我的应用程序中用户的 ID,无论他使用什么设备都是一样的,而 userGCMId 是 Google 发布的registrationId。
如果我将 userId 作为该表的主键,如果用户将我的应用程序安装在第二台设备上,我将无法存储用户的 userGCMId,因为两者的 userId/主键相同(因此第二个设备不会收到我的推送通知)。
我考虑过使用两列来组合主键,但是 GCM 的registrationId 可以大到 4k(根据 Google 工程师的说法),所以理论上它可能长达 4,000 个字符,这对于主键来说太大了钥匙。
我正在考虑的解决方案:
由于实际上大多数 GMC registrationId 是 512 个字符或更短,我想我可以将该列设为 varchar(512) 并将其用作主键的一部分。
另一种选择是将 userGCMid 列保留为文本,并添加第三列,即 id 来自的设备,并制作主键(userId,device)。
你们中有人过去解决过这个问题吗?关于最佳方法的任何想法?
提前致谢