Place Photos

Puedes usar el SDK de Places para iOS para solicitar fotos de lugares y mostrarlas en tu aplicación. Las fotos que muestra el servicio Photos provienen de una variedad de fuentes, incluidas las fotos proporcionadas por los propietarios de las empresas y los aportes de los usuarios. Para recuperar fotos de un lugar, debes seguir estos pasos:

  1. Llama a [GMSPlacesClient fetchPlaceFromPlaceId] y pasa una cadena con un ID de lugar y una devolución de llamada. Esto llamará a la devolución de llamada con un objeto GMSPlacePhotoMetadataList.
  2. En el objeto GMSPlacePhotoMetadataList, accede a la propiedad results y selecciona las fotos que se cargarán desde el array.
  3. Para cada GMSPlacePhotoMetadata que se cargue desde esta lista, llama a [GMSPlacesClient loadPlacePhoto:callback:] o [GMSPlacesClient loadPlacePhoto:constrainedToSize:scale:callback:]. Estos llamarán al callback con un UIImage utilizable. Las fotos pueden tener un ancho o alto máximo de 1,600 píxeles.

Código de muestra

El siguiente método de ejemplo toma un ID de lugar y obtiene la primera foto de la lista devuelta. Puedes usar este método como plantilla para el método que crearás en tu propia app.

Swift

// Specify the place data types to return (in this case, just photos).
let fields: GMSPlaceField = GMSPlaceField(rawValue: UInt(GMSPlaceField.photos.rawValue))!

placesClient?.fetchPlace(fromPlaceID: "INSERT_PLACE_ID_HERE",
                         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 {
    // Get the metadata for the first photo in the place photo metadata list.
    let photoMetadata: GMSPlacePhotoMetadata = place.photos![0]

    // Call loadPlacePhoto to display the bitmap and attribution.
    self.placesClient?.loadPlacePhoto(photoMetadata, callback: { (photo, error) -> Void in
      if let error = error {
        // TODO: Handle the error.
        print("Error loading photo metadata: \(error.localizedDescription)")
        return
      } else {
        // Display the first image and its attributions.
        self.imageView?.image = photo;
        self.lblText?.attributedText = photoMetadata.attributions;
      }
    })
  }
})

Objective-C

// Specify the place data types to return (in this case, just photos).
GMSPlaceField fields = (GMSPlaceFieldPhotos);

NSString *placeId = @"INSERT_PLACE_ID_HERE";

[_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) {
    GMSPlacePhotoMetadata *photoMetadata = [place photos][0];
    [self->_placesClient loadPlacePhoto:photoMetadata callback:^(UIImage * _Nullable photo, NSError * _Nullable error) {
      if (error != nil) {
        NSLog(@"Error loading photo metadata: %@", [error localizedDescription]);
        return;
      } else {
        // Display the first image and its attributions.
        self->imageView.image = photo;
        self->lblText.attributedText = photoMetadata.attributions;
      }
    }];
  }
}];

Almacenamiento en caché

El sistema de carga de URLs de Foundation almacena en caché las fotos cargadas con [GMSPlacesClient loadPlacePhoto:callback:] o [GMSPlacesClient loadPlacePhoto:constrainedToSize:scale:callback:] en el disco y en la memoria del NSURLCache compartido.

Para configurar el comportamiento del almacenamiento en caché, puedes cambiar la caché de URL compartida con [NSURLCache setSharedURLCache:] en el método application:didFinishLaunchingWithOptions: del delegado de tu aplicación.

Si no quieres que tu aplicación comparta un NSURLCache con el SDK de Places para iOS, puedes crear un nuevo NSURLCache y usarlo exclusivamente en tu app sin configurarlo como la caché compartida.

Atribuciones

En la mayoría de los casos, las fotos de lugares se pueden usar sin atribución o incluirán la atribución requerida como parte de la imagen. Sin embargo, si la instancia de GMSPlacePhotoMetadata que se muestra incluye una atribución, deberás incluir la atribución adicional en tu aplicación en cualquier lugar donde muestres la imagen. Ten en cuenta que los vínculos en la atribución deben ser aptos para hacer clic. Consulta la documentación sobre atribuciones.

Límites de uso

Recuperar una imagen cuesta una unidad de cuota. No hay límites de uso para recuperar metadatos de fotos. Obtén más información sobre el uso y la facturación.