Вы можете использовать Places SDK для iOS, чтобы запросить фотографии мест для отображения в вашем приложении. Фотографии, возвращаемые службой фотографий, поступают из разных источников, включая фотографии владельцев бизнеса и фотографии, предоставленные пользователями. Чтобы получить фотографии для места, необходимо выполнить следующие действия:
- Вызовите
[GMSPlacesClient fetchPlaceFromPlaceId]
, передав строку с идентификатором места и обратным вызовом. Это вызовет обратный вызов с объектомGMSPlacePhotoMetadataList
. - В объекте
GMSPlacePhotoMetadataList
откройте свойствоresults
и выберите фотографии для загрузки из массива. - Для загрузки каждого
GMSPlacePhotoMetadata
из этого списка вызовите[GMSPlacesClient loadPlacePhoto:callback:]
или[GMSPlacesClient loadPlacePhoto:constrainedToSize:scale:callback:]
. Они вызовут обратный вызов с пригодным для использования UIImage. Фотографии могут иметь максимальную ширину или высоту 1600 пикселей.
Пример кода
Следующий пример метода берет ID места и получает первую фотографию в возвращенном списке. Вы можете использовать этот метод как шаблон для метода, который вы создадите в своем собственном приложении.
Быстрый
// 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
и использовать его исключительно в своем приложении, не настраивая его как общий кэш.
Атрибуции
В большинстве случаев фотографии мест можно использовать без указания авторства или они будут иметь требуемое указание авторства как часть изображения. Однако, если возвращаемый экземпляр GMSPlacePhotoMetadata
включает указание авторства, вы должны включить дополнительную атрибуцию в свое приложение, где бы вы ни отображали изображение. Обратите внимание, что ссылки в указании авторства должны быть нажимаемыми. См. документацию по указанию авторства .
Ограничения по использованию
Извлечение изображения стоит одну единицу квоты; ограничений на использование метаданных фотографий нет. Подробнее об использовании и выставлении счетов читайте здесь.