Place Details (nuevo)

Selecciona la plataforma: Android iOS JavaScript Servicio web

El SDK de Places para iOS (nuevo) proporciona a tu app información enriquecida sobre los lugares, incluido el nombre y la dirección, 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.

Cómo obtener detalles de un lugar

La clase GMSPlace contiene información sobre un lugar específico, incluidos todos los campos de datos que se muestran en Campos de datos de Place (nuevos). Para obtener un objeto GMSPlace, llama a GMSPlacesClient fetchPlaceWithRequest:, pasa un objeto GMSFetchPlaceRequest y un método de devolución de llamada de tipo GMSPlaceResultCallback.

El objeto GMSFetchPlaceRequest especifica lo siguiente:

  • (Obligatorio) El ID de lugar, un identificador único para un lugar en la base de datos de Google Places y en Google Maps.
  • (Obligatorio) Es la lista de campos que se mostrarán en el objeto GMSPlace, también llamada máscara de campo, como se define en GMSPlaceProperty. Si no especificas al menos un campo en la lista de campos o si omites la lista de campos, la llamada mostrará un error.
  • (Opcional) Es el código de región que se usa para dar formato a la respuesta.
  • (Opcional) Es el token de sesión que se usa para finalizar una sesión de Autocomplete (nueva).

Cómo realizar una solicitud de 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.
  • Es una lista de campos que especifica que se debe mostrar el nombre del lugar y la URL del sitio web.
  • 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.

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);
  }
}];

SDK de Places Swift para iOS (versión preliminar)

// 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
}

Respuesta de Place Details

Place Details muestra un objeto GMSPlace que contiene detalles sobre el lugar. Solo se propagan en el objeto GMSPlace los campos especificados en la lista de campos.

Cómo obtener el estado de abierto

El objeto GMSPlacesClient contiene una función miembro llamada isOpenWithRequest (isOpenRequest en Swift y isPlaceOpenRequest en GooglePlacesSwift) que muestra una respuesta que indica si el lugar está abierto en el momento en que se realiza la llamada.

Este método toma un solo argumento de tipo GMSPlaceIsOpenWithRequest que contiene lo siguiente:

  • Un objeto GMSPlace o una cadena que especifique un ID de lugar Para obtener más información sobre cómo crear el objeto Place con los campos necesarios, consulta Detalles de Place.
  • Es un objeto NSDate (Obj-C) o Date (Swift) opcional que especifica la hora que deseas verificar. Si no se especifica la hora, el valor predeterminado es la hora actual.
  • Un método GMSPlaceOpenStatusResponseCallback para controlar la respuesta.
  • >

El método GMSPlaceIsOpenWithRequest requiere que se establezcan los siguientes campos en el objeto GMSPlace:

  • GMSPlacePropertyUTCOffsetMinutes
  • GMSPlacePropertyBusinessStatus
  • GMSPlacePropertyOpeningHours
  • GMSPlacePropertyCurrentOpeningHours
  • GMSPlacePropertySecondaryOpeningHours

Si no se proporcionan estos campos en el objeto Place o si pasas un ID de lugar, el método usa GMSPlacesClient GMSFetchPlaceRequest: para recuperarlos.

isOpenWithRequest respuesta

isOpenWithRequest muestra 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
Swift .open .closed .unknown
Objective-C GMSPlaceOpenStatusOpen GMSPlaceOpenStatusClosed GMSPlaceOpenStatusUnknown
GooglePlacesSwift (versión preliminar) true false nil

Facturación de isOpenWithRequest

  • Los campos GMSPlacePropertyUTCOffsetMinutes y GMSPlacePropertyBusinessStatus se cobran en el SKU de Basic Data. El resto de los horarios de atención se cobran con el SKU de Place Details (Advanced).
  • Si tu objeto GMSPlace ya tiene estos campos de una solicitud anterior, no se te volverá a cobrar.

Ejemplo: Realiza una solicitud GMSPlaceIsOpenWithRequest

En el siguiente ejemplo, se muestra cómo inicializar un GMSPlaceIsOpenWithRequest dentro de un objeto GMSPlace existente.

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
            }
          }];
          

GooglePlacesSwift

          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
          }
          

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 confiar en 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 sea diferente del que aparece en tu solicitud.

Lista de campos

Cuando solicites detalles del lugar, debes especificar los datos que se mostrarán en el objeto GMSPlace del lugar como una máscara de campo. Para definir la máscara de campo, pasa un array de valores de GMSPlaceProperty al objeto GMSFetchPlaceRequest. La máscara de campo 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 (solo ID):

    GMSPlacePropertyPlaceID, GMSPlacePropertyName, GMSPlacePropertyPhotos

  • Los siguientes campos activan el SKU de Place Details (Location Only):

    GMSPlacePropertyAddressComponents, GMSPlacePropertyFormattedAddress, GMSPlacePropertyCoordinate, GMSPlacePropertyPlusCode, GMSPlacePropertyTypes, GMSPlacePropertyViewport

  • Los siguientes campos activan el SKU de Place Details (Basic):

    GMSPlacePropertyBusinessStatus, GMSPlacePropertyIconBackgroundColor, GMSPlacePropertyIconImageURL, GMSPlacePropertyUTCOffsetMinutes, GMSPlacePropertyWheelchairAccessibleEntrance

  • Los siguientes campos activan el SKU de Place Details (Advanced):

    GMSPlacePropertyCurrentOpeningHours, GMSPlacePropertySecondaryOpeningHours, GMSPlacePropertyPhoneNumber, GMSPlacePropertyPriceLevel, GMSPlacePropertyRating, GMSPlacePropertyOpeningHours, GMSPlacePropertyUserRatingsTotal, GMSPlacePropertyWebsite

  • Los siguientes campos activan el SKU de Place Details (Preferred):

    GMSPlacePropertyCurbsidePickup, GMSPlacePropertyDelivery, GMSPlacePropertyDineIn, GMSPlacePropertyEditorialSummary, GMSPlacePropertyReservable, GMSPlacePropertyReviews, GMSPlacePropertyServesBeer, GMSPlacePropertyServesBreakfast, GMSPlacePropertyServesBrunch, GMSPlacePropertyServesDinner, GMSPlacePropertyServesLunch, GMSPlacePropertyServesVegetarianFood, GMSPlacePropertyServesWine, GMSPlacePropertyTakeout

En el siguiente ejemplo, se pasa una lista de dos valores de campo para especificar que el objeto GMSPlace que muestra una solicitud contiene los campos name y placeID:

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];
  

SDK de Places Swift para iOS (versión preliminar)

// Specify the place data types to return.
let fields: [PlaceProperty] = [.placeID, .displayName]
    

Parámetros opcionales

Usa el objeto GMSFetchPlaceRequest para especificar los parámetros opcionales.

regionCode

Es 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 sesgado 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 "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 fases de consulta y selección de lugar 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 (New) que siguen a las llamadas a Autocomplete (New). 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 objetos GMSPlaceReview. Cada objeto GMSPlaceReview puede contener atribuciones y atribuciones de 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.