2017-02-10 19 views
0

Я работаю над кнопкой, которая отправит пользователя в приложение карты, если он предоставит разрешение на размещение приложения. Проблема в том, что если я один раз нажму кнопку и сниму разрешение на размещение, в следующий раз, когда я нажму кнопку, приложение не попросит разрешения снова. Похоже, что у пользователя есть «только один шанс на предоставление разрешений на карты».Попытка получить разрешение на размещение в iOS Swift

Ниже приведен код, который я использую для программного создания кнопки с функциями обратного вызова. Также есть скриншот «Пользовательские свойства iOS Target», в котором я включил описание конфиденциальности - Location Usage Description, чтобы иметь возможность использовать местоположение пользователей.

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

ответ

3

Похоже, у пользователя есть "только один выстрел в выдаче карты разрешения".

Да, это случай с разрешением на размещение, как и для других вещей, таких как разрешение доступа к адресной книге. Ваше приложение может обнаружить, что пользователь ранее отказался от разрешения, и если да, скажите им, что им нужно включить его с помощью настроек с помощью кнопки, называемой «Take me to settings» или что-то еще. При нажатии кнопки вы можете запустить настройки для приложения с помощью этого:

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