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