El SDK de Places para iOS (nuevo) proporciona a tu app información enriquecida sobre lugares, incluidos el nombre y la dirección del lugar, la ubicación geográfica especificada como coordenadas de latitud y longitud, el tipo de lugar (como un club nocturno, una tienda de mascotas, un museo) y mucho más. Para acceder a esta información de un lugar específico, puedes usar el ID de lugar, un identificador estable que identifica un lugar de forma exclusiva.
Cómo obtener detalles de un lugar
La
GMSPlace
clase contiene información sobre un lugar específico, incluidos todos los campos de datos que se muestran en
Campos de datos de Place (nuevo). Para obtener un
GMSPlace
objeto, llama a
GMSPlacesClient
fetchPlaceWithRequest:,
pasa un GMSFetchPlaceRequest objeto y un
método de devolución de llamada del tipo
GMSPlaceResultCallback.
El objeto GMSFetchPlaceRequest especifica lo siguiente:
- (Obligatorio) El ID de lugar, un identificador único de un lugar en la base de datos de Google Places y en Google Maps.
- (Obligatorio) La lista de campos que se devolverán en el
GMSPlaceobjeto, también llamada máscara de campo, como se define enGMSPlaceProperty. Si no especificas al menos un campo en la lista de campos o si omites la lista de campos, la llamada muestra un error. - (Opcional) El código de región que se usa para dar formato a la respuesta
- (Opcional) El token de sesión que se usa para finalizar una sesión de Autocomplete (nuevo)
Cómo hacer una solicitud a Place Details
En este ejemplo, se obtiene un lugar por ID y se pasan los siguientes parámetros:
- El ID de lugar de
ChIJV4k8_9UodTERU5KXbkYpSYs - Una lista de campos que especifica que se devuelva el nombre del lugar y la URL del sitio web
- Un
GMSPlaceResultCallbackpara controlar el resultado.
La API invoca el método de devolución de llamada especificado y pasa un
GMSPlace
objeto. Si no se encuentra el sitio, el objeto de sitio es nil.
SDK de Places para Swift
// 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 }
Swift
// 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); } }];
Respuesta de Place Details
Place Details devuelve un
GMSPlace objeto que contiene detalles sobre el lugar. Solo se propagan los campos especificados en la lista de campos en el objeto GMSPlace.
Cómo obtener el estado de apertura
El GMSPlacesClient objeto contiene una función miembro llamada isOpenWithRequest (isOpenRequest en Swift y isPlaceOpenRequest en GooglePlacesSwift) que devuelve una respuesta que indica si el lugar está abierto en este momento, según la hora especificada en la llamada.
Este método toma un solo argumento del tipo GMSPlaceIsOpenWithRequest que contiene lo siguiente:
- Un objeto
GMSPlaceo una cadena que especifica un ID de lugar Para obtener más información sobre cómo crear el objeto Place con los campos necesarios, consulta Detalles del lugar.
- Un objeto
NSDate(Obj-C) oDate(Swift) opcional que especifica la hora que deseas verificar Si no se especifica la hora, el valor predeterminado es ahora. - Un método
GMSPlaceOpenStatusResponseCallbackpara controlar la respuesta >
El método GMSPlaceIsOpenWithRequest requiere que se establezcan los siguientes campos en el objeto GMSPlace:
GMSPlacePropertyUTCOffsetMinutesGMSPlacePropertyBusinessStatusGMSPlacePropertyOpeningHoursGMSPlacePropertyCurrentOpeningHoursGMSPlacePropertySecondaryOpeningHours
Si estos campos no se proporcionan en el objeto Place o si pasas un ID de lugar, el método usa GMSPlacesClient GMSFetchPlaceRequest: para recuperarlos.
Respuesta de isOpenWithRequest
isOpenWithRequest devuelve un objeto GMSPlaceIsOpenResponse que contiene un valor booleano llamado status que indica si la empresa está abierta, cerrada o si el estado es desconocido.
| Idioma | Valor si está abierto | Valor si está cerrado | Valor si el estado es desconocido |
|---|---|---|---|
| Places Swift | true |
false |
nil |
| Swift | .open |
.closed |
.unknown |
| Objective-C | GMSPlaceOpenStatusOpen |
GMSPlaceOpenStatusClosed |
GMSPlaceOpenStatusUnknown |
Facturación de isOpenWithRequest
- Los campos
GMSPlacePropertyUTCOffsetMinutesyGMSPlacePropertyBusinessStatusse cobran según el SKU de Basic Data. El resto del horario de atención se cobra según el SKU de Place Details Enterprise. - Si tu objeto
GMSPlaceya tiene estos campos de una solicitud anterior, no se te volverá a cobrar.
Ejemplo: Cómo hacer una solicitud a GMSPlaceIsOpenWithRequest
En el siguiente ejemplo, se muestra cómo inicializar un GMSPlaceIsOpenWithRequest dentro de un objeto GMSPlace existente.
SDK de Places para Swift
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 }
Swift
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 } }];
Parámetros obligatorios
Usa el objeto GMSFetchPlaceRequest para especificar los parámetros obligatorios.
ID de lugar
El ID de lugar que se usa en el SDK de Places para iOS es el mismo identificador que se usa en la API de Places, el SDK de Places para Android y otras APIs de Google. Cada ID de lugar puede hacer referencia a un solo lugar, pero un lugar puede tener más de un ID de lugar.
Hay circunstancias que pueden hacer que un lugar obtenga un ID de lugar nuevo. Esto, por ejemplo, puede suceder si un negocio se muda a otro lugar.
Cuando solicitas un lugar especificando un ID de lugar, puedes estar seguro de que siempre recibirás el mismo lugar en la respuesta (si el lugar aún existe). Sin embargo, ten en cuenta que la respuesta puede contener un ID de lugar diferente del que se encuentra en tu solicitud.
Lista de campos
Cuando solicitas detalles del lugar, debes especificar los datos que se devolverán en el objeto GMSPlace para el lugar como una máscara de campo. Para definir la máscara de campo, pasa un array de valores de GMSPlaceProperty al objeto GMSFetchPlaceRequest.
El uso de campos enmascarados es una práctica de diseño recomendada para garantizar que no solicites datos innecesarios, lo que ayuda a evitar tiempos de procesamiento y cargos de facturación adicionales.
Especifica uno o más de los siguientes campos:
Los siguientes campos activan el SKU de Place Details Essentials ID Only:
GMSPlacePropertyPlaceID
GMSPlacePropertyPhotosPara obtener una lista completa de los campos y sus SKUs asociados, consulta Campos de datos de Place (nuevo).
Los siguientes campos activan el SKU de Place Details Essentials:
GMSPlacePropertyAddressComponents
GMSPlacePropertyFormattedAddress
GMSPlacePropertyCoordinate
GMSPlacePropertyPlusCode
GMSPlacePropertyTypes
GMSPlacePropertyViewportPara obtener una lista completa de los campos y sus SKUs asociados, consulta Campos de datos de Place (nuevo).
Los siguientes campos activan el SKU de Place Details Pro:
GMSPlacePropertyBusinessStatus
GMSPlacePropertyIconBackgroundColor
GMSPlacePropertyIconImageURL
GMSPlacePropertyName
GMSPlacePropertyUTCOffsetMinutes
GMSPlacePropertyWheelchairAccessibleEntrancePara obtener una lista completa de los campos y sus SKUs asociados, consulta Campos de datos de Place (nuevo).
Los siguientes campos activan el SKU de Place Details Pro:
GMSPlacePropertyCurrentOpeningHours
GMSPlacePropertySecondaryOpeningHours
GMSPlacePropertyPhoneNumber
GMSPlacePropertyPriceLevel
GMSPlacePropertyRating
GMSPlacePropertyOpeningHours
GMSPlacePropertyUserRatingsTotal
GMSPlacePropertyWebsitePara obtener una lista completa de los campos y sus SKUs asociados, consulta Campos de datos de Place (nuevo).
Los siguientes campos activan el SKU de Place Details Enterprise:
GMSPlacePropertyCurbsidePickup
GMSPlacePropertyDelivery
GMSPlacePropertyDineIn
GMSPlacePropertyEditorialSummary
GMSPlacePropertyReservable
GMSPlacePropertyReviews
GMSPlacePropertyServesBeer
GMSPlacePropertyServesBreakfast
GMSPlacePropertyServesBrunch
GMSPlacePropertyServesDinner
GMSPlacePropertyServesLunch
GMSPlacePropertyServesVegetarianFood
GMSPlacePropertyServesWine
GMSPlacePropertyTakeoutPara obtener una lista completa de los campos y sus SKUs asociados, consulta Campos de datos de Place (nuevo).
En el siguiente ejemplo, se pasa una lista de dos
valores de campo
para especificar que el objeto GMSPlace que devuelve una solicitud contiene los campos
name y placeID:
SDK de Places para Swift
// Specify the place data types to return. let fields: [PlaceProperty] = [.placeID, .displayName]
Swift
// 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];
Parámetros opcionales
Usa el objeto GMSFetchPlaceRequest para especificar los parámetros opcionales.
regionCode
El código de región que se usa para dar formato a la respuesta, especificado como un valor de código CLDR de dos caracteres. Este parámetro también puede tener un efecto de sesgo en los resultados de la búsqueda. No hay un valor predeterminado.
Si el nombre del país del campo de dirección en la respuesta coincide con el código de región, se omite el código de país de la dirección.
La mayoría de los códigos CLDR son idénticos a los códigos ISO 3166-1, con algunas excepciones notables. Por ejemplo, el ccTLD del Reino Unido es "uk" (.co.uk), mientras que su código ISO 3166-1 es "gb" (técnicamente para la entidad de "El Reino Unido de Gran Bretaña e Irlanda del Norte"). El parámetro puede afectar los resultados según la ley aplicable.
sessionToken
Los tokens de sesión son cadenas generadas por el usuario que hacen un seguimiento de las llamadas a Autocomplete (nuevo) como "sesiones". Autocomplete (nuevo) usa tokens de sesión para agrupar las etapas de consulta y selección de lugares de la búsqueda con autocompletado de un usuario en una sesión discreta para realizar la facturación correspondiente. Los tokens de sesión se pasan a las llamadas a Place Details (nuevo) que siguen a las llamadas a Autocomplete (nuevo). Para obtener más información, consulta Tokens de sesión.
Mostrar atribuciones en tu aplicación
Cuando tu app muestra información obtenida de
GMSPlacesClient,
como fotos y opiniones, también debe mostrar las atribuciones requeridas.
Por ejemplo, la propiedad reviews del objeto GMSPlacesClient
contiene un array de hasta cinco
GMSPlaceReview
objetos. Cada objeto GMSPlaceReview puede contener atribuciones y atribuciones del autor.
Si muestras la opinión en tu app, también debes mostrar cualquier atribución o atribución del autor.
Para obtener más información, consulta la documentación sobre las atribuciones.