0

在处理推送通知时,didRegisterForRemoteNotificationsWithDeviceToken 会为通知注册设备并接收我们之后可以使用的 deviceToken,但是如果在应用程序启动时没有互联网并且 didRegisterForRemoteNotificationsWithDeviceToken 运行时会发生什么?

有没有办法强制 didRegisterForRemoteNotificationsWithDeviceToken 再次运行并接收令牌?

谢谢

4

1 回答 1

2

您应该阅读此技术说明:TN2265 - 推送通知故障排除

它说:

当安装第一个支持推送的应用程序时,iOS 或 Mac OS X 会尝试与系统上所有支持推送的应用程序共享的推送服务建立持久的网络连接。如果委托回调 application:didRegisterForRemoteNotificationsWithDeviceToken: 和 application:didFailToRegisterForRemoteNotificationsWithError: 均未调用,则表示此连接尚未建立。

这不一定是错误情况。该系统可能根本没有互联网连接,因为它超出了任何手机信号塔或 Wi-Fi 接入点的范围,或者它可能处于飞行模式。您的应用程序不应将此视为错误,而应正常运行,仅禁用依赖于推送通知的功能。

请记住,网络可用性可能会经常变化。一旦与推送服务的持久连接成功,就会调用前面提到的应用程序委托方法之一。

registerForRemoteNotificationTypes即使没有网络连接,您也应该在应用程序每次启动时调用。推送框架处理其余部分。在 didRegisterForRemoteNotificationsWithDeviceToken 中,您将令牌发送到您的服务器(如果尚未发送或令牌已更改)。

另请查看本地和推送通知编程指南

通过在每次应用程序启动时请求设备令牌并将其传递给提供者,您可以帮助确保提供者拥有设备的当前令牌。如果用户将备份还原到创建备份的设备或计算机之外的设备或计算机(例如,用户将数据迁移到新设备或计算机),他或她必须至少启动一次应用程序才能使其恢复再次收到通知。如果用户将备份数据恢复到新设备或计算机,或重新安装操作系统,则设备令牌会更改。此外,永远不要缓存设备令牌并将其提供给您的提供商;始终在需要时从系统获取令牌。如果您的应用程序之前已注册,请调用 registerForRemoteNotificationTypes:

于 2012-11-30T20:30:02.260 回答