2013-02-14 105 views
1

Google的GCM服务器将针对每个应用程序/设备对发出一个GCM注册ID。因此,如果某个用户在两台设备上安装了应用程序,则每台设备都有自己的注册ID。Android GCM:在数据库中存储注册ID的问题

我现在面临的问题是,我那些registrationIds存储在桌子上有两列:

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

其中userid是用户的ID在我的应用程序,这是一样的,不管设备的他正在使用,userGCMId是Google发布的注册ID。

如果我让userId成为这张表的主键,如果他将我的应用程序安装在第二个设备上,我将无法存储用户的userGCMId,因为userId /主键对于两者都是相同的因此这第二个设备将不会收到我的推送通知)。

我想过使用这两列来制作主键组合,但GCM registrationId可以大到4k(根据谷歌工程师的说法),所以理论上它可能长达4000字符,而且这也太大的主键。

解决方案我正在考虑:

  1. 因为在实践中,大多数GMC registrationIds是512个字符或更短我想我可以让该列一个varchar(512),并把它作为主键的一部分。

  2. 另一种方法是将userGCMid列保留为文本,并添加第三列,id来自的设备,并创建主键(userId,device)。

你们有没有解决过去的这个问题?有关最佳方法的任何想法?

在此先感谢

回答

0

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

您可能还想使用设备的MAC地址而不是其型号,因为这样可以让用户在同一型号的两台设备上安装应用程序,并同时接收推送通知。