是否可以区分
- iOS 用户已明确拒绝用户通知权限,并且
- iOS 用户从未收到过权限提示?
我的情况:过去,我会提示用户通知权限,但我自己从未跟踪过请求。后来,我不再尝试注册任何通知设置。现在,我想重新引入用户通知。
在应用程序中发生重大事件后,我的计划是显示某种 UI,解释选择接收用户通知的好处。但是,如果用户已经拒绝,我更愿意显示一个单独的 UI,可以将他们带到 Settings.app。
目前,我正在使用 -[UIApplication currentUserNotificationSettings]
获取当前设置,但对于上述两种情况,这似乎都返回了 UIUserNotificationTypeNone
。
最佳答案
就我个人而言,我还没有找到通过快速查询 iOS SDK 来确定这一点的方法。
但是,当调用 -[UIApplication application:didRegisterUserNotificationSettings:]
时,我已经能够自己跟踪记录。
当 iOS 调用此方法时,您可以确定已提示用户提供用户通知权限,并且(重要的是)已接受或拒绝它。
发生这种情况时存储您可以稍后检查此值以确定之前是否显示过提示。
示例代码:
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings {
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"ABHasPromptedForUserNotification"];
//... your other notification registration handling...
}
- (BOOL)hasPromptedForUserNotification {
return [[NSUserDefaults standardUserDefaults] boolForKey:@"ABHasPromptedForUserNotification"];
}
仅供引用:我发现在 -[UIApplication application:didRegisterUserNotificationSettings:]
中将 "ABHasPromptedForUserNotification"
设置为 true 比调用 -[UIApplication registerForRemoteNotifications]
因为在某些情况下,用户可能会多次看到提示。如果用户将应用设置为后台或接听电话,就会发生这种情况。在这些情况下,提示将被 iOS 隐藏,并在您下次调用 -[UIApplication registerForRemoteNotifications]
时再次显示。在委托(delegate)中设置此设置可避免认为用户之前已收到提示,并且在这些边缘情况下不会再次收到提示。
关于iOS 推送通知设置 - 拒绝权限与从未请求权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28784851/