web-dev-qa-db-ja.com

設定アプリでアプリの通知設定を開く

ユーザーが誤って通知の受信を拒否し、後で通知を有効にしたい場合、NSURLを使用してIOS設定アプリを開き、アプリの通知ページで[許可]を選択できます)通知?

12
Matt

Swift 3の場合、UIApplicationOpenSettingsURLStringを使用してアプリの設定に移動し、通知ステータスと「セルラーデータ」を表示します

let settingsButton = NSLocalizedString("Settings", comment: "")
let cancelButton = NSLocalizedString("Cancel", comment: "")
let message = NSLocalizedString("Your need to give a permission from notification settings.", comment: "")
let goToSettingsAlert = UIAlertController(title: "", message: message, preferredStyle: UIAlertControllerStyle.alert)

goToSettingsAlert.addAction(UIAlertAction(title: settingsButton, style: .destructive, handler: { (action: UIAlertAction) in
    DispatchQueue.main.async {
        guard let settingsUrl = URL(string: UIApplicationOpenSettingsURLString) else {
            return
        }

        if UIApplication.shared.canOpenURL(settingsUrl) {
            if #available(iOS 10.0, *) {
                UIApplication.shared.open(settingsUrl, completionHandler: { (success) in
                    print("Settings opened: \(success)") // Prints true
                })
            } else {
                UIApplication.shared.openURL(settingsUrl as URL)
            } 
        }
    }
}))

logoutUserAlert.addAction(UIAlertAction(title: cancelButton, style: .cancel, handler: nil))
19
CodeOverRide

設定の一部の通知を開くには、これを使用します

UIApplication.shared.open(URL(string:"App-Prefs:root=NOTIFICATIONS_ID")!, options: [:], completionHandler: nil)
1
ttorbik

この質問に対する答えは、想定されるロジックが多すぎて扱いにくいものであることがわかりました。ここに、単純で単純なSwift 5の実装があります。他の誰かがこの質問に遭遇した場合、

if let bundleIdentifier = Bundle.main.bundleIdentifier, let appSettings = URL(string: UIApplication.openSettingsURLString + bundleIdentifier) {
    if UIApplication.shared.canOpenURL(appSettings) {
        UIApplication.shared.open(appSettings)
    }
}
0
Gligor