2017-02-10 1 views
0

Je travaille sur un bouton qui enverra l'utilisateur à l'application de cartes s'il accorde la permission de localisation de l'application. Le problème est que si je clique une fois sur le bouton et que je refuse l'autorisation de localisation, la prochaine fois que je clique sur le bouton, l'application ne demande plus la permission. On dirait que l'utilisateur n'a "qu'une seule chance d'accorder des permissions sur les cartes".Essayer d'obtenir la permission de localisation dans iOS Swift

Voici le code que j'utilise pour créer par programme le bouton avec les fonctions de rappel. Il y a aussi une capture d'écran des "Propriétés de la cible iOS personnalisée" où j'ai inclus la description de l'utilisation de la zone de confidentialité pour pouvoir utiliser l'emplacement des utilisateurs.

directionsButton.addTarget(self, action: #selector(getDirection), for: UIControlEvents.touchUpInside) 


func getDirection(sender: UIButton!) { 
    print("1") 
    if(CLLocationManager.authorizationStatus() == CLAuthorizationStatus.authorizedWhenInUse || 
     CLLocationManager.authorizationStatus() == CLAuthorizationStatus.authorizedAlways){ 
     let url = URL(string: "http://maps.apple.com/?daddr=60.79281049999999,10.688968899999963") 
     if (UIApplication.shared.canOpenURL(url!)) { 
      UIApplication.shared.openURL(url!) 
     } else { 
      print("Error") 
     } 
     print("2") 
    } else{ 
     LocationManager.requestWhenInUseAuthorization() 
     print("3") 
    } 
    print("4") 
} 

/* 
- Callback function for changes in location permissions 
*/ 
func locationManager(_ manager: CLLocationManager, 
didChangeAuthorization status: CLAuthorizationStatus){ 
    print("change in auth") 
    if(CLLocationManager.authorizationStatus() == CLAuthorizationStatus.authorizedWhenInUse){ 
     let url = URL(string: "http://maps.apple.com/?daddr=60.79281049999999,10.688968899999963") 
     if (UIApplication.shared.canOpenURL(url!)) { 
      UIApplication.shared.openURL(url!) 
     } else { 
      print("Error") 
     } 
    } else{ 
     self.view.makeToast("Couldn't get location permission", duration: 3.0, position: .bottom) 
    } 
} 

Picture of permissions added in the info-file

Répondre

3

On dirait que l'utilisateur a "un seul coup à accorder l'autorisation de cartes".

Oui c'est le cas avec l'autorisation de localisation, comme c'est le cas pour d'autres choses telles que l'autorisation d'accès au carnet d'adresses. Votre application peut détecter que l'utilisateur a précédemment refusé l'autorisation, et si c'est le cas, dites-leur qu'ils doivent l'activer via les paramètres avec un bouton appelé quelque chose comme "Emmène-moi aux paramètres" ou autre. Sur le bouton, vous pouvez lancer les paramètres de l'application via ce:

UIApplication.shared.open(appSettings as URL, options: [:], completionHandler: { (results) in 
    ... 
    })