Je surveille l'emplacement de l'utilisateur et demande la permission lorsque mon chargement se charge pour la première fois en utilisant ceci:
locationManager.requestAlwaysAuthorization()
locationManager.startUpdatingLocation()
Si l'utilisateur nie, mais change d'avis plus tard en activant l'option de configuration dans mon application, comment puis-je demander à nouveau? Par exemple, j'ai un commutateur pour détecter automatiquement l'emplacement de l'utilisateur, alors quand ils l'activent, j'essaie de le faire:
@IBAction func gpsChanged(sender: UISwitch) {
// Request permission for auto geolocation if applicable
if sender.on {
locationManager.requestAlwaysAuthorization()
locationManager.startUpdatingLocation()
}
}
Mais ce code ne semble rien faire. J'espérais qu'il demanderait à nouveau à l'utilisateur s'il souhaite autoriser l'application à suivre la position de l'utilisateur. Est-ce possible?
Le système d'exploitation ne demandera à l'utilisateur qu'une seule fois. S'ils refusent la permission, c'est tout. Ce que vous pouvez faites, c'est diriger l'utilisateur vers les paramètres de votre application en passant UIApplicationOpenSettingsURLString
à UIApplication
's openURL:
méthode. De là, ils peuvent réactiver les services de localisation s'ils le souhaitent. Cela dit, vous ne devriez probablement pas être trop agressif pour les mettre sur écoute pour la permission.
La fenêtre contextuelle d'autorisation ne s'affiche qu'une seule fois. Nous devons donc rediriger les utilisateurs vers Paramètres après cela. Voici le code dans Swift:
import CoreLocation
@IBAction func userDidClickButton(_ sender: Any) {
// initialise a pop up for using later
let alertController = UIAlertController(title: "TITLE", message: "Please go to Settings and turn on the permissions", preferredStyle: .alert)
let settingsAction = UIAlertAction(title: "Settings", style: .default) { (_) -> Void in
guard let settingsUrl = URL(string: UIApplicationOpenSettingsURLString) else {
return
}
if UIApplication.shared.canOpenURL(settingsUrl) {
UIApplication.shared.open(settingsUrl, completionHandler: { (success) in })
}
}
let cancelAction = UIAlertAction(title: "Cancel", style: .default, handler: nil)
alertController.addAction(cancelAction)
alertController.addAction(settingsAction)
// check the permission status
switch(CLLocationManager.authorizationStatus()) {
case .authorizedAlways, .authorizedWhenInUse:
print("Authorize.")
// get the user location
case .notDetermined, .restricted, .denied:
// redirect the users to settings
self.present(alertController, animated: true, completion: nil)
}
}
Vous pouvez avoir une solution alternative !! Vous pouvez afficher votre propre alerte avec le meilleur message qui peut convaincre votre utilisateur d'autoriser la réception de notifications Push pour votre application. Si l'utilisateur le permet, vous ne montrez que l'alerte d'autorisation par défaut pour activer la notification Push.Si l'utilisateur ne le permet pas, n'affichez pas l'alerte par défaut en fait, vous pouvez enregistrer l'indicateur correspondant dans votre base de données ou NSUserDefaults et pouvez demander à l'utilisateur plus tard encore et encore sur certains événements dans votre application.
J'ai créé la bibliothèque qui inclut le gestionnaire d'autorisations pour la notification qui gère l'alerte d'autorisation même après que l'utilisateur a refusé l'autorisation.
https://github.com/CrazyPro007/PermissionManager/tree/master/PermissionManager/PermissionManager
Tu n'as qu'une chance. Pour que l'utilisateur active les autorisations après les avoir refusées, il doit passer par l'application Paramètres. Voir Demande d'autorisation d'utilisation des services de localisation dans CLLocationManager .