Place Photos (novo)

Selecione a plataforma: No Android iOS Serviço Web

Você pode usar o SDK do Places para iOS (novo) se quiser solicitar fotos de lugares para exibir no seu aplicativo. As fotos retornadas pelo serviço de fotos vêm de uma várias fontes, incluindo proprietários de empresas e fotos enviadas por usuários.

As fotos são imagens de bitmap representadas por um objeto UIImage. Uma imagem de bitmap tem um tamanho máximo de 4.800 por 4.800 pixels.

Solicitar uma imagem

Você pode solicitar até 10 fotos para um lugar:

  1. Ligação [GMSPlacesClient lookUpPhotosForPlaceID], passando um ID de local e Chamada de retorno de GMSPlacePhotoMetadataResultCallback. Essa solicitação chama o callback GMSPlacePhotoMetadataResultCallback com uma GMSPlacePhotoMetadataList objeto.

  2. No objeto GMSPlacePhotoMetadataList na chamada de retorno, a results matriz contém as fotos, em que cada foto é representada por um GMSPlacePhotoMetadata objeto.

  3. Use o objeto GMSPlacePhotoMetadata para criar um GMSFetchPhotoRequest, incluindo o tamanho máximo da imagem solicitada.

  4. Para cada objeto GMSPlacePhotoMetadata na matriz, chame [GMSPlacesClient fetchPhotoWithRequest:callback:] passando o objeto GMSFetchPhotoRequest. Este método chama o método GMSFetchPhotoResultCallback com uma imagem de bitmap utilizável como UIImage.

Outra forma de solicitar fotos de um lugar é fazer uma solicitação Place Details (novo), incluindo GMSPlacePropertyPhotos na lista de campos. A vantagem de fazer uma chamada Place Details é que a resposta GMSPlace pode conter as fotos e qualquer outro campo de dados que você deseja para o lugar.

Código de amostra

O exemplo de método a seguir coleta um ID de local e obtém a primeira foto na lista retornada. Você pode usar esse método como modelo para o método que criar no seu próprio 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 do Places Swift para iOS (pré-lançamento)

// 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
}

Armazenamento em cache

As fotos carregadas usando [GMSPlacesClient loadPlacePhoto:callback:] ou [GMSPlacesClient loadPlacePhoto:constrainedToSize:scale:callback:] são armazenadas em cache no disco e na memória pelo sistema de carregamento de URL Foundation no NSURLCache compartilhado.

Para configurar o comportamento do armazenamento em cache, altere o cache do URL compartilhado usando: [NSURLCache setSharedURLCache:] no application:didFinishLaunchingWithOptions: do delegado do aplicativo .

Se você não quiser que o aplicativo compartilhe um NSURLCache com o SDK do Places para iOS, você pode criar um novo NSURLCache e usá-lo exclusivamente dentro do app, sem defini-lo como cache compartilhado.

Atribuições

Na maioria dos casos, as fotos de lugares podem ser usadas sem atribuição ou atribuição necessária incluída na imagem. No entanto, se o GMSPlacePhotoMetadata instância inclui qualquer attributions ou authorAttribution, você deve incluir essas atribuições em seu aplicativo sempre que exibir o imagem. Consulte a documentação atribuições.