С помощью Places SDK для iOS можно определить, где сейчас находится устройство. то есть место, где находится устройство. Примеры мест: местные компании, объекты инфраструктуры и географические местоположения.
- Как запросить разрешение на доступ к данным о местоположении
- Лимиты на использование
- Как получить текущее местоположение
- Как показывать сведения об авторах в приложении
Запрос разрешения на доступ к данным о местоположении
Если в вашем приложении используется
GMSPlacesClient findPlaceLikelihoodsFromCurrentLocationWithPlaceFields:, оно должно запрашивать разрешение на использование сервисов геолокации. Добавьте ключ NSLocationWhenInUseUsageDescription в файл Info.plist, чтобы определить строку, сообщающую пользователю, почему вам нужны сервисы геолокации. Пример:
<key>NSLocationWhenInUseUsageDescription</key> <string>Show your location on the map</string>
Если вы хотите вызвать
findPlaceLikelihoodsFromCurrentLocationWithPlaceFields:, когда приложение работает в фоновом режиме, не показывая диалоговое окно с подтверждением, перед вызовом выполните следующие действия:
- Добавьте ключ
NSLocationAlwaysUsageDescriptionв файлInfo.plist. - Перед вызовом метода вызовите
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:, в нем также должно быть указано авторство. Подробнее об атрибуции…