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?

10
demandé sur TruMan1 2015-05-01 05:29:53

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.

31
répondu bgilham 2015-05-01 02:39:53

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 .

1
répondu Connor 2015-05-01 02:38:15

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)
    }
}
1
répondu Allen Wang 2018-07-05 15:46:07

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.

0
répondu Khushabu 2018-04-14 16:48:19