我正在尝试在iOS 11应用中实现设置屏幕,我需要一个用于控制用户通知的UISwitch。当设置为off时,我想放弃通知权限,当设置为on时,我想请求权限(标准对话框要求用户发送她的通知权限)。
要求获得许可,我发现了以下代码:
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound]) { (granted, error) in
// Enable or disable features based on authorization.
}
但是,如果我在系统设置中关闭应用程序的通知,则此代码不会弹出带有请求的对话框,而只是在granted
中返回false。
我无法找到有关如何放弃权限的任何内容。
有关如何解决问题的任何提示?它是否可能,或Apple是否认为此任务应仅留给系统设置?
答案 0 :(得分:4)
在iOS中打开/关闭权限推送通知仅出现一次。 所以为了达到这个目的,你需要做一些像你一样的调整 首先检查您的通知是否已启用。
func pushEnabledAtOSLevel() -> Bool {
guard let currentSettings = UIApplication.shared.currentUserNotificationSettings?.types else { return false }
return currentSettings.rawValue != 0
}
之后,您可以使用TurnON / Off按钮创建自定义弹出窗口 并导航到系统设置页面,用户可以在该页面中启用该选项 相应
if let appSettings = NSURL(string: UIApplicationOpenSettingsURLString) {
UIApplication.shared.openURL(appSettings as URL)
}
答案 1 :(得分:0)
对于iOS 10.0及更高版本
UNUserNotificationCenter.current().getNotificationSettings { (settings) in
if settings.authorizationStatus == .authorized {
// Notifications are allowed
}
else {
// Either denied or notDetermined
let alertController = UIAlertController(title: nil, message: "Do you want to change notifications settings?", preferredStyle: .alert)
let action1 = UIAlertAction(title: "Settings", style: .default) { (action:UIAlertAction) in
if let appSettings = NSURL(string: UIApplication.openSettingsURLString) {
UIApplication.shared.open(appSettings as URL, options: [:], completionHandler: nil)
}
}
let action2 = UIAlertAction(title: "Cancel", style: .cancel) { (action:UIAlertAction) in
}
alertController.addAction(action1)
alertController.addAction(action2)
self.present(alertController, animated: true, completion: nil)
}
}