【发布时间】:2017-03-27 18:11:16
【问题描述】:
在我的应用程序使用过程中,我遇到了各种推送通知问题,这些问题似乎可以通过卸载来解决。我相信我已将其范围缩小到过期的 deviceTokens。
阅读Apple's Push notification documentation,我发现了这个:
注册成功但未收到通知
。 . .
您的应用可能向您的提供商发送了错误的设备令牌。 您的应用应始终通过注册来请求设备令牌 每次启动推送服务。不要存储设备令牌 从您的应用程序中提取并尝试重用它,因为令牌可以更改。您的 然后,提供者应该将相同的令牌传递给推送服务。
他们建议在每次启动应用程序时进行注册。他们还建议推送通知的最佳做法是不要这样做,因为用户不喜欢在看到您的应用程序之前就被访问请求轰炸。因此,仅将注册调用放入应用程序委托并不是最佳选择。但是,我没有看到有关 deviceToken 何时过期或如何查看它是否已过期的更多信息。
我能找到的最接近的东西是this documentationUIApplication 的实例方法isRegisteredForRemoteNotifications:
返回如果应用注册了远程通知,则返回 YES,并且 收到其设备令牌,如果没有注册,则为 NO,已 失败,或被用户拒绝。
我的理解是,这是用来检查用户是否启用推送通知服务的方法。我了解特定通知类型的权限可以全部关闭,如果用户允许推送通知,这仍然可能是真的。但措辞看起来要求应用程序必须使用当前的 deviceToken 进行注册。这是否意味着我可以打电话给
[[UIApplication currentApplication] isRegisteredForRemoteNotifications]
在 appDelegate 中,如果为真,注册远程通知以更新我服务器上的 deviceToken 并确保我的推送通知不会过期?或者,这个函数是否会遇到与我目前相同的情况,即最终 deviceToken 将过期并且此方法将开始返回 false 而不是 true,即使用户已允许推送通知?
tl;dr - Apple 表示 deviceTokens 最终会因推送通知而过期。他们建议在每次应用启动时进行注册。我不想用那个警报轰炸新用户。如何确保只有已接受推送通知的用户才能重新注册?
【问题讨论】:
标签: ios objective-c notifications remote-notifications