Current Place (устаревшая версия)

С помощью Places SDK для iOS можно определить, где сейчас находится устройство. то есть место, где находится устройство. Примеры мест: местные компании, объекты инфраструктуры и географические местоположения.

  1. Как запросить разрешение на доступ к данным о местоположении
  2. Лимиты на использование
  3. Как получить текущее местоположение
  4. Как показывать сведения об авторах в приложении

Запрос разрешения на доступ к данным о местоположении

Если в вашем приложении используется GMSPlacesClient findPlaceLikelihoodsFromCurrentLocationWithPlaceFields:, оно должно запрашивать разрешение на использование сервисов геолокации. Добавьте ключ NSLocationWhenInUseUsageDescription в файл Info.plist, чтобы определить строку, сообщающую пользователю, почему вам нужны сервисы геолокации. Пример:

<key>NSLocationWhenInUseUsageDescription</key>
<string>Show your location on the map</string>

Если вы хотите вызвать findPlaceLikelihoodsFromCurrentLocationWithPlaceFields:, когда приложение работает в фоновом режиме, не показывая диалоговое окно с подтверждением, перед вызовом выполните следующие действия:

  1. Добавьте ключ NSLocationAlwaysUsageDescription в файл Info.plist.
  2. Перед вызовом метода вызовите requestAlwaysAuthorization для любого экземпляра CLLocationManager.

Запросите авторизацию у CLLocationManager следующим образом:

Swift

    locationManager.requestAlwaysAuthorization()
    

Objective-C

    [self.locationManager requestAlwaysAuthorization];
    

Определение текущего местоположения

Чтобы найти местную компанию или другое место, где сейчас находится устройство, вызовите GMSPlacesClient findPlaceLikelihoodsFromCurrentLocationWithPlaceFields:. Добавьте следующие параметры:

  • Одно или несколько значений GMSPlaceField, указывающих, какие типы данных нужно вернуть. Если вы не укажете этот параметр, будут возвращены все возможные поля, и за это будет начислена плата. Это применяется только к запросам информации о местах.
  • Метод обратного вызова для обработки результатов.

Поля соответствуют результатам поиска мест и делятся на три категории, которые оплачиваются по разным тарифам: основные данные, контактные данные и данные об атмосфере. Поля Basic оплачиваются по базовой цене, и за них дополнительная плата не взимается. Запросы контактных данных и данных об атмосфере оплачиваются по более высокой ставке. Подробную информацию о том, как начисляется плата за запросы данных Places, можно найти в статье Статистика использования и оплата.

API вызывает указанный метод обратного вызова, возвращая массив объектов GMSPlaceLikelihood.

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

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

Swift

// Specify the place data types to return.
let fields: GMSPlaceField = GMSPlaceField(rawValue: UInt(GMSPlaceField.name.rawValue) |
                                          UInt(GMSPlaceField.placeID.rawValue))!
placesClient?.findPlaceLikelihoodsFromCurrentLocation(withPlaceFields: fields, callback: {
  (placeLikelihoodList: Array<GMSPlaceLikelihood>?, error: Error?) in
  if let error = error {
    print("An error occurred: \(error.localizedDescription)")
    return
  }

  if let placeLikelihoodList = placeLikelihoodList {
    for likelihood in placeLikelihoodList {
      let place = likelihood.place
      print("Current Place name \(String(describing: place.name)) at likelihood \(likelihood.likelihood)")
      print("Current PlaceID \(String(describing: place.placeID))")
    }
  }
})

Objective-C

// Specify the place data types to return.
GMSPlaceField fields = (GMSPlaceFieldName | GMSPlaceFieldPlaceID);
[_placesClient findPlaceLikelihoodsFromCurrentLocationWithPlaceFields:fields callback:^(NSArray<GMSPlaceLikelihood *> * _Nullable likelihoods, NSError * _Nullable error) {
  if (error != nil) {
    NSLog(@"An error occurred %@", [error localizedDescription]);
    return;
  }
  if (likelihoods != nil) {
    for (GMSPlaceLikelihood *likelihood in likelihoods) {
      GMSPlace *place = likelihood.place;
      NSLog(@"Current place name: %@", place.name);
      NSLog(@"Place ID: %@", place.placeID);
    }
  }
}];

Примечания, касающиеся значений вероятности.

  • Вероятность – это относительная величина, которая показывает, насколько место соответствует запросу по сравнению с другими местами в списке. Нельзя сравнивать вероятности для разных запросов.
  • Значение вероятности представляет собой число от 0 до 1,0.
  • Сумма вероятностей в возвращаемом массиве объектов GMSPlaceLikelihood всегда меньше или равна 1,0. Обратите внимание, что сумма не обязательно равна 1,0.

Например, если вероятность того, что правильным местом является место A, составляет 55 %, а вероятность того, что это место B, составляет 35 %, массив вероятностей будет содержать два элемента: место A с вероятностью 0,55 и место B с вероятностью 0,35.

Как показывать сведения об авторах в приложении

Если в вашем приложении демонстрируется информация, полученная с помощью вызова GMSPlacesClient findPlaceLikelihoodsFromCurrentLocationWithPlaceFields:, в нем также должно быть указано авторство. Подробнее об атрибуции…