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, указывающих, какие типы данных нужно вернуть. Если вы не включите этот параметр в запросе, возвращены будут все возможные поля, и за это будет начислена плата. Это применяется только к запросам информации о местах.
  • Метод обратного вызова для обработки результатов.

Поля соответствуют результатам поиска мест и делятся на три категории, которые оплачиваются по разным тарифам: основные данные, контактные данные и данные об атмосфере. Запросы основных данных оплачиваются по базовой цене, и за них дополнительная плата не взимается. Запросы контактных данных и данных об атмосфере оплачиваются по более высокой ставке. Подробную информацию о том, как начисляется плата за запросы данных 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.

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

Как показывать атрибуцию в приложении

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