【问题标题】:iOS push notifications behavior when app is deleted and then reinstalled删除应用程序然后重新安装时的 iOS 推送通知行为
【发布时间】:2013-01-29 06:35:50
【问题描述】:

我遇到了一种不寻常的情况,当我的应用被删除然后重新安装时,用户仍会继续收到通知。场景如下:

  • 用户从应用商店安装应用
  • 用户登录我们的应用,我们为他们注册通知
  • 用户从他们的设备中删除应用程序
  • 用户从应用商店重新安装应用
  • 用户即使尚未启动应用程序、登录等也会收到通知

我对 APNs 架构的理解是,一旦您的应用从您的设备中删除,它就会由操作系统本身从 APNs 中注销。在您调用“registerForRemoteNotificationTypes”之前,重新安装应用程序不会重新启用通知 - 因此,如果使用旧令牌将便条发送到设备,APNs 将不会发送它,因为尚未调用上述方法。

这不准确吗?

【问题讨论】:

  • 根据我的经验,重新安装后令牌可能保持不变。

标签: iphone ios push-notification apple-push-notifications


【解决方案1】:

令牌保持不变。设备上的所有应用程序甚至都一样。它仅在您更改操作系统版本时更改。但是,这仍然不能解释您遇到的奇怪行为。

我相信,只有在 Apple 确定该应用程序已从设备上卸载后(这通常发生在您在设备卸载后向特定设备上的应用程序发送通知时),它才会取消注册该应用程序。 如果在卸载应用程序的设备上的应用程序在卸载和重新安装时间之间没有向应用程序发送通知,Apple 不知道该设备卸载了应用程序,因此它仍然注册了 APNS。

反馈服务的行为支持我的理论——如果你卸载应用并调用反馈服务,你将不会得到卸载该应用的设备的设备令牌。只有在您尝试向该设备发送通知后,Apple 才会检测到卸载并在反馈服务中返回该设备令牌。

我应该补充的最后一件事 - 如果卸载的应用程序是设备上注册推送通知的最后一个应用程序,APN 服务将永远不会知道该应用程序已被卸载,因此它仍然会在之后注册 APN正在重新安装。

【讨论】:

  • 是的,经过一些测试,我怀疑是这种情况。我想这建议您每天多次检查反馈服务以删除设备令牌。不确定我是否遵循您在最后一段中的意思。
  • @Vjayus 首先,检查反馈服务并不能解决您的问题。如果您在卸载 App 时不向设备发送通知,APN 服务将不知道它已卸载,并且调用反馈服务不会改变这一点。您不必每天多次致电反馈服务,除非您每天向同一设备发送多条消息。
  • @yunfan 是的,这个答案有点过时了。从 iOS7 开始,每个应用程序在同一设备上都有不同的设备令牌。至于反馈,当我上次测试它时,向卸载应用程序的设备的设备令牌发送两个推送通知就足以从反馈服务获取该设备令牌。请注意,一旦您从反馈服务获得设备令牌,对反馈服务的下一次调用将不会再次返回该设备令牌(除非您在对反馈服务的调用之间向该设备令牌发送更多通知)。
  • @Eran 但在这种情况下,如何从服务器取消注册以前的令牌。在我的情况下,我使用的是与 APNS 通信的第 3 方 XMPP 服务器,并且 APNS 向设备发送消息。但是如果用户在没有注销的情况下卸载应用程序,XMPP 服务器将永远不会知道 APNS-de-register 并且它仍然是阵容。如何处理这种情况。
  • 这个答案现在已经过时了。我已经使用 iOS 11 和 XCode 9.2 进行了测试,每次我在 iPhone 上安装生产版本时,如果用户允许 APNS 发送推送通知,则会为应用程序生成一个新的设备令牌,这意味着使用旧设备将不会收到您的通知令牌。
【解决方案2】:

当您删除应用程序时,操作系统不会从 APNS 中“取消注册”它。您必须向已删除该应用程序的设备发送通知才能“取消注册”它。这可能需要从 APNS 尝试几次,直到它确定应用程序已被删除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-11
    • 1970-01-01
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    相关资源
    最近更新 更多