【问题标题】:How to store device tokens in our database for push notifications?如何在我们的数据库中存储设备令牌以进行推送通知?
【发布时间】:2017-06-01 00:19:26
【问题描述】:

我们正在为我们的应用设置推送通知,并发现如果我们将用户设备令牌存储在 users 表中会遇到一些问题。

  1. 用户将只能在一台设备上接收推送通知(他们可以在多个设备上登录)

我们的用户表:

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

另外两个解决方案是:

  1. users 表中存储 JSON 数组
  2. 创建第二个名为 user_devicetokens 的表并链接 user_iddevice_token + 任何其他可能有用的设置。

我想知道其他人如何做到这一点以及这些解决方案是否可以以任何方式改进?

【问题讨论】:

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


    【解决方案1】:

    目前尚不清楚您使用的是什么数据库,但如果它是关系型(如 MySQL),那么 JSON 数组将违反 first normal form 良好的数据库设计。而且,在我看来,这不是首发。

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

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

    引用用户的设备 ID 的额外表确实增加了一些复杂性,但这正是关系数据库的设计目的。

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

    【讨论】:

      【解决方案2】:

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

      {
      user_id : "user id",
      list_devices_token : [....];
      }
      

      【讨论】:

      • 如果用户卸载了应用,我们应该删除令牌吗?我怎么知道用户卸载或关闭会话。
      猜你喜欢
      • 2016-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-22
      • 1970-01-01
      • 1970-01-01
      • 2010-11-23
      • 1970-01-01
      相关资源
      最近更新 更多