iOS용 Places SDK (신규)를 사용하여 애플리케이션에 표시할 장소 사진을 요청할 수 있습니다. 사진 서비스에서 반환되는 사진은 비즈니스 소유자 및 사용자가 제공한 사진을 비롯한 다양한 소스에서 가져온 것입니다.
사진은 UIImage 객체로 표현되는 비트맵 이미지입니다. 비트맵 이미지의 최대 크기는 4800x4800픽셀입니다.
이미지 요청
장소에 대해 최대 10장의 사진을 요청할 수 있습니다.
[GMSPlacesClient lookUpPhotosForPlaceID]
를 호출하여 장소 ID와GMSPlacePhotoMetadataResultCallback
콜백을 전달합니다. 이 요청은GMSPlacePhotoMetadataList
객체를 사용하여GMSPlacePhotoMetadataResultCallback
콜백을 호출합니다.콜백의
GMSPlacePhotoMetadataList
객체에서results
배열 속성에는 사진이 포함되며 각 사진은GMSPlacePhotoMetadata
객체로 표시됩니다.GMSPlacePhotoMetadata
객체를 사용하여 요청된 이미지의 최대 크기를 포함하는GMSFetchPhotoRequest
를 만듭니다.배열의 각
GMSPlacePhotoMetadata
객체에 대해GMSFetchPhotoRequest
객체를 전달하는[GMSPlacesClient fetchPhotoWithRequest:callback:]
를 호출합니다. 이 메서드는 사용 가능한 비트맵 이미지를 UIImage로 사용하여GMSFetchPhotoResultCallback
콜백을 호출합니다.
장소의 사진을 요청하는 또 다른 방법은 필드 목록에 GMSPlacePropertyPhotos
를 포함하여 장소 세부정보 (신규) 요청을 하는 것입니다. 장소 세부정보를 호출하면 응답 GMSPlace
객체에 장소에 필요한 사진과 기타 데이터 필드를 포함할 수 있다는 이점이 있습니다.
샘플 코드
다음 예시 메서드는 장소 ID를 취하고 반환되는 목록에서 첫 번째 사진을 가져옵니다. 이 메서드를 앱에서 생성할 메서드의 템플릿으로 사용할 수 있습니다.
Swift
// A hotel in Saigon with an attribution. let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs" // Request list of photos for a place placesClient.lookUpPhotos(forPlaceID: placeID) { (photos, error) in guard let photoMetadata: GMSPlacePhotoMetadata = photos?.results[0] else { return } // Request individual photos in the response list let fetchPhotoRequest = GMSFetchPhotoRequest(photoMetadata: photoMetadata, maxSize: CGSizeMake(4800, 4800)) self.client.fetchPhoto(with: fetchPhotoRequest, callback: { (photoImage: UIImage?, error: Error?) in guard let photoImage, error == nil else { print("Handle photo error: ") return } print("Display photo Image: ") } ) }
Objective-C
// A hotel in Saigon with an attribution. NSString *placeID = @"ChIJV4k8_9UodTERU5KXbkYpSYs"; [placesClient lookUpPhotosForPlaceID:placeID callback: ^(GMSPlacePhotoMetadataList *list, NSError *error) { GMSPlacePhotoMetadata *photoMetadata = [list results][0]; // Request individual photos in the response list GMSFetchPhotoRequest *fetchPhotoRequest = [[GMSFetchPhotoRequest alloc] initWithPhotoMetadata:photoMetadata maxSize:CGSizeMake(4800, 4800)]; [placesClient fetchPhotoWithRequest:fetchPhotoRequest callback: ^(UIImage *_Nullable photoImage, NSError *_Nullable error) { if (error == nil) { // Display photo } }]; }];
iOS용 Places Swift SDK (미리보기)
// First fetch place details // A hotel in Saigon with an attribution. let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs" let fetchPlaceRequest = FetchPlaceRequest( placeID: placeID, placeProperties: [ . name, .website ] ) var fetchedPlace: Place switch await placesClient.fetchPlace(with: fetchPlaceRequest) { case .success(let place): fetchedPlace = place case .failure(let placesError): // Handle error } // Use the place details to fetch a photo's image. guard let photo = fetchedPlace.photos?.first else { // Handle place without photos. } let fetchPhotoRequest = FetchPhotoRequest(photo: photo, maxSize: CGSizeMake(4800, 4800)) switch await placesClient.fetchPhoto(with: fetchPhotoRequest) { case .success(let uiImage): // Handle image. case .failure(let placesError): // Handle error }
캐싱
[GMSPlacesClient loadPlacePhoto:callback:]
또는 [GMSPlacesClient loadPlacePhoto:constrainedToSize:scale:callback:]
를 사용하여 로드된 사진은 공유 NSURLCache
의 Foundation URL 로드 시스템에 의해 디스크와 메모리에 모두 캐시됩니다.
캐싱 동작을 구성하려면 애플리케이션 대리자의 application:didFinishLaunchingWithOptions:
메서드에서 [NSURLCache setSharedURLCache:]
를 사용하여 공유 URL 캐시를 변경하면 됩니다.
애플리케이션에서 NSURLCache
를 iOS용 Places SDK와 공유하지 않으려면 새 NSURLCache
를 만들어 공유 캐시로 설정하지 않고 앱에서 독점적으로 사용할 수 있습니다.
기여 분석
대부분의 경우 장소 사진은 저작자 표시 없이 사용할 수 있거나 필수 저작자 표시가 이미지의 일부로 포함되어 있습니다. 그러나 반환된 GMSPlacePhotoMetadata
인스턴스에 attributions
또는 authorAttribution
가 포함된 경우 이미지를 표시할 때마다 애플리케이션에 이러한 저작자 표시를 포함해야 합니다. 기여 분석에 관한 문서를 참고하세요.