iOS 推送通知设置 - 拒绝权限与从未请求权限

标签 ios push-notification apple-push-notifications ios-permissions

是否可以区分

  1. iOS 用户已明确拒绝用户通知权限,并且
  2. 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/

相关文章:

ios - UISwitch 在 UITableview(iOS 8)中不可见?

ios - 图片库图片网址“assets-library://asset/asset.JPG?id = 1000000007&ext = JPG”为零

ios - 如何循环遍历 SwiftyJSON 中的对象?不仅仅是 swift

ios - 为 iOS 推送通知设置 Amazon EC2 服务器

ios - 是否必须将通知数量计算为应用程序图标上的角标(Badge)值?

python-3.x - 如何使用 Python 向 iOS 和 Android 发送通知

java - 静默推送 iOS 重启后不起作用

ios - 选择一个后从通知中心清除推送通知

ios - 如何找出应用程序中使用的推送通知证书? X代码

ios - iOS 需要什么类型的证书?