如何在iOS中打开和关闭通知?

时间:2017-07-28 15:13:05

标签: ios swift unusernotificationcenter usernotifications

我正在尝试在iOS 11应用中实现设置屏幕,我需要一个用于控制用户通知的UISwitch。当设置为off时,我想放弃通知权限,当设置为on时,我想请求权限(标准对话框要求用户发送她的通知权限)。

要求获得许可,我发现了以下代码:

UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound]) { (granted, error) in
    // Enable or disable features based on authorization.
}

但是,如果我在系统设置中关闭应用程序的通知,则此代码不会弹出带有请求的对话框,而只是在granted中返回false。

我无法找到有关如何放弃权限的任何内容。

有关如何解决问题的任何提示?它是否可能,或Apple是否认为此任务应仅留给系统设置?

2 个答案:

答案 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)
        }
    }