Você pode usar o SDK do Places para iOS e solicitar fotos de lugares para mostrar no seu aplicativo. Fotos retornadas pelo serviço de fotos têm origens variadas, incluindo proprietários de empresas e fotos enviadas por usuários. Para recuperar as fotos de um lugar, siga estas etapas:
- Chame
[GMSPlacesClient fetchPlaceFromPlaceId]
, transmitindo uma string com um ID de lugar e um callback. Isso chamará o callback com um objetoGMSPlacePhotoMetadataList
. - No objeto
GMSPlacePhotoMetadataList
, acesse a propriedaderesults
e selecione as fotos que serão carregadas da matriz. - Para cada
GMSPlacePhotoMetadata
a ser carregado dessa 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.
Exemplo de código
O método de exemplo a seguir usa um ID de lugar e extrai a primeira foto na lista retornada. Use esse método como modelo para o método que você criará 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 com [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 básico
no NSURLCache
compartilhado.
Para configurar o comportamento de armazenamento em cache, altere o cache do URL compartilhado usando
[NSURLCache setSharedURLCache:]
no método application:didFinishLaunchingWithOptions:
do delegado
do seu app.
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 seu app sem defini-lo como 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 na imagem. No entanto, se a instância
GMSPlacePhotoMetadata
retornada incluir uma atribuição, será necessário incluir a atribuição extra
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. Não há limites de uso para recuperar metadados de fotos. Leia mais sobre uso e faturamento.