Puoi utilizzare l'SDK Places per iOS per richiedere la visualizzazione di foto dei luoghi nella tua applicazione. Le foto restituite dal servizio foto provengono da diverse fonti, tra cui i proprietari di attività e le foto fornite dagli utenti. Per recuperare le foto di un luogo, procedi nel seguente modo:
- Chiama
[GMSPlacesClient fetchPlaceFromPlaceId]
, passando una stringa con un ID luogo e un callback. Il callback verrà chiamato con un oggettoGMSPlacePhotoMetadataList
. - Nell'oggetto
GMSPlacePhotoMetadataList
, accedi alla proprietàresults
e seleziona le foto da caricare dall'array. - Per ogni
GMSPlacePhotoMetadata
da caricare da questo elenco, chiama[GMSPlacesClient loadPlacePhoto:callback:]
o[GMSPlacesClient loadPlacePhoto:constrainedToSize:scale:callback:]
. che chiamerà il callback con un UIImage utilizzabile. Le foto possono avere una larghezza o un'altezza massima di 1600 pixel.
Codice campione
Il seguente metodo di esempio utilizza un ID luogo e ottiene la prima foto nell'elenco restituito. Puoi utilizzare questo metodo come modello per il metodo che creerai nella tua 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; } }]; } }];
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 URL di base
nell'area NSURLCache
condivisa.
Per configurare il comportamento della memorizzazione nella cache, puoi modificare la cache dell'URL condivisa utilizzando [NSURLCache setSharedURLCache:]
nel metodo application:didFinishLaunchingWithOptions:
del delegato della tua applicazione.
Se non vuoi che la tua applicazione condivida un NSURLCache
con l'SDK Places per iOS, puoi creare un nuovo NSURLCache
e utilizzarlo esclusivamente nella tua app senza impostarlo come cache condivisa.
Attribuzioni
Nella maggior parte dei casi, le foto dei luoghi possono essere utilizzate senza attribuzione o avranno
l'attribuzione richiesta inclusa all'interno dell'immagine. Tuttavia, se l'istanza GMSPlacePhotoMetadata
restituita include un'attribuzione, devi includerla nell'applicazione ovunque mostri l'immagine. Tieni presente che devi toccare i link
nell'attribuzione. Consulta la documentazione sulle attribuzioni.
Limiti di utilizzo
Il recupero di un'immagine costa un'unità di quota; non sono previsti limiti di utilizzo per il recupero dei metadati delle foto. Ulteriori informazioni su utilizzo e fatturazione.