2017-04-04 2 views
1

J'ai requestAlwaysAuthorization et j'ai besoin de suivre les utilisateurs à chaque fois si l'utilisateur n'accepte pas de requestAlwaysAuthorization Je veux sortir dans l'application?CLLocation Manager vérifier requestAlwaysAuthorization et sinon accepter l'application de sortie

Comment puis-je faire?

Mes codes sous ci-dessous.

import CoreLocation 

public var locationManager = CLLocationManager() 

    override func viewDidLoad() { 
     super.viewDidLoad() 


     locationManager.delegate = self 
     locationManager.requestAlwaysAuthorization() 
     locationManager.startUpdatingLocation() 

} 



    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 

     let altitudeG = locations.last?.altitude 
     let longitudeG = locations.last?.coordinate.longitude 
     let latitudeG = locations.last?.coordinate.latitude 

print("\(altitudeG) \(longitudeG) \(latitudeG)") 

    } 

Répondre

1

En cas d'erreur cette méthode delegate est appelée:

func locationManager(manager: CLLocationManager, didFailWithError error: NSError) { 
    print(error) 
    // handle not authorized error here. You might want to quit on specific errors (unauthorized) only. Check the error. 

    UIControl().sendAction(#selector(URLSessionTask.suspend), to: UIApplication.shared, for: nil) 
} 

Vous pouvez également vérifier l'état des autorisations actuelles avant de laisser échouer CLLocationManager:

if CLLocationManager.locationServicesEnabled() { 
    switch(CLLocationManager.authorizationStatus()) { 
     case .notDetermined, .restricted, .denied: 
      print("No access") 
     case .authorizedAlways, .authorizedWhenInUse: 
      print("Access") 
     } 
    } else { 
     print("Location services are not enabled") 
} 

pris from this answer. Opinion basée: Je considère quitter l'application au lieu de donner à l'utilisateur un feedback compréhensible très mauvais UX.

+1

Sidenote: Si votre application juste "se ferme" au lieu de montrer un message d'erreur, il fera d'Apple rEJET de l'App Store. Plus encore, bloquer les utilisateurs d'accéder à votre application si elles ne vous donnent pas des autorisations est une cause de rejet trop. –

1

Au-dessus de réponse est aussi bonne, je viens d'essayer de le faire mordit facilement grâce à des méthodes. En outre, si vous travaillez avec des périphériques comme des balises, vous devez accéder à l'emplacement AuthorizedAlways.

Vérifiez si les services de localisation sont activés

public func isLocationEnabled()-> Bool { 

    if CLLocationManager.locationServicesEnabled() { 
     switch(CLLocationManager.authorizationStatus()) { 
     case .NotDetermined, .Restricted, .Denied , .AuthorizedWhenInUse : 
      showLocationServiceNotEnabledAlert() 
      return false 
     case .AuthorizedAlways: // As of now we check for only "Always", not for "When In Use" this should be fixed according to the requirements 
      return true 
     } 
    } 

    return false 
} 

alerte pour l'utilisateur à le service et redirigent Paramètres

func showLocationServiceNotEnabledAlert() { 
    let title = "Your Title" 
    let message = "Your Message" 
    let alertController = UIAlertController(title: title, message: message, preferredStyle: .Alert) 

    let settingsAction = UIAlertAction(title: "Settings".localized, style: .Default) { (alertAction) in 
     if let appSettings = NSURL(string: UIApplicationOpenSettingsURLString) { 
      UIApplication.sharedApplication().openURL(appSettings) 
     } 
    } 
    alertController.addAction(settingsAction) 

    let cancelAction = UIAlertAction(title: "Cancel".localized, style: .Cancel, handler: nil) 
    alertController.addAction(cancelAction) 

    UIApplication.sharedApplication().delegate?.window!?.currentViewController?.presentViewController(alertController, animated: true, completion: nil) 
}