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