Puoi utilizzare Places SDK for iOS (New) per richiedere foto di luoghi da visualizzare nella tua applicazione. Le foto restituite dal servizio foto provengono da una varietà di fonti, tra cui proprietari di attività e foto inviate dagli utenti.
Le foto sono immagini bitmap rappresentate da un oggetto UIImage. Un'immagine bitmap ha una dimensione massima di 4800 x 4800 pixel.
Richiedere un'immagine
Puoi richiedere fino a 10 foto per un luogo:
Chiama
[GMSPlacesClient lookUpPhotosForPlaceID]
, passando un ID luogo e un callbackGMSPlacePhotoMetadataResultCallback
. Questa richiesta chiama il callbackGMSPlacePhotoMetadataResultCallback
con un oggettoGMSPlacePhotoMetadataList
.Dall'oggetto
GMSPlacePhotoMetadataList
nel callback, la proprietàresults
dell'array contiene le foto, dove ogni foto è rappresentata da un oggettoGMSPlacePhotoMetadata
.Utilizza l'oggetto
GMSPlacePhotoMetadata
per creare un'GMSFetchPhotoRequest
, inclusa la dimensione massima dell'immagine richiesta.Per ogni oggetto
GMSPlacePhotoMetadata
nell'array, chiama[GMSPlacesClient fetchPhotoWithRequest:callback:]
passando l'oggettoGMSFetchPhotoRequest
. Questo metodo chiama il callbackGMSFetchPhotoResultCallback
con un'immagine bitmap utilizzabile come UIImage.
Un altro modo per richiedere foto per un luogo è inviare una richiesta
Place Details (New),
inclusa GMSPlacePropertyPhotos
nell'elenco dei campi. Il vantaggio di effettuare una chiamata
Place Details è che l'oggetto
GMSPlace
può contenere le foto e qualsiasi altro campo di dati che ti interessa per
il luogo.
Codice di esempio
Il seguente metodo di esempio accetta un ID luogo e recupera la prima foto nell'elenco restituito. Puoi utilizzare questo metodo come modello per il metodo che creerai nella tua app.
Places Swift SDK
// 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 }
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 } }]; }];
Memorizzazione nella cache
Le foto caricate utilizzando [GMSPlacesClient loadPlacePhoto:callback:]
o [GMSPlacesClient loadPlacePhoto:constrainedToSize:scale:callback:]
vengono memorizzate nella cache sia su disco sia in memoria dal sistema di caricamento degli URL di Foundation
nel NSURLCache
condiviso.
Per configurare il comportamento di memorizzazione nella cache, puoi modificare la cache degli URL condivisi utilizzando
[NSURLCache setSharedURLCache:]
nel metodo application:didFinishLaunchingWithOptions:
del delegato dell'applicazione.
Se non vuoi che la tua applicazione condivida una NSURLCache
con l'SDK Places per iOS, puoi creare una nuova NSURLCache
e utilizzarla esclusivamente all'interno della tua app senza impostarla come cache condivisa.
Attribuzioni
Nella maggior parte dei casi, le foto dei luoghi possono essere utilizzate senza attribuzione o l'attribuzione richiesta è inclusa nell'immagine. Tuttavia, se l'istanza
GMSPlacePhotoMetadata
restituita include
attributions
o
authorAttribution
,
devi includere queste attribuzioni nella tua applicazione ovunque visualizzi l'immagine. Consulta la documentazione
sulle attribuzioni.