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?
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))
Pour ouvrir la partie des notifications des paramètres, utilisez ceci
UIApplication.shared.open(URL(string:"App-Prefs:root=NOTIFICATIONS_ID")!, options: [:], completionHandler: nil)
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)
}
}