Foto del luogo (novità)

Seleziona la piattaforma: Android iOS Web Service

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 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:

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

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

  3. Utilizza l'oggetto GMSPlacePhotoMetadata per creare un GMSFetchPhotoRequest, incluse le dimensioni massime dell'immagine richiesta.

  4. Per ogni oggetto GMSPlacePhotoMetadata nell'array, chiama [GMSPlacesClient fetchPhotoWithRequest:callback:] passando l'oggetto GMSFetchPhotoRequest. Questo metodo chiama il callback GMSFetchPhotoResultCallback 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 effettuare una chiamata di dettagli del luogo è che l'oggetto risposta GMSPlace può contenere le foto e qualsiasi altro campo di dati che ti interessano per il luogo.

Codice di esempio

Il seguente metodo di esempio prende 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.

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 della memorizzazione nella cache, puoi modificare la cache degli URL condivisi utilizzando [NSURLCache setSharedURLCache:] nel metodo application:didFinishLaunchingWithOptions: del tuo delegante dell'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 l'attribuzione obbligatoria sarà inclusa nell'immagine. Tuttavia, se l'istanza di GMSPlacePhotoMetadata restituito include qualsiasi attributions o authorAttribution, devi includere queste attribuzioni nella tua applicazione ovunque mostri l'immagine. Consulta la documentazione relativa alle attribuzione.