Получить текущее местоположение пользователя Google API не работает

Привет, я использую Google автозаполнение мест в моем приложении IOS. Но проблема в том, что он не работает. и я не могу получить текущее местоположение пользователя.

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

class ViewController: UIViewController,CLLocationManagerDelegate {


    var locationManager = CLLocationManager()
    var placesClient : GMSPlacesClient?
    override func viewDidLoad() {
        super.viewDidLoad()

         locationManager.requestAlwaysAuthorization()

       run()

    }

 func run(){

        self.placesClient?.currentPlaceWithCallback({ (list: GMSPlaceLikelihoodList?, error: NSError?) -> Void in
            if let error = error {
                print("error: \(error.description)")
                return
            }

            for likelihood in list!.likelihoods {
                if let likelihood = likelihood as? GMSPlaceLikelihood {
                    let place = likelihood.place
                    print("Current Place name \(place.name) at likelihood \(likelihood.likelihood)")
                    print("Current Place address \(place.formattedAddress)")
                    print("Current Place attributions \(place.attributions)")

                    print("Current PlaceID \(place.placeID)")
                }
            }
        })
    }

Я также добавил ключи в info.plist и собираю приложение на своем телефоне.

2 ответа

Добавьте следующее в viewDidLoad()

placesClient = GMSPlacesClient.shared()

И вы положили run() сразу после авторизации запроса API может не работать с первого раза, когда вы запускаете приложение, так как оно асинхронно, и API будет отвечать с ошибкой, потому что авторизация не была получена в то время.

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

placesClient.currentPlaceWithCallback({ (placeLikelihoods, error) -> Void in
  guard error == nil else {
    print("Current Place error: \(error!.localizedDescription)")
    return
  }

  if let placeLikelihoods = placeLikelihoods {
    for likelihood in placeLikelihoods.likelihoods {
      let place = likelihood.place
      print("Current Place name \(place.name) at likelihood \(likelihood.likelihood)")
      print("Current Place address \(place.formattedAddress)")
      print("Current Place attributions \(place.attributions)")
      print("Current PlaceID \(place.placeID)")
    }
  }
})
Другие вопросы по тегам