iOS:registerForRemoteNotificationTypes,接下来会发生什么?

时间:2014-03-17 13:54:49

标签: ios apple-push-notifications

每当我的applicationDidBecomeActive事件被触发时,我都会调用方法registerForRemoteNotificationTypes

我知道在此之后有两种可能的结果,要么一切顺利,要么触发事件didRegisterForRemoteNotificationsWithDeviceToken并返回DeviceToken

第二个结果是如果某些内容失败,那么didFailToRegisterForRemoteNotificationsWithError事件会被触发并附加一条错误消息。

我的问题是,如果我调用registerForRemoteNotificationTypes方法会发生什么,但是用户已停用我的应用的推送通知?为什么这不算作失败和火didFailToRegisterForRemoteNotificationsWithError?到底发生了什么?必须有一些事件被解雇了吗?

1 个答案:

答案 0 :(得分:1)

呼叫registerForRemoteNotificationTypes不会转到用户的设备,而是转到APNS(Apple推送通知服务器)服务器并注册应用以进行推送通知。只有它在Apple的服务器上生成设备令牌并将其返回给应用程序。

仅当应用程序无法向APNS注册时才会调用

didFailToRegisterForRemoteNotificationsWithError

只有一种方法可以知道是否有任何用户实际关闭了推送通知(或者关闭了手机)。当APNS尝试并且未能多次向特定设备发送推送通知时,它将其放入池中,该池在反馈服务中提供回应用程序,以便应用程序服务器(不是APNS)可以将其从其数据库中删除。

此链接为您提供有关反馈服务的更多信息:https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/CommunicatingWIthAPS.html#//apple_ref/doc/uid/TP40008194-CH101-SW3

要检查用户是否已停用您应用的任何通知类型,可以使用以下方法:

- (NSRemoteNotificationType)enabledRemoteNotificationTypes

Apple说:返回的位掩码(NSRemoteNotificationType)中的值表示当前为该应用启用的通知类型。当app调用registerForRemoteNotificationTypes:方法向Apple Push Notification Service注册自己时,首先设置这些类型。此后,用户可以在“设置”应用的“通知”首选项中修改这些接受的通知类型。此方法返回初始值或修改值。 iOS不显示或播放通知有效内容中指定的通知类型,这些通知类型不是启用类型之一。例如,应用可能接受图标标记作为通知形式,但可能会拒绝声音和警报消息,即使它们已在通知有效负载中指定。

UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
if (types == UIRemoteNotificationTypeNone) 
{
  //Do your stuff
}

希望这有帮助!