El SDK de Places para iOS 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 club nocturno, tienda de mascotas, 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 de forma única un lugar.
Detalles del lugar
La clase GMSPlace
proporciona información sobre un lugar específico. Puedes obtener un objeto GMSPlace
de las siguientes maneras:
- Llama al método
GMSPlacesClient findPlaceLikelihoodsFromUserLocationWithPlaceFields:
. Consulta la guía para obtener el lugar actual. - Llama a
GMSPlacesClient fetchPlaceFromPlaceID:
y pasa unGMSPlaceField
, un ID de lugar y un método de devolución de llamada. En el caso de las solicitudes de Place Details, si no especificas al menos un campo con una solicitud o si omites el parámetrofields
en una solicitud, se devolverán TODOS los campos posibles y se te facturará en función de ello. Consulta la guía para obtener un lugar por ID.
Cuando solicitas un lugar, debes especificar qué tipos de datos del lugar se deben devolver. Para ello, pasa un GMSPlaceField
y especifica los tipos de datos que se devolverán. Esta es una consideración importante, ya que afectará el costo de cada solicitud.
Debido a que los resultados de datos de lugar no pueden estar vacíos, solo se muestran resultados de lugares con datos (por ejemplo, si un lugar solicitado no tiene fotos, el campo photos
no estará presente en el resultado).
En el siguiente ejemplo, se pasa una lista de dos valores de campo para especificar los datos que devuelve una solicitud:
Swift
// A hotel in Saigon with an attribution. let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs" // Specify the place data types to return. let fields: GMSPlaceField = GMSPlaceField(rawValue: UInt(GMSPlaceField.name.rawValue) | UInt(GMSPlaceField.placeID.rawValue))
Objective-C
// A hotel in Saigon with an attribution. NSString *placeID = @"ChIJV4k8_9UodTERU5KXbkYpSYs"; // Specify the place data types to return. GMSPlaceField fields = (GMSPlaceFieldName | GMSPlaceFieldPlaceID);
Obtén más información sobre los campos de lugares. Si deseas consultar más detalles sobre cómo se facturan las solicitudes de datos de Places, consulta Uso y facturación.
La clase GMSPlace
puede contener los siguientes datos del lugar:
name
: Es el nombre del lugar.editorialSummary
: Proporciona una descripción de un lugar.placeID
: Es el identificador textual del lugar. Obtén más información sobre los IDs de lugar en el resto de esta página.coordinate
: Es la ubicación geográfica del lugar, especificada como coordenadas de latitud y longitud.phoneNumber
: Es el número de teléfono del lugar en formato internacional.formattedAddress
: Es la dirección legible de esta ubicación.A menudo, esta dirección equivale a la dirección postal. Ten en cuenta que, en algunos países, como los que integran el Reino Unido, no se permite la distribución de direcciones postales verdaderas debido a restricciones de licencia.
La dirección con formato está compuesta, de manera lógica, por uno o más componentes de dirección. Por ejemplo, la dirección "111 8th Avenue, New York, NY" consta de los siguientes componentes: "111" (número de la calle), "8th Avenue" (calle), "New York" (ciudad) y "NY" (estado de los EE.UU.).
No analices la dirección con formato por vía programática. En cambio, utiliza los componentes individuales de la dirección, que la respuesta de la API incluye además del campo de dirección con formato.
openingHours
: Es el horario de atención del lugar (representado porGMSOpeningHours
). Llama aGMSOpeningHours.weekdayText
para obtener una lista de cadenas localizadas del horario de atención diario de la semana. Llama aGMSOpeningHours.Periods
para devolver una lista deGMSPeriod
s con información más detallada que sea equivalente a los datos proporcionados porweekdayText
. Nota: Si un lugar está siempre abierto, el período se representa como el domingo a la medianoche ycloseEvent
es nulo.currentOpeningHours
ysecondaryOpeningHours
: Son campos que registran los cambios temporales y por festividades en el horario de un lugar.addressComponents
: Es un array de objetosGMSAddressComponent
que representan los componentes de la dirección de un lugar. Estos componentes se proporcionan con el propósito de extraer información estructurada sobre la dirección de un lugar, por ejemplo, encontrar la ciudad en la que se encuentra un lugar. No uses estos componentes para el formato de direcciones. En su lugar, usa la propiedadformattedAddress
, que proporciona una dirección con formato localizada.Ten en cuenta lo siguiente acerca del array
addressComponents
:- El array de componentes de dirección puede incluir más componentes que
formattedAddress
. - El array no necesariamente incluye todas las entidades políticas que
contienen una dirección, además de las incluidas en
formattedAddress
. - No se garantiza que el formato de la respuesta permanezca igual entre las distintas
solicitudes. En particular, la cantidad de
addressComponents
varía según la dirección solicitada y puede cambiar con el tiempo para la misma dirección. Un componente puede cambiar de posición en el array. El tipo de componente puede cambiar. Es posible que falte un componente en particular en una respuesta posterior.
- El array de componentes de dirección puede incluir más componentes que
userRatingsTotal
: Representa la cantidad de opiniones que componen la calificación del lugar.
La clase GMSPlace
contiene las siguientes funciones miembro:
-
isOpen
calcula si un lugar está abierto en un momento determinado, en función deopeningHours
yUTCOffsetMinutes
, y la fecha y hora actuales. isOpenAtDate
calcula si un lugar está abierto en una fecha determinada, segúnopeningHours
yUTCOffsetMinutes
, y la fecha y hora actuales.
Cuando uses estas funciones para obtener horarios o fechas de apertura, la solicitud original de fetchPlaceFromPlaceID:
o findPlaceLikelihoodsFromUserLocationWithPlaceFields:
debe especificar los campos GMSPlaceFieldOpeningHours
y GMSPlaceFieldUTCOffsetMinutes
. Si falta alguno de estos campos, el objeto GMSPlace
resultante no contendrá horarios ni fechas de apertura, y la llamada devolverá GMSPlaceOpenStatusUnknown
. Para obtener resultados precisos, solicita los campos GMSPlaceFieldBusinessStatus
y GMSPlaceFieldUTCOffsetMinutes
en tu solicitud de lugar original. Si no se solicita, se supone que la empresa está operativa.
isOpen
con Place Details, consulta el video sobre cómo obtener los horarios de atención .
Obtén horas excepcionales
Si bien el horario de atención habitual se obtiene a través deopeningHours
, currentOpeningHours
y secondaryOpeningHours
admiten cambios de horario temporales y por días feriados.
Si están disponibles, se pueden filtrar y presentar los horarios excepcionales para estos días especiales.
Swift
func examineOpeningHours(place: GMSPlace) { // Check if the current opening hours contains a special day that has exceptional hours guard let currentOpeningHours = place.currentOpeningHours else { return } if let specialDays = currentOpeningHours.specialDays { guard !specialDays.isEmpty else { return } if let specialDay = specialDays.filter { $0.isExceptional }.first { // Indicate exceptional hours } } // Check if current opening hours contains a truncated time period let periods = currentOpeningHours.periods if !periods.isEmpty { for period in periods { let open = period.open let close = period.close if let open = open { let date = open.date if open.isTruncated { // Indicate truncated time period } } } } // Check if the place's secondary opening hours indicate when delivery is available let secondaryOpeningHours = place.secondaryOpeningHours guard let hoursType = secondaryOpeningHours.first?.hoursType else { return } if (hoursType == GMSPlaceHoursTypeDelivery) { // Indicate hours where delivery is available } }
Objective-C
- (void)examineOpeningHours:(GMSPlace *) place { // Check if the current opening hours contains a special day that has exceptional hours GMSOpeningHours *currentOpeningHours = place.currentOpeningHours; if (currentOpeningHours != nil) { NSArray<GMSPlaceSpecialDay *> *specialDays = currentOpeningHours.specialDays; if ([specialDays count] != 0) { for (GMSPlaceSpecialDay *specialDay in specialDays) { NSDate *date = specialDay.date; if ([specialDay isExceptional]) { // Indicate exceptional hours } } } } // Check if current opening hours contains a truncated time period NSArray <GMSPeriod *> * periods = currentOpeningHours.periods; if ([periods count] != 0) { for (GMSPeriod * period in periods) { GMSTimeOfWeek *open = period.open; GMSTimeOfWeek *close = period.close; if (open) { if ([open isTruncated]) { // Indicate truncated time period } } } } // Check if the place's secondary opening hours indicate when delivery is available GMSOpeningHours *secondaryOpeningHours = place.secondaryOpeningHours; GMSPlaceHoursType hoursType = secondaryOpeningHours.getHoursType; if (hoursType == GMSPlaceHoursTypeDelivery) { // Indicate hours where delivery is available } }
Obtener un sitio por id.
Un ID de lugar es un identificador textual que identifica de forma exclusiva un lugar. En el SDK de Places para iOS, puedes recuperar el ID de un lugar desde un objeto GMSPlace
. Puedes almacenar el ID de lugar y usarlo para recuperar el objeto GMSPlace
más adelante.
Para obtener un lugar por ID, llama a GMSPlacesClient
fetchPlaceFromPlaceID:
y pasa los siguientes parámetros:
- Es una cadena que contiene un ID de lugar.
- Uno o más
GMSPlaceField
que especifican los tipos de datos que se devolverán. - Es un token de sesión si se realiza la llamada para completar una búsqueda de autocompletado. De lo contrario, pasa nil.
- Un
GMSPlaceResultCallback
para controlar el resultado.
La API invoca el método de devolución de llamada especificado y pasa un objeto GMSPlace
. Si no se encuentra el sitio, el objeto de sitio es nil.
SDK de Places Swift para iOS
// Initialize Places Swift Client. let placesClient = PlacesClient.shared // A hotel in Saigon with an attribution let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs" // Fetch Place Request. let fetchPlaceRequest = FetchPlaceRequest( placeID: placeID, placeProperties: [.displayName] ) Task { switch await placesClient.fetchPlace(with: fetchPlaceRequest) { case .success(let place): print("The selected place is: \(place.displayName): \(String(describing: place.description))") case .failure(let placesError): print("Place not found: \(placeID); \(placesError)") } }
Swift
// A hotel in Saigon with an attribution. let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs" // Specify the place data types to return. let fields: GMSPlaceField = GMSPlaceField(rawValue: UInt(GMSPlaceField.name.rawValue) | UInt(GMSPlaceField.placeID.rawValue))! placesClient?.fetchPlace(fromPlaceID: placeID, placeFields: fields, sessionToken: nil, callback: { (place: GMSPlace?, error: Error?) in if let error = error { print("An error occurred: \(error.localizedDescription)") return } if let place = place { self.lblName?.text = place.name print("The selected place is: \(place.name)") } })
Objective-C
// A hotel in Saigon with an attribution. NSString *placeID = @"ChIJV4k8_9UodTERU5KXbkYpSYs"; // Specify the place data types to return. GMSPlaceField fields = (GMSPlaceFieldName | GMSPlaceFieldPlaceID); [_placesClient fetchPlaceFromPlaceID:placeID placeFields:fields sessionToken:nil callback:^(GMSPlace * _Nullable place, NSError * _Nullable error) { if (error != nil) { NSLog(@"An error occurred %@", [error localizedDescription]); return; } if (place != nil) { NSLog(@"The selected place is: %@", [place name]); } }];
Mostrar atribuciones en tu aplicación
Cuando tu app muestre información obtenida de GMSPlacesClient
lookUpPlaceID:callback:
, también deberá mostrar las atribuciones.
Consulta la documentación sobre atribuciones.
Más información sobre los id. de sitio
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 tener la certeza 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 incluye en tu solicitud.
Para obtener más información, consulta la descripción general de los IDs de lugar.