【发布时间】:2015-03-29 20:16:04
【问题描述】:
我有一个发布/评论风格的应用程序。
模型(后端 Rails JSON API)
我有一个用户模型(商店 ID、用户名、电子邮件等)
我有一个 RememberToken 模型(存储用户消化的令牌以记住他们的“会话”)
期望的结果
用户 Alice 用她的 iPhone 注册了我的应用程序。在注册过程中,她的 device_token 也会被发送,并存储在后端。
用户 Alice 创建一个新 Post,并使用 post_id 186 存储。
用户 Bob 阅读 Alice 的帖子和 cmets。一个 POST 被发送到 /cmets URL,并且在保存评论期间......它还检查帖子的所有者(post_id 186)。它看到 Post Owner 是 User Alice,查找她的 device_token,并通过 APNS(Apple Push Notification Sever)向 User Alice 的 device_token 发送 Push Notification。
用户 Alice 的 iPhone 收到用户 Bob 已回复她的帖子的推送通知。
问题
设备令牌应该存储在哪里?
1) 如果它存储在 User 模型上,那么当 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。 [注销将删除完美的记住令牌行]。然而,Bob 意识到他不再需要他的 iPod Touch,在没有注销的情况下删除了应用程序(意味着 123 的 RememberToken 和 DeviceToken 仍然存在于 DB 中),并将其交给了他的小妹妹 Carol。 Carol 下载了应用程序并注册(创建了 123 的 RememberToken 和 DeviceToken)。所以我们现在有两个 123 的 DeviceToken 条目。用户 Bob 发布了一个帖子,用户 Dave cmets,后端查找用户 Bob 的所有设备令牌。它找到 123 和 456。它向两者发送推送通知。所以 Bob 正确地在他的 iPhone 上收到了一条通知,但 Carol 在她的 iPod 上错误地收到了一条不适用于她的通知。
【问题讨论】:
标签: ruby-on-rails cocoa-touch apple-push-notifications