【问题标题】:iOS Push Notifications - device token managementiOS 推送通知 - 设备令牌管理
【发布时间】:2017-07-12 17:07:19
【问题描述】:

我正在向我的应用程序添加推送通知,并且我知道我需要将设备令牌存储在我的数据库中,以便我可以将推送通知发送到特定设备(或所有设备)。

我的问题是维护这些设备令牌的最佳做法是什么?我可以存储收到的所有设备令牌,但如何检测和删除不再有效的旧设备令牌?我假设如果用户删除应用程序,或者如果用户关闭应用程序的通知,设备令牌可能会变得无效。

更新 - 进行用户身份验证并将其链接到设备令牌(并基于登录/注销进行更新)是有意义的。但是如果用户删除了应用程序呢?没有注销,那如何移除设备令牌?

【问题讨论】:

  • 如果您的应用程序使用用户身份验证,那么您在身份验证时存储在服务器上,当用户注销时,您代表任何唯一 ID 从服务器中删除。如果不是,请说明您的应用功能
  • 这对于注销是有意义的,但是如果用户删除了应用程序怎么办?那么我们如何移除设备令牌呢?
  • 您的应用服务器不会知道某个特定应用是否已被强制删除,并且您的服务器仍然会说令牌 T1 映射到已删除的应用/设备,比如 A1。现在,另一个有效用户 (A2) 可能会使用相同的设备令牌 T1。您只需确保在任何时间点一个设备令牌(即 T1)仅映射到一个设备(提供最新 T1 的设备)。此时应删除所有其他较旧的设备令牌映射,即 A1-T1,否则 A2 可能会收到 A1 的通知。
  • @Ayush 是对的

标签: ios swift apple-push-notifications


【解决方案1】:

不再使用 Apple 反馈服务。相反,我们必须从苹果推送通知服务中寻找 401 的响应状态来确定令牌无效。

在开发环境中对此进行测试。使用下面的技巧(它说它用于反馈服务,但也应该使用来自 APNS 的新状态代码)

How to test Apple Push Notifications Feedback Service?

【讨论】:

    【解决方案2】:

    使用 APNS 反馈服务,查找属于已卸载应用的设备令牌。 见this apple documentation

    如果您将 Amazon SNS 之类的东西用于推送通知,您可以使用他们的 API 来获取禁用的 arn 列表并从您的数据库中删除相应的设备令牌。

    【讨论】:

    • 我认为增强型 APNS (http/2) 接口没有任何反馈服务。
    • @Ayush,在这种情况下,如果使用 HTTP APNS 接口查找不再活动的令牌,您仍然可以使用 http 状态码。 HTTP 状态代码 410 表示令牌不再处于活动状态。见this apple documentation
    • 你确定 - 如果用户强行删除应用程序,Apple 会拒绝说 410 并删除设备令牌吗?我见过一个案例,其中应用程序被强制删除并重新安装,相同的设备令牌再次分配给应用程序。我认为这些通知将被传递到 iOS 并且 iOS 将在应用程序被强制删除的情况下删除它。苹果云将如何检测该应用已被删除?我认为当Apple尝试向已删除该应用程序的客户端发送通知时,它可能会检测到并使令牌无效。如果你能确认是这样吗?
    • 反馈服务位于旧版部分下。还在用吗?
    【解决方案3】:

    创建一个网络服务,将用户的设备令牌存储在特定用户的数据库中。仅当用户已登录或您已根据您的要求识别用户时才调用此 Web 服务。您需要在设备成功注册通知时调用此 Web 服务,如果用户身份不明(即未登录),则在登录 api 后调用此服务。

    如果您有根据您的流程和替换特定用户的设备令牌,请在登录和注册 API 时传递设备令牌。

    当用户注销时只需注销通知

    【讨论】:

      【解决方案4】:

      正如你在上一次声明中所说的那样我假设如果用户删除应用程序,或者如果用户关闭应用程序的通知,设备令牌可能会变得无效。

      一般情况是当用户再次登录应用程序或注册应用程序时,您需要再次从用户那里获取设备令牌并将其存储在您的数据库中

      假设我有一个应用程序,并且我只安装那个应用程序,每当我当时再次登录应用程序时,api 必须具有deviceID 的参数,所以每当 api 调用发生时登录时新的设备令牌只需替换旧的即可放入您的数据库中。使用该应用程序的新注册也会发生同样的事情。

      希望以上描述对您有所帮助。 :)

      【讨论】:

        【解决方案5】:

        您的应用服务器将不知道某个特定应用是否已被强制删除,并且您的服务器仍然会说令牌 T1 映射到已删除的应用/设备(例如 A1)。现在,另一个有效用户 (A2) 可能会使用相同的设备令牌 T1。您只需确保在任何时间点一个设备令牌(即 T1)仅映射到一个设备(提供最新 T1 的设备)。此时应删除所有其他较旧的设备令牌映射,即 A1-T1,否则 A2 可能会收到 A1 的通知。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-23
          • 1970-01-01
          • 1970-01-01
          • 2015-08-29
          • 2018-08-07
          • 2011-12-30
          相关资源
          最近更新 更多