如果用户拒绝启用推送通知,我们将通过 didFailToRegisterForRemoteNotificationsWithError 收到错误。有谁知道在这种情况下 NSError 对象中的代码是什么(以区别于,比如说,没有可用的连接)?
我不认为你最初的陈述(总是)成立。如果应用程序使用有效的配置文件正确签名,则无论用户在“设置”应用程序中选择“通知”,调用
registerForRemoteNotificationTypes:
都将导致 application:didRegisterForRemoteNotificationsWithDeviceToken:
。根据我的经验,我唯一一次看到 application:didFailToRegisterForRemoteNotificationsWithError:
被调用是因为应用程序签名不正确。有问题的错误提到“没有找到适用于应用程序的有效 aps 环境权利”。
虽然这个问题很旧,并且同意@Jerred的大部分答案,但我还是想发布更新的答案。
帖子中主要问题的答案是NO。
application:didFailToRegisterForRemoteNotificationsWithError: 当应用程序使用不正确的配置文件进行签名时,会被调用。
还有,
application:didRegisterForRemoteNotificationsWithDeviceToken:仅当用户在通知中心(在“设置”应用程序中)为您的应用程序启用徽章、横幅/警报或声音设置中至少一项时才会被调用。
在某些情况下,iOS 不会调用这两个方法中的任何一个
根据我的经验,
didFailToRegisterForRemoteNotificationsWithError:
方法是为更严重的情况保留的,这会阻止应用程序向用户显示通知权限请求对话框。我所知道的情况包括应用程序在不支持推送通知的设备上运行(例如模拟器),或者应用程序二进制文件中 aps 环境权利中的一些配置错误。