Обнаружение выбора пользователя в Location Access Popup Swift - PullRequest
0 голосов
/ 30 января 2020

У меня есть контроллер представления, который принимает местоположение пользователя и показывает близлежащие магазины.

Когда пользователь открывает приложение в первый раз, приложение отображает всплывающее окно для пользователя, чтобы разрешить доступ к местоположению. Если пользователь разрешает местоположение, я вызываю API в didUpdateLocations

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    if !isNearbyAlreadyLoaded {
        self.apiNearbyBakers()
        isNearbyAlreadyLoaded = true
    }
}

Но если пользователь не разрешает местоположение, мой API никогда не вызывается. В этом состоянии мне нужно показать ему кнопку, чтобы разрешить местоположение.

Вопрос :

Как определить, нажал ли пользователь кнопку Не разрешать во всплывающем окне Разрешить местоположение.

Ответы [ 2 ]

3 голосов
/ 30 января 2020

Вы можете использовать didChangeAuthorization метод обратного вызова. Этот метод вызывается, когда пользователь выбирает параметр во всплывающем окне.

func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
    if status == .authorizedAlways {
        if CLLocationManager.isMonitoringAvailable(for: CLBeaconRegion.self) {
            if CLLocationManager.isRangingAvailable() {
                // do stuff
            }
        }
    }
    if status == .denied {
        // handle your case
    }
}

Полный текст статьи об этом здесь

1 голос
/ 30 января 2020

Создайте расширение для CLLocationManagerDelegate
, затем проверьте статус и выполните свою функциональность соответственно, если разрешение не установлено, откройте настройки.

extension HomeVC: CLLocationManagerDelegate {

    func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {

        guard status == .authorizedAlways || status == .authorizedWhenInUse else {
            if status == .denied || status == .notDetermined || status == .restricted || status == .authorizedWhenInUse {

                let alert = UIAlertController(title: "Title", message:"Some Descriptions" , preferredStyle: .alert)
                alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
                alert.addAction(UIAlertAction(title: "Settings", style: .default, handler: { _ in
                    let url = URL(string: UIApplication.openSettingsURLString)!
                    UIApplication.shared.open(url, options: [:], completionHandler: nil)
                }))
                self.present(alert, animated: true, completion: nil)
            }
            return
        }
    }
}
...