Você pode usar o SDK do Places para iOS para solicitar que fotos de lugares sejam exibidas no seu aplicativo. Fotos retornadas pelo serviço de fotos têm diversas origens, incluindo proprietários de empresas e fotos enviadas por 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 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
para carregar a partir 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 uma altura máxima de 1600 pixels.
Exemplo de código
O exemplo de método a seguir usa um ID de local e busca a primeira foto da lista retornada. Use esse método como um modelo para o método que você criará no seu próprio aplicativo.
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 do URL de fundação no NSURLCache
compartilhado.
Para configurar o comportamento de armazenamento em cache, altere 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 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 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 extra
no aplicativo sempre que a imagem for exibida. Os links na
atribuição precisam ser tocáveis. Consulte a documentação sobre atribuições.
Limites de uso
Recuperar uma imagem custa uma unidade de cota. Não há limites de uso para recuperar metadados de foto. Leia mais sobre uso e faturamento.