iOS:注册推送通知设备

时间:2014-03-14 17:54:00

标签: ios push-notification

我的应用程序在启动时首先使用registerForRemoteNotificationTypes注册推送通知。

我自然希望didRegisterForRemoteNotificationsWithDeviceToken事件或didFailToRegisterForRemoteNotificationsWithError触发。

但是我注意到如果用户的应用程序禁用了推送通知,那么这些都不会被调用。在这种情况下,它是否应该失败并触发didFailToRegisterForRemoteNotificationsWithError

问题是,我的应用程序在继续执行其余的网络任务之前等待推送注册的结果(无论是通过还是失败)。在做其他任何事情之前,我基本上都依赖于结果。

我可以使用另一种方法吗?类似于didFailToRegisterForRemoteNotificationsAsDisabledForApplication(我做了这个)??

修改

Apple Docs对registerForRemoteNotificationTypes

进行了以下说明

发送此消息时,设备会使用Apple Push Service启动注册过程。如果成功,则app委托在应用程序中接收设备令牌:didRegisterForRemoteNotificationsWithDeviceToken:method;如果注册不成功,则通过应用程序通知委托:didFailToRegisterForRemoteNotificationsWithError:方法。如果应用程序委托收到设备令牌,它应该与其提供者连接并将令牌传递给它。

因此,如果用户已对我的应用停用了推送通知,而我的代码正在尝试registerForRemoteNotificationTypes为什么不会触发didFailToRegisterForRemoteNotificationsWithError

1 个答案:

答案 0 :(得分:1)

无代表回调

当安装第一个支持推送的应用程序时,iOS或OS X会尝试与推送服务建立持久的网络连接,该服务将由系统上所有支持推送的应用程序共享。如果既没有委托回调应用程序:didRegisterForRemoteNotificationsWithDeviceToken:也没有应用程序:didFailToRegisterForRemoteNotificationsWithError:被调用,这意味着此连接尚未建立。

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

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

在iOS上,即使设备当前正在使用Wi-Fi进行其他网络活动(如网页浏览或电子邮件),推送通知也会尽可能使用蜂窝数据网络。但是,如果蜂窝数据服务不可用,推送服务将回退到Wi-Fi。

如果您的iOS设备能够使用移动数据网络,请检查它是否具有活动的移动数据计划。例如,在“设置”中关闭Wi-Fi,看看是否仍然可以使用Safari浏览网页。另一方面,如果推送服务使用Wi-Fi,则设备或计算机与Internet之间的任何防火墙都必须允许来自端口5223的TCP流量。

重置iOS上的推送通知权限警报 第一次启用推送的应用程序注册推送通知时,iOS会询问用户是否希望接收该应用程序的通知。一旦用户响应此警报,除非设备已恢复或应用程序已卸载至少一天,否则不会再次显示该警报。

如果您想模拟首次运行的应用,可以将应用程序卸载一天。您可以通过以下步骤实现后者而无需等待一天:

从设备中删除您的应用。 完全关闭设备并重新打开。 转到设置>一般>日期&时间并将日期设定为一天或更长时间。 再次完全关闭设备并重新打开。