web-dev-qa-db-fra.com

Ouverture des paramètres de notification de l'application dans l'application des paramètres

Dans le cas où un utilisateur peut refuser accidentellement de recevoir des notifications et souhaite activer les notifications plus tard, comment puis-je utiliser une NSURL pour ouvrir l'application IOS Settings) sur la page de notification de mon application où il peut sélectionner Autoriser Notifications?

12
Matt

Pour Swift 3, utilisez UIApplicationOpenSettingsURLString pour accéder aux paramètres de votre application où elle affiche l'état des notifications et les "Données cellulaires"

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

Pour ouvrir la partie des notifications des paramètres, utilisez ceci

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

J'ai trouvé les réponses à cette question trop compliquées avec trop de logique supposée. Voici une implémentation claire et simple Swift 5 si quelqu'un d'autre tombe sur cette question:

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