Puoi utilizzare il nuovo SDK Places for iOS per richiedere di visualizzare le foto dei luoghi nella tua applicazione. Le foto restituite dal servizio di foto provengono da diverse fonti, tra cui proprietari di attività e foto inviate dagli utenti.
Le foto sono immagini bitmap rappresentate da un UIImage. Un'immagine bitmap ha una dimensione massima di 4800 x 4800 pixel.
Richiedi un'immagine
Puoi richiedere fino a 10 foto per un luogo:
Chiama
[GMSPlacesClient lookUpPhotosForPlaceID]
, passando un ID luogo e unGMSPlacePhotoMetadataResultCallback
. Questa richiesta chiama la funzione di callbackGMSPlacePhotoMetadataResultCallback
con un oggettoGMSPlacePhotoMetadataList
.Dall'oggetto
GMSPlacePhotoMetadataList
nel callback, il valoreresults
contiene le foto, dove ognuna è rappresentata da unGMSPlacePhotoMetadata
.Utilizza l'oggetto
GMSPlacePhotoMetadata
per creare un'istanzaGMSFetchPhotoRequest
, incluse le dimensioni massime dell'immagine richiesta.Per ogni oggetto
GMSPlacePhotoMetadata
nell'array, richiama[GMSPlacesClient fetchPhotoWithRequest:callback:]
passando l'oggettoGMSFetchPhotoRequest
. Questo metodo chiamaGMSFetchPhotoResultCallback
con un'immagine bitmap utilizzabile come UIImage.
Un altro modo per richiedere foto di un luogo è inviare una richiesta Place Details (New) (Dettagli del luogo (nuovo)) includendo GMSPlacePropertyPhotos
nell'elenco dei campi. Il vantaggio di realizzare
La chiamata Dettagli luogo indica che la risposta
GMSPlace
può contenere le foto e tutti gli altri campi dati che desideri
in quel luogo.
Codice di esempio
Il seguente metodo di esempio utilizza un ID luogo e ottiene la prima foto nel elenco restituito. Puoi usare questo metodo come modello per il metodo che utilizzerai che puoi creare nella tua 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 Places Swift per iOS (anteprima)
// 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 }
Memorizzazione nella cache
Le foto caricate utilizzando [GMSPlacesClient loadPlacePhoto:callback:]
o [GMSPlacesClient loadPlacePhoto:constrainedToSize:scale:callback:]
vengono memorizzate nella cache sia su disco che 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 dell'URL condiviso utilizzando
[NSURLCache setSharedURLCache:]
nel application:didFinishLaunchingWithOptions:
del delegato della tua applicazione
.
Se non vuoi che la tua applicazione condivida un NSURLCache
con l'SDK di Places per iOS, puoi creare un nuovo NSURLCache
e utilizzarlo esclusivamente all'interno della tua app senza impostarlo come cache condivisa.
Attribuzioni
Nella maggior parte dei casi, le foto dei luoghi possono essere utilizzate senza attribuzione o avranno la
attribuzione obbligatoria inclusa nell'immagine. Tuttavia, se l'oggetto restituito
GMSPlacePhotoMetadata
include qualsiasi istanza
attributions
o
authorAttribution
,
devi includere queste attribuzioni nell'applicazione ovunque mostri
dell'immagine. Consulta la documentazione su
attribuzioni.