确定本地通知是否已被明确拒绝

Determine if local notifications have been explicitly denied

有几个问题接近,但我还没有找到完全正确的问题:

这与远程通知无关,我只是使用本地通知。


我想确定本地通知权限的当前状态,以便显示三个界面之一:

很容易判断 currentUserNotificationSettings() 是否启用了通知,但我不知道如何在 "not enabled because we haven't asked" 和 "not enabled because the user said no" 之间进行判断。

如@shpasta 所述,您必须使用 NSUserDefaults 进行跟踪。使用 NSUserDefaults 非常简单。

调用registerUserNotificationSettings:后,添加这段代码:

NSUserDefaults.standardUserDefaults().setBool(true, forKey: "didRegister")

然后,无论您想检查本地通知的当前状态,都可以使用:

if UIApplication.sharedApplication().currentUserNotificationSettings().types == TYPES_YOU_NEED {
    // Code for enabled notifications
} else if NSUserDefaults.standardUserDefaults().boolForKey("didRegister") {
    // Code for denied notifications
} else if !(NSUserDefaults.standardUserDefaults().boolForKey("didRegister")) {
    // Code for non-enabled notifications, can display dialog
}

上述实现的唯一警告是,如果用户只允许您需要的某些类型,而不是全部。你会在第一个条件下检查它,但我没有添加它,因为我不知道你想要什么特定情况。