繁体   English   中英

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

[英]How to store device tokens in our database for push notifications?

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

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

我们的用户表:

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

其他两种解决方案是:

  1. 将JSON数组存储在users表中
  2. 创建另一个名为user_devicetokens的表,并链接user_iddevice_token +其他可能有用的设置。

我想知道其他人怎么做以及这些解决方案是否可以通过任何方式进行改进?

我认为您应该尝试:用这种方式将JSON数组存储在users表中是清楚的,最适合优化Json文档,例如:

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

目前尚不清楚您使用的是哪个数据库,但是如果它是关系数据库(例如MySQL),则比JSON数组会违反良好数据库设计的第一种常规形式 在我看来,这是一个入门者。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM