1

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

我面临的问题是我将这些registrationId存储在一个有两列的表上:

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

其中 userId 是我的应用程序中用户的 ID,无论他使用什么设备都是一样的,而 userGCMId 是 Google 发布的registrationId。

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

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

我正在考虑的解决方案:

  1. 由于实际上大多数 GMC registrationId 是 512 个字符或更短,我想我可以将该列设为 varchar(512) 并将其用作主键的一部分。

  2. 另一种选择是将 userGCMid 列保留为文本,并添加第三列,即 id 来自的设备,并制作主键(userId,device)。

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

提前致谢

4

1 回答 1

0

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

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

于 2013-02-15T13:51:34.650 回答