每当我的applicationDidBecomeActive
事件被触发时,我都会调用方法registerForRemoteNotificationTypes
。
我知道在此之后有两种可能的结果,要么一切顺利,要么触发事件didRegisterForRemoteNotificationsWithDeviceToken
并返回DeviceToken
。
第二个结果是如果某些内容失败,那么didFailToRegisterForRemoteNotificationsWithError
事件会被触发并附加一条错误消息。
我的问题是,如果我调用registerForRemoteNotificationTypes
方法会发生什么,但是用户已停用我的应用的推送通知?为什么这不算作失败和火didFailToRegisterForRemoteNotificationsWithError
?到底发生了什么?必须有一些事件被解雇了吗?
答案 0 :(得分:1)
呼叫registerForRemoteNotificationTypes
不会转到用户的设备,而是转到APNS(Apple推送通知服务器)服务器并注册应用以进行推送通知。只有它在Apple的服务器上生成设备令牌并将其返回给应用程序。
didFailToRegisterForRemoteNotificationsWithError
。
只有一种方法可以知道是否有任何用户实际关闭了推送通知(或者关闭了手机)。当APNS尝试并且未能多次向特定设备发送推送通知时,它将其放入池中,该池在反馈服务中提供回应用程序,以便应用程序服务器(不是APNS)可以将其从其数据库中删除。
要检查用户是否已停用您应用的任何通知类型,可以使用以下方法:
- (NSRemoteNotificationType)enabledRemoteNotificationTypes
Apple说:返回的位掩码(NSRemoteNotificationType)中的值表示当前为该应用启用的通知类型。当app调用registerForRemoteNotificationTypes:方法向Apple Push Notification Service注册自己时,首先设置这些类型。此后,用户可以在“设置”应用的“通知”首选项中修改这些接受的通知类型。此方法返回初始值或修改值。 iOS不显示或播放通知有效内容中指定的通知类型,这些通知类型不是启用类型之一。例如,应用可能接受图标标记作为通知形式,但可能会拒绝声音和警报消息,即使它们已在通知有效负载中指定。
UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
if (types == UIRemoteNotificationTypeNone)
{
//Do your stuff
}
希望这有帮助!