确定本地通知是否已被明确拒绝
Determine if local notifications have been explicitly denied
有几个问题接近,但我还没有找到完全正确的问题:
- Determine if local notification is allowed
- Check if Local Notifications are enabled in IOS 8
这与远程通知无关,我只是使用本地通知。
我想确定本地通知权限的当前状态,以便显示三个界面之一:
- 通知已启用
- 通知未启用,这里有一个启用它们的按钮(这将触发标准对话框)
- 通知已被拒绝(因此无法再次显示对话框),这里是 link 到 Settings.app,因此可以在那里启用它们。
很容易判断 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
}
上述实现的唯一警告是,如果用户只允许您需要的某些类型,而不是全部。你会在第一个条件下检查它,但我没有添加它,因为我不知道你想要什么特定情况。
有几个问题接近,但我还没有找到完全正确的问题:
- Determine if local notification is allowed
- Check if Local Notifications are enabled in IOS 8
这与远程通知无关,我只是使用本地通知。
我想确定本地通知权限的当前状态,以便显示三个界面之一:
- 通知已启用
- 通知未启用,这里有一个启用它们的按钮(这将触发标准对话框)
- 通知已被拒绝(因此无法再次显示对话框),这里是 link 到 Settings.app,因此可以在那里启用它们。
很容易判断 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
}
上述实现的唯一警告是,如果用户只允许您需要的某些类型,而不是全部。你会在第一个条件下检查它,但我没有添加它,因为我不知道你想要什么特定情况。