É possível usar o SDK do Places para iOS para solicitar que fotos de locais sejam exibidas no seu aplicativo. As fotos retornadas pelo serviço de fotos têm origens variadas, incluindo proprietários de empresas e usuários. Para recuperar fotos de um lugar, siga estas etapas:
- Chame
[GMSPlacesClient fetchPlaceFromPlaceId]
, transmitindo uma string com um ID de lugar e um callback. Isso vai chamar o callback com um objetoGMSPlacePhotoMetadataList
. - No objeto
GMSPlacePhotoMetadataList
, acesse a propriedaderesults
e selecione as fotos a carregar da matriz. - Para cada
GMSPlacePhotoMetadata
a ser carregado desta lista, chame[GMSPlacesClient loadPlacePhoto:callback:]
ou[GMSPlacesClient loadPlacePhoto:constrainedToSize:scale:callback:]
. Eles chamarão o retorno de chamada com uma UIImage utilizável. As fotos podem ter uma largura ou altura máxima de 1.600 pixels.
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. Use esse método como modelo para criar o método no seu próprio app.
Swift
// Specify the place data types to return (in this case, just photos). let fields: GMSPlaceField = GMSPlaceField(rawValue: UInt(GMSPlaceField.photos.rawValue))! placesClient?.fetchPlace(fromPlaceID: "INSERT_PLACE_ID_HERE", placeFields: fields, sessionToken: nil, callback: { (place: GMSPlace?, error: Error?) in if let error = error { print("An error occurred: \(error.localizedDescription)") return } if let place = place { // Get the metadata for the first photo in the place photo metadata list. let photoMetadata: GMSPlacePhotoMetadata = place.photos![0] // Call loadPlacePhoto to display the bitmap and attribution. self.placesClient?.loadPlacePhoto(photoMetadata, callback: { (photo, error) -> Void in if let error = error { // TODO: Handle the error. print("Error loading photo metadata: \(error.localizedDescription)") return } else { // Display the first image and its attributions. self.imageView?.image = photo; self.lblText?.attributedText = photoMetadata.attributions; } }) } })
Objective-C
// Specify the place data types to return (in this case, just photos). GMSPlaceField fields = (GMSPlaceFieldPhotos); NSString *placeId = @"INSERT_PLACE_ID_HERE"; [_placesClient fetchPlaceFromPlaceID:placeId placeFields:fields sessionToken:nil callback:^(GMSPlace * _Nullable place, NSError * _Nullable error) { if (error != nil) { NSLog(@"An error occurred %@", [error localizedDescription]); return; } if (place != nil) { GMSPlacePhotoMetadata *photoMetadata = [place photos][0]; [self->_placesClient loadPlacePhoto:photoMetadata callback:^(UIImage * _Nullable photo, NSError * _Nullable error) { if (error != nil) { NSLog(@"Error loading photo metadata: %@", [error localizedDescription]); return; } else { // Display the first image and its attributions. self->imageView.image = photo; self->lblText.attributedText = photoMetadata.attributions; } }]; } }];
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 de armazenamento em cache, é possível mudar o cache de URLs compartilhados usando
[NSURLCache setSharedURLCache:]
no método application:didFinishLaunchingWithOptions:
do delegado do app.
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 app sem configurá-lo como o cache compartilhado.
Atribuições
Na maioria dos casos, fotos de locais 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 uma atribuição, será necessário incluir a atribuição adicional
no aplicativo sempre que você mostrar a imagem. Os links na
atribuição precisam ser tocáveis. Consulte a documentação sobre atribuições.
Limites de uso
A recuperação de uma imagem custa uma unidade de cota e não há limites de uso para recuperar metadados de fotos. Leia mais sobre uso e faturamento.