El SDK de Places para iOS le brinda a tu app información valiosa información sobre lugares, como el nombre y la dirección, la ubicación ubicación especificada como coordenadas de latitud y longitud, el tipo de lugar (como como un club nocturno, una tienda de mascotas, un museo), entre otros. Para acceder a esta información de una puedes usar el id. de sitio, un identificador estable que identifica de forma exclusiva identifica un lugar.
Detalles del lugar
El
GMSPlace
proporciona información sobre un lugar específico. Puedes obtener un
GMSPlace
objeto de las siguientes maneras:
- Llama al método
GMSPlacesClient findPlaceLikelihoodsFromUserLocationWithPlaceFields:
. Consulta la guía sobre obtener el lugar actual. - Llamada
GMSPlacesClient fetchPlaceFromPlaceID:
, pasando unGMSPlaceField
, un el id. de sitio y un método de devolución de llamada. Para las solicitudes de Place Details, si no especifica al menos un campo con una solicitud o, si omites elfields
de una solicitud, se devolverán TODOS los campos posibles y se facturarán según corresponda. Consulta la guía para obtener una lugar por ID.
Cuando solicitas un lugar, debes especificar qué tipos de datos de lugar deseas
el resultado. Para ello, pasa un GMSPlaceField
en el que se especifiquen los datos
tipos que se deben mostrar. Esta es una consideración importante, ya que afectará el
costo de cada solicitud.
Dado que los resultados de datos de lugares no pueden estar vacíos, solo podrás
se devuelven resultados con datos (por ejemplo, si un sitio 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 muestra 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.
El
GMSPlace
puede contener los siguientes datos de lugar:
name
: es el nombre del lugar.editorialSummary
: Proporciona una descripción simple de un lugar.placeID
: Es el identificador textual del lugar. Leído para obtener 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. especificadas como coordenadas de latitud y longitud.phoneNumber
: el número de teléfono del lugar, en formato internacional.formattedAddress
: la dirección legible por humanos 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
: el horario de atención del lugar (como representado porGMSOpeningHours
). LlamadaGMSOpeningHours.weekdayText
para obtener una lista de cadenas localizadas del horario de atención diario de la semana. Llamar alGMSOpeningHours.Periods
Para mostrar una lista de objetosGMSPeriod
con información más detallada que equivale a los datos proporcionados porweekdayText
. Nota: Si un lugar siempre está abierto, el período se representa de la siguiente manera: domingo a la medianoche ycloseEvent
es nulo.currentOpeningHours
ysecondaryOpeningHours
: Son los campos que suponen cambios temporales y de días festivos en el horario de un lugar.addressComponents
: Es un array de ObjetosGMSAddressComponent
que representan 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 dar formato a las direcciones; en su lugar, usaformattedAddress
. que proporciona una dirección con formato localizada.Ten en cuenta los siguientes datos sobre
addressComponents
matriz:- El array de componentes de dirección puede incluir más componentes que el
formattedAddress
- El array no incluye necesariamente todas las entidades políticas que
contienen una dirección, además de las incluidas en el
formattedAddress
- No se garantiza que el formato de la respuesta permanezca igual entre
solicitudes. En particular, la cantidad de
addressComponents
varía según la dirección solicitada y puede cambiar con el tiempo para el misma dirección. Un componente puede cambiar de posición en el array. El tipo de componente puede cambiar. Un componente en particular puede ser en una respuesta posterior.
- El array de componentes de dirección puede incluir más componentes que el
userRatingsTotal
: Representa la cantidad de opiniones que componen la calificación del lugar.
El
GMSPlace
contiene las siguientes funciones de los miembros:
-
isOpen
calcula si un lugar está abierto en un momento determinado. basado enopeningHours
yUTCOffsetMinutes
, y la fecha y hora actuales. isOpenAtDate
calcula si un lugar está abierto en una fecha dada segúnopeningHours
yUTCOffsetMinutes
, y la fecha y hora actuales.
Cuando uses estas funciones para obtener los horarios o las fechas de apertura, la versión original
fetchPlaceFromPlaceID:
o findPlaceLikelihoodsFromUserLocationWithPlaceFields:
la solicitud debe especificar TANTO GMSPlaceFieldOpeningHours
como GMSPlaceFieldUTCOffsetMinutes
. Si falta alguno de estos campos, la GMSPlace
resultante
objeto no contendrá los horarios o las fechas de apertura, y la llamada mostrará
GMSPlaceOpenStatusUnknown
Para garantizar resultados exactos, solicita
GMSPlaceFieldBusinessStatus
y GMSPlaceFieldUTCOffsetMinutes
campos en tu solicitud de lugar original. Si no se solicita, se supone que
de que la empresa esté operativa.
isOpen
con Place Details.
Consigue horarios excepcionales
Si bien el horario de atención habitual se obtiene a través deopeningHours
, currentOpeningHours
y secondaryOpeningHours
admiten cambios temporales en los horarios y los días feriados.
Puedes filtrar y presentar los horarios de excepción de estos días especiales si están disponibles.
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
con el SDK de Places para iOS, puedes recuperar el ID de un sitio de un
GMSPlace
. Puedes almacenar el id. de sitio y usarlo para recuperar la
GMSPlace
de ese objeto de nuevo más adelante.
Para obtener un lugar por ID, llama a
GMSPlacesClient
fetchPlaceFromPlaceID:
, que 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 mostrarán. - Un token de sesión si se realiza la llamada para concluir una consulta 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
GMSPlace
. Si no se encuentra el sitio, el objeto de sitio es nil.
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
Cuándo muestra la app información obtenida de
GMSPlacesClient
lookUpPlaceID:callback:
, la app también debe mostrar 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 usado en el API de Places, SDK de Places para Android y otras APIs de Google.
Cada id. de sitio puede hacer referencia a un solo sitio, pero un solo sitio puede tener más. de un ID de lugar.
Existen circunstancias que pueden hacer que un sitio obtenga un nuevo ID de lugar. Esto, por ejemplo, puede suceder si un negocio se muda a otro lugar.
Cuando solicitas un sitio mediante la especificación de 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 que diferente de la que aparece en tu solicitud.
Para obtener más información, consulta la Descripción general de los IDs de lugar.