Você pode usar o SDK do Places para iOS (novo) para solicitar que fotos de lugares sejam exibidas no seu app. As fotos retornadas pelo serviço de fotos vêm de várias fontes, incluindo proprietários de empresas e imagens enviadas pelos usuários.
As fotos são imagens de bitmap representadas por um objeto UIImage. Uma imagem bitmap tem um tamanho máximo de 4.800 x 4.800 pixels.
Solicitar uma imagem
Você pode solicitar até 10 fotos para um lugar:
Chame
[GMSPlacesClient lookUpPhotosForPlaceID]
, transmitindo um ID de lugar e um callbackGMSPlacePhotoMetadataResultCallback
. Essa solicitação chama o callbackGMSPlacePhotoMetadataResultCallback
com um objetoGMSPlacePhotoMetadataList
.No objeto
GMSPlacePhotoMetadataList
do callback, a propriedade de matrizresults
contém as fotos, em que cada uma é representada por um objetoGMSPlacePhotoMetadata
.Use o objeto
GMSPlacePhotoMetadata
para criar umGMSFetchPhotoRequest
, incluindo o tamanho máximo da imagem solicitada.Para cada objeto
GMSPlacePhotoMetadata
na matriz, chame[GMSPlacesClient fetchPhotoWithRequest:callback:]
transmitindo o objetoGMSFetchPhotoRequest
. Esse método chama o callbackGMSFetchPhotoResultCallback
com uma imagem de bitmap utilizável como UIImage.
Outra maneira de solicitar fotos de um lugar é fazer uma solicitação de Detalhes do lugar (novo), incluindo GMSPlacePropertyPhotos
na lista de campos. A vantagem de fazer uma chamada de detalhes do lugar é que o objeto de resposta GMSPlace
pode conter as fotos e outros campos de dados que você quiser para o lugar.
Código de amostra
O exemplo de método a seguir usa um ID de lugar e recebe a primeira foto na lista retornada. Você pode usar esse método como modelo para o método que vai criar no seu 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 do Foundation
no NSURLCache
compartilhado.
Para configurar o comportamento de armazenamento em cache, é possível mudar o cache de URL compartilhado usando
[NSURLCache setSharedURLCache:]
no método application:didFinishLaunchingWithOptions:
do delegado do aplicativo.
Se você não quiser que seu aplicativo compartilhe um NSURLCache
com o
SDK do Places para iOS, crie um novo NSURLCache
e use-o
exclusivamente no app sem defini-lo como o cache compartilhado.
Atribuições
Na maioria dos casos, as fotos de lugares podem ser usadas sem atribuição ou terão a
atribuição necessária incluída como parte da imagem. No entanto, se a instância
GMSPlacePhotoMetadata
retornada incluir qualquer
attributions
ou
authorAttribution
,
é necessário incluir essas atribuições no seu app sempre que você mostrar a
imagem. Consulte a documentação sobre
atribuições.