我有一个帖子/评论风格的应用程序。
模型(后端Rails JSON API)
我有用户模型(存储ID,用户名,电子邮件等)
我有一个RememberToken模型(存储用户的消化代币以记住他们的'会话')
期望的结果
用户Alice用她的iPhone注册我的应用程序。在注册期间,她的device_token也会被发送,并存储在后端。
用户Alice创建一个新帖子,并以post_id 186存储。
用户Bob阅读Alice的帖子和评论。 POST被发送到/ comments URL,并且在保存评论期间......它还检查帖子的所有者(post_id 186)。它看到帖子所有者是用户Alice,查找她的device_token,并通过APNS(Apple推送通知服务器)向用户Alice的device_token发送推送通知。
用户Alice的iPhone收到用户Bob已回复其帖子的推送通知。
问题
设备令牌应该存储在哪里?
1)如果它存储在用户模型中,则当Alice登录到其他设备时,可能会覆盖设备令牌。例如,Alice在她的iPhone上登录应用程序,她的device_token ABC存储在users表中。然后Alice登录她的iPod Touch,其device_token(XYZ)存储在users表中,覆盖ABC。现在她只会收到推送通知给她的iPod Touch。
2)如果它存储在与会话相关联的RememberToken模型上,则会出现过时的remember_tokens问题。例如。用户Bob在他的iPod Touch上下载应用程序(使用device_token 123)并注册。 Bob获得一个新的iPhone(带有设备令牌456),在其上下载应用程序,然后登录。现在有2个RememberToken条目,每个令牌/会话信息,以及与每个令牌/会话信息绑定的device_token。 [注销将删除完美的Remember Token行]。然而,Bob意识到他不再需要他的iPod Touch,删除应用程序而不退出(意味着仍然存在于数据库中的RememberToken和123的DeviceToken),并将其交给他的小妹妹Carol。 Carol下载应用程序并注册(创建一个RememberToken和123的DeviceToken)。所以我们现在有两个123的DeviceToken条目。用户Bob发布帖子,用户Dave评论,后端查找所有User Bob的设备令牌。它找到123和456.它向两者发送推送通知。因此Bob正确地在他的iPhone上收到通知,但Carol错误地收到了她的iPod上的通知并不适用于她。
答案 0 :(得分:1)
我认为您需要稍微更改帐户创建流程。您应该要求设备令牌具有唯一性,当有人注册现有设备令牌时,它应该删除具有相同设备ID的任何其他现有记忆令牌。这适用于注册但不登录。