Foto del luogo (novità)

Puoi utilizzare Places SDK for iOS (novità) per richiedere le foto dei luoghi da visualizzare nella tua applicazione. Le foto restituite dal servizio foto provengono da varie fonti, tra cui proprietari di attività e foto fornite dagli utenti.

Le foto sono immagini bitmap rappresentate da un oggetto 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:

  1. Chiama [GMSPlacesClient lookUpPhotosForPlaceID], trasmettendo un ID luogo e un callback di GMSPlacePhotoMetadataResultCallback. Questa richiesta chiama il callback GMSPlacePhotoMetadataResultCallback con un oggetto GMSPlacePhotoMetadataList.

  2. Dall'oggetto GMSPlacePhotoMetadataList nel callback, la proprietà dell'array results contiene le foto, dove ogni foto è rappresentata da un oggetto GMSPlacePhotoMetadata.

  3. Per ogni oggetto GMSPlacePhotoMetadata nell'array, richiama [GMSPlacesClient loadPlacePhoto:callback:] o [GMSPlacesClient loadPlacePhoto:constrainedToSize:scale:callback:]. Questi metodi chiamano il callback con un'immagine bitmap utilizzabile come UIImage.

Un altro modo per richiedere le foto di un luogo è effettuare una richiesta Dettagli luogo (nuova), includendo GMSPlacePropertyPhotos nell'elenco dei campi. Il vantaggio di effettuare una chiamata Dettagli luogo è che l'oggetto GMSPlace di risposta può contenere le foto e tutti gli altri campi di dati che vuoi per il luogo.

Codice campione

Il seguente metodo di esempio utilizza un ID luogo e ottiene la prima foto nell'elenco dei risultati restituiti. Puoi utilizzare questo metodo come modello per il metodo che creerai 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 = photos.first else { return }

  // Request individual photos in the response list
  let fetchPhotoRequest = GMSFetchPhotoRequest(metadata: photoMetadata, maxSize: CGSizeMake(4800, 4800)
  placesClient.fetchPhoto(fetchPhotoRequest: fetchPhotoRequest, callback: {
    (photoURL: URL?, error: Error?) in
      guard let photoURL, error == nil else { return }
      print("Photo URL: \(photoURL)")
  })
};

Objective-C

// A hotel in Saigon with an attribution.
NSString *placeID = @"ChIJV4k8_9UodTERU5KXbkYpSYs";

[placesClient lookUpPhotosForPlaceID:placeID callback: (GMSPlacePhotoMetadataList *list, NSError *error) {
  GMSPlacePhotoMetadata *photoMetadata = [list firstObject];

  if (photoMetadata == nil) { return }

  // Request individual photos in the response list
  GMSFetchPhotoRequest *fetchPhotoRequest = [[GMSFetchPhotoRequest alloc] initWithPhotoMetadata:photoMetadata maxSize:CGSizeMake(4800, 4800)];
  [placesClient fetchPhoto:fetchPhotoRequest, callback: ^(NSURL *_Nullable photoURL, NSError *_Nullable error) {
    if (error == null) {
      NSLog(@"Photo URL: %@", photoURL)
    }
  }];
}];

GooglePlacesSwift

// 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 sia in memoria dal sistema di caricamento dell'URL di base nell'NSURLCache condivisa.

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 un NSURLCache con l'SDK Places per iOS, puoi creare un nuovo NSURLCache e utilizzarlo esclusivamente all'interno dell'app senza impostarlo come cache condivisa.

Attribuzioni

Nella maggior parte dei casi, le foto dei luoghi possono essere utilizzate senza attribuzione o potranno includere l'attribuzione richiesta all'interno dell'immagine. Tuttavia, se l'istanza GMSPlacePhotoMetadata restituita include attributions o authorAttribution, devi includere queste attribuzioni nell'applicazione ovunque mostri l'immagine. Consulta la documentazione sulle attribuzioni.