如何在我们的数据库中存储设备令牌以进行推送通知?

时间:2017-06-01 00:19:26

标签: android ios postgresql database-design push-notification

我们正在为我们的应用设置推送通知,并且发现如果我们将用户设备令牌存储在用户表中,我们会遇到几个问题。< / p>

  1. 用户只能在一台设备上接收推送通知(可以多次登录)
  2. 我们的用户表:

    | id (user pk) | ... other fields | device_token (for push notifs) |
    

    其他两个解决方案是:

    1. 用户
    2. 中存储JSON数组
    3. 创建第二个名为 user_devicetokens 的表格&amp;链接 user_id &amp; device_token +任何其他可能有用的设置。
    4. 我想知道别人怎么做这个&amp;这些解决方案能否以任何方式得到改善?

2 个答案:

答案 0 :(得分:0)

我认为你应该尝试:在用户表中存储一个JSON数组 这种方式很明确,最适合优化 Json文件如下:

std::getline

答案 1 :(得分:0)

尚不清楚您使用的是哪个数据库,但是如果它是关系数据库(如MySQL),则比JSON数组会违反良好数据库设计的first normal form。在我看来,这是个不起眼的人。

考虑到您说过只向一个设备发送推送通知,在用户表中存储单个设备ID是一个不错的解决方案。但是在我看来,此方法有两个缺点(并不是说这是错误的,而是要考虑的事情):

  • 您确定您的担忧不会改变吗?如果您想推送通知以驱动用户更新其应用程序怎么办?当然,您希望将它们发送到安装了该设备的每个设备。只有一列只能存储一个设备ID,这是行不通的。
  • 或者,如果您决定还要记录他们正在使用的应用程序版本,该怎么办?这将需要为您的app_version用户表再增加至少一列。进一步扩展(date_last_notifieddevice_type?等等),您突然在用户表中添加了很多额外的列,这些列可能与用户实体显然不相关。这将违反关系数据库设计的2nd normal form,因为您的新用户列将不再描述用户实体。

指向用户的设备ID的额外表确实增加了 some 的复杂性,但这就是关系数据库的设计目的。

我的建议是现在给它一个单独的表,但是如果您要在users表上使用一列来构建它,也很好-在重构的时候就做好准备(并且毫不畏惧)。