【问题标题】:Where/How can I store an iOS device token in the backend?在哪里/如何在后端存储 iOS 设备令牌?
【发布时间】: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


    【解决方案1】:

    我认为您需要稍微更改您的帐户创建流程。您应该要求设备令牌具有唯一性,并且当有人使用现有设备令牌注册时,它应该删除具有相同设备 ID 的任何其他现有记住令牌。这将适用于注册但不登录。

    【讨论】:

      猜你喜欢
      • 2016-03-15
      • 1970-01-01
      • 2019-12-30
      • 2014-10-28
      • 1970-01-01
      • 2012-01-28
      • 2012-04-29
      • 2019-05-06
      • 1970-01-01
      相关资源
      最近更新 更多