在处理推送通知时,didRegisterForRemoteNotificationsWithDeviceToken执行注册设备通知和接收我们之后可以使用的deviceToken的工作,但是如果在应用启动并且didRegisterForRemoteNotificationsWithDeviceToken运行时没有互联网会发生什么?
有没有办法强制didRegisterForRemoteNotificationsWithDeviceToken再次运行并接收令牌?
感谢
答案 0 :(得分:2)
您应该阅读本技术说明:TN2265 - Troubleshooting Push Notifications
它说:
安装第一个支持推送功能的应用时,iOS或Mac OS X会尝试 建立与推送服务的持久网络连接 将由系统上所有支持推送的应用程序共享。如果没有 委托回调 application:didRegisterForRemoteNotificationsWithDeviceToken:也不是 application:didFailToRegisterForRemoteNotificationsWithError:is 被叫,这意味着此连接尚未建立。
这不一定是错误条件。系统可能没有 因特网连接超出任何小区的范围 塔或Wi-Fi接入点,或者它可能处于飞行模式。的相反 将此视为错误,您的应用应该继续正常, 仅禁用依赖推送通知的功能。
请注意,网络可用性可能会经常变化。一旦 与推送服务的持久连接成功,其中之一 将调用之前提到的应用程序委托方法。
每次应用程序启动时都应调用registerForRemoteNotificationTypes
,即使没有网络连接也是如此。推送框架处理其余部分。在didRegisterForRemoteNotificationsWithDeviceToken中,您将令牌发送到您的服务器(如果尚未发送或令牌已更改)。
同时检查Local and Push Notification Programming Guide:
通过请求设备令牌并将其传递给提供者 您的应用程序启动时,您可以帮助确保提供程序 拥有设备的当前令牌。如果用户将备份还原到 设备或计算机,而不是为其创建备份的设备或计算机 (例如,用户将数据迁移到新设备或计算机),他 或者她必须至少启动一次申请才能收到 再次通知。如果用户将备份数据还原到新设备 或计算机,或重新安装操作系统,设备令牌 变化。此外,永远不要缓存设备令牌并将其提供给您 供应商;始终在需要时从系统获取令牌。 如果您的申请已经注册,请致电 registerForRemoteNotificationTypes:操作系统中的结果 将设备令牌立即传递给代理人而不会产生任何影响 额外的开销。