Places SDK для iOS (новый) предоставляет вашему приложению обширную информацию о местах, включая название и адрес места, географическое местоположение, указанное в виде координат широты/долготы, тип места (например, ночной клуб, зоомагазин, музей) и многое другое. Чтобы получить доступ к этой информации для определенного места, вы можете использовать идентификатор места — стабильный идентификатор, который однозначно идентифицирует место.
Получить информацию о месте
Класс GMSPlace
содержит информацию о конкретном месте, включая все поля данных, показанные в Place Data Fields (New) . Получите объект GMSPlace
, вызвав GMSPlacesClient fetchPlaceWithRequest:
, передав объект GMSFetchPlaceRequest
и метод обратного вызова типа GMSPlaceResultCallback
.
Объект GMSFetchPlaceRequest
определяет:
- (Обязательно) Идентификатор места — уникальный идентификатор места в базе данных Google Places и на Картах Google.
- (Обязательно) Список полей для возврата в объекте
GMSPlace
, также называемый маской поля , как определеноGMSPlaceProperty
. Если вы не укажете хотя бы одно поле в списке полей или пропустите список полей, то вызов вернет ошибку. - (Необязательно) Код региона, используемый для форматирования ответа.
- (Необязательно) Токен сеанса, используемый для завершения сеанса автозаполнения (нового).
Сделайте запрос на информацию о месте
В этом примере получается место по идентификатору, передаются следующие параметры:
- Идентификатор места
ChIJV4k8_9UodTERU5KXbkYpSYs
. - Список полей, указывающих, следует ли возвращать название места и URL-адрес веб-сайта.
- Обратный
GMSPlaceResultCallback
для обработки результата.
API вызывает указанный метод обратного вызова, передавая объект GMSPlace
. Если место не найдено, объект места равен нулю.
Место Swift SDK
// A hotel in Saigon with an attribution. let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs" let fetchPlaceRequest = FetchPlaceRequest( placeID: placeID, placeProperties: [.name, .website] ) switch await placesClient.fetchPlace(with: fetchPlaceRequest) { case .success(let place): // Handle place case .failure(let placesError): // Handle error }
Быстрый
// A hotel in Saigon with an attribution. let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs" // Specify the place data types to return. let myProperties = [GMSPlaceProperty.name, GMSPlaceProperty.website].map {$0.rawValue} // Create the GMSFetchPlaceRequest object. let fetchPlaceRequest = GMSFetchPlaceRequest(placeID: placeID, placeProperties: myProperties, sessionToken: nil) client.fetchPlace(with: fetchPlaceRequest, callback: { (place: GMSPlace?, error: Error?) in guard let place, error == nil else { return } print("Place found: \(String(describing: place.name))") })
Objective-C
// A hotel in Saigon with an attribution. NSString *placeID = @"ChIJV4k8_9UodTERU5KXbkYpSYs"; // Specify the place data types to return. NSArray<NSString *> *myProperties = @[GMSPlacePropertyName, GMSPlacePropertyWebsite]; // Create the GMSFetchPlaceRequest object. GMSFetchPlaceRequest *fetchPlaceRequest = [[GMSFetchPlaceRequest alloc] initWithPlaceID:placeID placeProperties: myProperties sessionToken:nil]; [placesClient fetchPlaceWithRequest: fetchPlaceRequest callback: ^(GMSPlace *_Nullable place, NSError *_Nullable error) { if (error != nil) { NSLog(@"An error occurred %@", [error localizedDescription]); return; } else { NSLog(@"Place Found: %@", place.name); NSLog(@"The place URL: %@", place.website); } }];
Ответ на вопрос «Подробности места»
Place Details возвращает объект GMSPlace
, содержащий сведения о месте. Только поля, указанные в списке полей, заполняются в объекте GMSPlace
.
Получить открытый статус
Объект GMSPlacesClient
содержит функцию-член isOpenWithRequest
( isOpenRequest
в Swift и isPlaceOpenRequest
в GooglePlacesSwift), которая возвращает ответ, указывающий, открыто ли место в данный момент, на основе времени, указанного в вызове.
Этот метод принимает один аргумент типа GMSPlaceIsOpenWithRequest
, который содержит:
- Объект
GMSPlace
или строка, указывающая идентификатор места. Для получения дополнительной информации о создании объекта Place с необходимыми полями см. раздел Подробности места . - Необязательный объект
NSDate
(Obj-C) илиDate
(Swift), указывающий время, которое вы хотите проверить. Если время не указано, по умолчанию используется now. - Метод
GMSPlaceOpenStatusResponseCallback
для обработки ответа. >
Метод GMSPlaceIsOpenWithRequest
требует установки следующих полей в объекте GMSPlace
:
-
GMSPlacePropertyUTCOffsetMinutes
-
GMSPlacePropertyBusinessStatus
-
GMSPlacePropertyOpeningHours
-
GMSPlacePropertyCurrentOpeningHours
-
GMSPlacePropertySecondaryOpeningHours
Если эти поля не указаны в объекте Place или если вы передаете идентификатор места, метод использует GMSPlacesClient GMSFetchPlaceRequest:
для их извлечения.
ответ isOpenWithRequest
isOpenWithRequest
возвращает объект GMSPlaceIsOpenResponse
, содержащий логическое значение с именем status
, которое указывает, открыта ли компания, закрыта или статус неизвестен.
Язык | Значение, если открыто | Значение, если закрыто | Значение, если статус неизвестен |
---|---|---|---|
Места Свифт | true | false | nil |
Быстрый | .open | .closed | .unknown |
Objective-C | GMSPlaceOpenStatusOpen | GMSPlaceOpenStatusClosed | GMSPlaceOpenStatusUnknown |
Выставление счетов за isOpenWithRequest
- Поля
GMSPlacePropertyUTCOffsetMinutes
иGMSPlacePropertyBusinessStatus
тарифицируются по базовому артикулу данных . Остальные часы работы тарифицируются по корпоративному артикулу сведений о месте. - Если ваш объект
GMSPlace
уже содержит эти поля из предыдущего запроса, с вас не будет взиматься дополнительная плата.
Пример: сделайте запрос GMSPlaceIsOpenWithRequest
В следующем примере показано, как инициализировать GMSPlaceIsOpenWithRequest
в существующем объекте GMSPlace
. Место Swift SDK
let isOpenRequest = IsPlaceOpenRequest(place: place) switch await placesClient.isPlaceOpen(with: isOpenRequest) { case .success(let isOpenResponse): switch isOpenResponse.status { case true: // Handle open case false: // Handle closed case nil: // Handle unknown case .failure(let placesError): // Handle error }
Быстрый
let isOpenRequest = GMSPlaceIsOpenRequest(place: place, date: nil) GMSPlacesClient.shared().isOpen(with: isOpenRequest) { response, error in if let error = error { // Handle Error } switch response.status { case .open: // Handle open case .closed: // Handle closed case .unknown: // Handle unknown } }
Objective-C
GMSPlaceIsOpenRequest *isOpenRequest = [[GMSPlaceIsOpenRequest alloc] initWithPlace:place date:nil]; [[GMSPlacesClient sharedClient] isOpenWithRequest:isOpenRequest callback:^(GMSPlaceIsOpenResponse response, NSError *_Nullable error) { if (error) { // Handle error } switch (response.status) { case GMSPlaceOpenStatusOpen: // Handle open case GMSPlaceOpenStatusClosed: // Handle closed case GMSPlaceOpenStatusUnknown: // Handle unknown } }];
Требуемые параметры
Используйте объект GMSFetchPlaceRequest
для указания требуемых параметров.
Место ID
Идентификатор места , используемый в Places SDK для iOS, — это тот же идентификатор, который используется в Places API, Places SDK для Android и других API Google. Каждый идентификатор места может относиться только к одному месту, но одно место может иметь более одного идентификатора места.
Существуют обстоятельства, которые могут привести к тому, что место получит новый идентификатор места. Например, это может произойти, если бизнес переезжает в новое место.
Когда вы запрашиваете место, указывая идентификатор места, вы можете быть уверены, что вы всегда получите одно и то же место в ответе (если место все еще существует). Обратите внимание, однако, что ответ может содержать идентификатор места, отличный от того, который был в вашем запросе.
Список полей
При запросе сведений о месте необходимо указать возвращаемые данные в объекте GMSPlace
для места в качестве маски поля. Чтобы определить маску поля, передайте массив значений из GMSPlaceProperty
в объект GMSFetchPlaceRequest
. Маскирование полей — это хорошая практика проектирования, которая гарантирует, что вы не запрашиваете ненужные данные, что помогает избежать ненужного времени обработки и расходов на выставление счетов.
Укажите одно или несколько из следующих полей:
Следующие поля активируют Place Details Essentials ID Only SKU :
GMSPlacePropertyPlaceID
GMSPlacePropertyPhotos
Следующие поля активируют Place Details Essentials SKU :
GMSPlacePropertyAddressComponents
GMSPlacePropertyFormattedAddress
GMSPlacePropertyCoordinate
GMSPlacePropertyPlusCode
GMSPlacePropertyTypes
GMSPlacePropertyViewport
Следующие поля активируют Place Details Pro SKU :
GMSPlacePropertyBusinessStatus
GMSPlacePropertyIconBackgroundColor
GMSPlacePropertyIconImageURL
GMSPlacePropertyName
GMSPlacePropertyUTCOffsetMinutes
GMSPlacePropertyWheelchairAccessibleEntrance
Следующие поля активируют Place Details Pro SKU :
GMSPlacePropertyCurrentOpeningHours
GMSPlacePropertySecondaryOpeningHours
GMSPlacePropertyPhoneNumber
GMSPlacePropertyPriceLevel
GMSPlacePropertyRating
GMSPlacePropertyOpeningHours
GMSPlacePropertyUserRatingsTotal
GMSPlacePropertyWebsite
Следующие поля активируют Place Details Enterprise SKU :
GMSPlacePropertyCurbsidePickup
GMSPlacePropertyDelivery
GMSPlacePropertyDineIn
GMSPlacePropertyEditorialSummary
GMSPlacePropertyReservable
GMSPlacePropertyReviews
GMSPlacePropertyServesBeer
GMSPlacePropertyServesBreakfast
GMSPlacePropertyServesBrunch
GMSPlacePropertyServesDinner
GMSPlacePropertyServesLunch
GMSPlacePropertyServesVegetarianFood
GMSPlacePropertyServesWine
GMSPlacePropertyTakeout
В следующем примере передается список из двух значений полей , чтобы указать, что объект GMSPlace
, возвращаемый запросом, содержит поля name
и placeID
:
Место Swift SDK
// Specify the place data types to return. let fields: [PlaceProperty] = [.placeID, .displayName]
Быстрый
// Specify the place data types to return. let fields: [GMSPlaceProperty] = [.placeID, .name]
Objective-C
// Specify the place data types to return. NSArray<GMSPlaceProperty *> *fields = @[GMSPlacePropertyPlaceID, GMSPlacePropertyName];
Необязательные параметры
Используйте объект GMSFetchPlaceRequest
для указания необязательных параметров.
Код региона
Код региона, используемый для форматирования ответа, указанный как двухсимвольное значение кода CLDR . Этот параметр также может иметь эффект смещения в результатах поиска. Значения по умолчанию нет.
Если название страны в поле адреса в ответе совпадает с кодом региона, код страны из адреса исключается.
Большинство кодов CLDR идентичны кодам ISO 3166-1, за некоторыми заметными исключениями. Например, ccTLD Соединенного Королевства — «uk» (.co.uk), а его код ISO 3166-1 — «gb» (технически для субъекта «Соединенное Королевство Великобритании и Северной Ирландии»). Параметр может влиять на результаты в зависимости от применимого законодательства.
sessionToken
Токены сеанса — это строки, сгенерированные пользователем, которые отслеживают вызовы Autocomplete (New) как «сеансы». Autocomplete (New) использует токены сеанса для группировки фаз запроса и выбора места поиска пользователя с автозаполнением в отдельный сеанс для выставления счетов. Токены сеанса передаются в вызовы Place Details (New), которые следуют за вызовами Autocomplete (New). Для получения дополнительной информации см. Токены сеанса .
Отображение атрибуции в вашем приложении
Когда ваше приложение отображает информацию, полученную от GMSPlacesClient
, например фотографии и отзывы, приложение также должно отображать требуемые атрибуции.
Например, свойство reviews
объекта GMSPlacesClient
содержит массив из пяти объектов GMSPlaceReview
. Каждый объект GMSPlaceReview
может содержать атрибуции и авторские атрибуции. Если вы отображаете обзор в своем приложении, то вы также должны отображать любую атрибуцию или авторскую атрибуцию.
Более подробную информацию см. в документации по атрибуции .