Google的GCM服务器将为每个应用程序/设备对发布一个GCM registrationId。因此,如果某个用户在两个设备上都具有您的应用程序,则每个设备将具有自己的registrationId。

我面临的问题是我将那些registrationId存储在具有两列的表上:

+---------+-----------+
|userId   |userGCMId  +
+---------+-----------+


其中userId是我的应用程序上的用户ID,无论他使用什么设备,该ID都是相同的,而userGCMId是Google发出的registrationId。

如果我将userId设置为该表的主键,则如果用户将我的应用安装在第二台设备上,那么我将无法存储该用户的userGCMId,因为两者的userId /主键都相同(因此,第二个设备不会收到我的推送通知)。

我曾考虑过使用两列来制作主键组合,但是GCM registrationId可以大到4k(根据Google工程师的说法),因此理论上它可以长达4,000个字符,这对于主键来说太大了键。

我正在考虑的解决方案:


由于实际上大多数GMC registrationIds为512个字符或更短,所以我认为我可以将该列设置为varchar(512)并将其用作主键的一部分。
另一个选择是将userGCMid列保留为文本,并添加第三列,即id所在的设备,并创建主键(userId,设备)。


过去有没有人解决过这个问题?关于最佳方法有什么想法吗?

提前致谢

最佳答案

我最终使用了选项2,它似乎工作正常。

您可能还想使用设备的MAC地址而不是其型号,因为这将允许用户在相同型号的两个设备上安装该应用程序,并在这两个设备上接收推送通知。

09-04 22:57