Для запроса фотографий мест, отображаемых в вашем приложении, вы можете использовать SDK Places для iOS (устаревшая версия). Фотографии, возвращаемые сервисом, поступают из различных источников, включая владельцев бизнеса и фотографии, предоставленные пользователями. Чтобы получить фотографии для места, необходимо выполнить следующие шаги:
- Вызовите метод
[GMSPlacesClient fetchPlaceFromPlaceId], передав строку с идентификатором места и функцией обратного вызова. Это вызовет функцию обратного вызова с объектомGMSPlacePhotoMetadataList. - В объекте
GMSPlacePhotoMetadataListперейдите в свойствоresultsи выберите фотографии для загрузки из массива. - Для загрузки каждого
GMSPlacePhotoMetadataиз этого списка вызовите[GMSPlacesClient loadPlacePhoto:callback:]или[GMSPlacesClient loadPlacePhoto:constrainedToSize:scale:callback:]. Эти вызовы передадут в функцию обратного вызова пригодный для использования объект UIImage. Фотографии могут иметь максимальную ширину или высоту 1600 пикселей.
Пример кода
Приведенный ниже пример метода принимает идентификатор места и получает первую фотографию из возвращаемого списка. Вы можете использовать этот метод в качестве шаблона для метода, который вы создадите в своем собственном приложении.
Быстрый
// 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; } }]; } }];
Кэширование
Фотографии, загруженные с помощью [GMSPlacesClient loadPlacePhoto:callback:] или [GMSPlacesClient loadPlacePhoto:constrainedToSize:scale:callback:] кэшируются как на диске, так и в оперативной памяти системой загрузки URL-адресов Foundation в общем кэше NSURLCache .
Для настройки поведения кэширования вы можете изменить общий URL-кэш, используя [NSURLCache setSharedURLCache:] в методе application application:didFinishLaunchingWithOptions: вашего делегата приложения.
Если вы не хотите, чтобы ваше приложение использовало общий кэш NSURLCache с Places SDK для iOS, вы можете создать новый кэш NSURLCache и использовать его исключительно в своем приложении, не указывая его в качестве общего кэша.
Атрибуция
In most cases, place photos can be used without attribution, or will have the required attribution included as part of the image. However, if the returned GMSPlacePhotoMetadata instance includes an attribution, you must include the additional attribution in your application wherever you display the image. Note that links in the attribution must be tappable. See the documentation on attributions .
Ограничения на использование
Для получения изображения требуется одна единица квоты; ограничений на использование метаданных фотографий нет. Подробнее об использовании и оплате .