Você pode usar o SDK do Places para iOS (nova geração) para solicitar fotos de lugares para mostrar no seu aplicativo. As fotos retornadas pelo serviço de fotos vêm de várias fontes, incluindo proprietários de empresas e fotos enviadas pelos usuários.
As fotos são imagens de bitmap representadas por um UIImage objeto. 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 de um lugar:
Chame
[GMSPlacesClient lookUpPhotosForPlaceID], transmitindo um ID de lugar e umGMSPlacePhotoMetadataResultCallbackcallback. Essa solicitação chama oGMSPlacePhotoMetadataResultCallbackcallback com umGMSPlacePhotoMetadataListobjeto.No objeto
GMSPlacePhotoMetadataListno callback, aresultspropriedade da matriz contém as fotos, em que cada foto é representada por umGMSPlacePhotoMetadataobjeto.Use o objeto
GMSPlacePhotoMetadatapara criar umGMSFetchPhotoRequest, incluindo o tamanho máximo da imagem solicitada.Para cada objeto
GMSPlacePhotoMetadatana matriz, chame[GMSPlacesClient fetchPhotoWithRequest:callback:]transmitindo o objetoGMSFetchPhotoRequest. Esse método chama oGMSFetchPhotoResultCallbackcallback com uma imagem de bitmap utilizável como um UIImage.
Outra maneira de solicitar fotos de um lugar é fazer uma
solicitação de Place Details (nova geração),
incluindo GMSPlacePropertyPhotos na lista de campos. A vantagem de fazer uma
chamada de Place Details é que o objeto de resposta
GMSPlace
pode conter as fotos e outros campos de dados que você quer para
o lugar.
Código de amostra
O método de exemplo a seguir recebe um ID de lugar e recebe a primeira foto na lista retornada. Você pode usar esse método como um modelo para o método que vai criar no seu próprio app.
SDK do Places para Swift
// 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 }
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 } }]; }];
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 da Foundation
no NSURLCache compartilhado.
Para configurar o comportamento de armazenamento em cache, você pode mudar o cache de URL compartilhado usando
[NSURLCache setSharedURLCache:]
no método application:didFinishLaunchingWithOptions:
do delegado do aplicativo.
Se você não quiser que o aplicativo compartilhe um NSURLCache com o SDK do Places para iOS, crie um novo NSURLCache e use-o exclusivamente no seu 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 a atribuição necessária será incluída na imagem. No entanto, se a instância retornada
GMSPlacePhotoMetadata
incluir
attributions
ou
authorAttribution,
você precisará incluir essas atribuições no aplicativo sempre que mostrar a
imagem. Consulte a documentação sobre
atribuições.