Puedes usar el SDK de Places para iOS (nuevo) para solicitar fotos de lugares que se muestren 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.
Las fotos son imágenes de mapa de bits representadas por un objeto UIImage. Una imagen de mapa de bits tiene un tamaño máximo de 4,800 por 4,800 píxeles.
Cómo solicitar una imagen
Puedes solicitar hasta 10 fotos para un lugar:
Llama a
[GMSPlacesClient lookUpPhotosForPlaceID]
y pasa un ID de lugar y una devolución de llamadaGMSPlacePhotoMetadataResultCallback
. Esta solicitud llama a la devolución de llamadaGMSPlacePhotoMetadataResultCallback
con un objetoGMSPlacePhotoMetadataList
.Desde el objeto
GMSPlacePhotoMetadataList
en la devolución de llamada, la propiedad del arrayresults
contiene las fotos, en las que cada foto está representada por un objetoGMSPlacePhotoMetadata
.Usa el objeto
GMSPlacePhotoMetadata
para crear unGMSFetchPhotoRequest
, incluido el tamaño máximo de la imagen solicitada.Para cada objeto
GMSPlacePhotoMetadata
en el array, llama a[GMSPlacesClient fetchPhotoWithRequest:callback:]
y pasa el objetoGMSFetchPhotoRequest
. Este método llama a la devolución de llamadaGMSFetchPhotoResultCallback
con una imagen de mapa de bits que se puede usar como UIImage.
Otra forma de solicitar fotos de un lugar es realizar una solicitud de Place Details (New), que incluye GMSPlacePropertyPhotos
en la lista de campos. La ventaja de realizar una llamada a Place Details es que el objeto de respuesta GMSPlace
puede contener las fotos y cualquier otro campo de datos que desees para el lugar.
Código de muestra
En el siguiente ejemplo de método, se toma un ID de lugar y se obtiene la primera foto de la lista que se muestra. Puedes usar este método como plantilla para el método que crearás en tu propia app.
Swift
// A hotel in Saigon with an attribution. let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs" // Request list of photos for a place placesClient.lookUpPhotos(forPlaceID: placeID) { (photos, error) in guard let photoMetadata: GMSPlacePhotoMetadata = photos?.results[0] else { return } // Request individual photos in the response list let fetchPhotoRequest = GMSFetchPhotoRequest(photoMetadata: photoMetadata, maxSize: CGSizeMake(4800, 4800)) self.client.fetchPhoto(with: fetchPhotoRequest, callback: { (photoImage: UIImage?, error: Error?) in guard let photoImage, error == nil else { print("Handle photo error: ") return } print("Display photo Image: ") } ) }
Objective-C
// A hotel in Saigon with an attribution. NSString *placeID = @"ChIJV4k8_9UodTERU5KXbkYpSYs"; [placesClient lookUpPhotosForPlaceID:placeID callback: ^(GMSPlacePhotoMetadataList *list, NSError *error) { GMSPlacePhotoMetadata *photoMetadata = [list results][0]; // Request individual photos in the response list GMSFetchPhotoRequest *fetchPhotoRequest = [[GMSFetchPhotoRequest alloc] initWithPhotoMetadata:photoMetadata maxSize:CGSizeMake(4800, 4800)]; [placesClient fetchPhotoWithRequest:fetchPhotoRequest callback: ^(UIImage *_Nullable photoImage, NSError *_Nullable error) { if (error == nil) { // Display photo } }]; }];
SDK de Places Swift para iOS (versión preliminar)
// First fetch place details // A hotel in Saigon with an attribution. let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs" let fetchPlaceRequest = FetchPlaceRequest( placeID: placeID, placeProperties: [ . name, .website ] ) var fetchedPlace: Place switch await placesClient.fetchPlace(with: fetchPlaceRequest) { case .success(let place): fetchedPlace = place case .failure(let placesError): // Handle error } // Use the place details to fetch a photo's image. guard let photo = fetchedPlace.photos?.first else { // Handle place without photos. } let fetchPhotoRequest = FetchPhotoRequest(photo: photo, maxSize: CGSizeMake(4800, 4800)) switch await placesClient.fetchPhoto(with: fetchPhotoRequest) { case .success(let uiImage): // Handle image. case .failure(let placesError): // Handle error }
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 en el NSURLCache
compartido.
Para configurar el comportamiento de almacenamiento en caché, puedes cambiar la caché de URL compartida con [NSURLCache setSharedURLCache:]
en el método application:didFinishLaunchingWithOptions:
del delegado de la aplicación.
Si no quieres que tu aplicación comparta un NSURLCache
con el SDK de Places para iOS, puedes crear un NSURLCache
nuevo 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 bien incluirán la atribución requerida como parte de la imagen. Sin embargo, si la instancia de GMSPlacePhotoMetadata
que se muestra incluye attributions
o authorAttribution
, debes incluir estas atribuciones en tu aplicación en cualquier lugar donde muestres la imagen. Consulta la documentación sobre atribuciones.