Demander des autorisations de nouveau après que l'utilisateur refuse les services de localisation?
je trace l'emplacement de l'utilisateur et je demande la permission quand mon premier chargement utilise 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 demander à nouveau? Par exemple, j'ai un commutateur pour la détection automatique de l'emplacement de l'utilisateur alors quand ils l'activent, j'essaie de faire ceci:
@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 à l'utilisateur encore si ils veulent autoriser l'application pour suivre la localisation de l'utilisateur. Est-ce possible?
4 réponses
le système d'exploitation n'invite l'utilisateur qu'une seule fois. S'ils refusent la permission, c'est tout. Ce que vous peut faire est d'orienter 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 pas être trop agressif sur l'écoute pour l'autorisation.
vous n'avez qu'une chance. Pour que l'utilisateur puisse activer les permissions après les avoir refusées, il doit passer par L'application Paramètres. Voir la demande de Permission d'Utiliser les Services de Localisation dans CLLocationManager .
la permission n'apparaît qu'une fois. Nous devons donc rediriger les utilisateurs vers paramètres après cela. Voici le code Swift:
@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 montrer votre propre alerte avec le meilleur message qui peut convaincre votre utilisateur pour permettre de recevoir des notifications push pour votre application. Si l'utilisateur permet, alors seulement vous afficher l'alerte de permission par défaut pour activer la notification push sinon si l'utilisateur rejette, ne pas afficher l'alerte par défaut en fait, vous pouvez enregistrer drapeau correspondant dans votre base de données ou Nsususerdefaults et peut demander à l'utilisateur plus tard encore et encore sur certains événements dans votre application.