장소 사진 (신규)

플랫폼 선택: Android iOS 웹 서비스

iOS용 Places SDK (신규)를 사용하여 애플리케이션에 표시할 장소 사진을 요청할 수 있습니다. 사진 서비스에서 반환되는 사진은 비즈니스 소유자 및 사용자가 제공한 사진을 비롯한 다양한 소스에서 가져온 것입니다.

사진은 UIImage 객체로 표현되는 비트맵 이미지입니다. 비트맵 이미지의 최대 크기는 4800x4800픽셀입니다.

이미지 요청

장소에 대해 최대 10장의 사진을 요청할 수 있습니다.

  1. [GMSPlacesClient lookUpPhotosForPlaceID]를 호출하여 장소 ID와 GMSPlacePhotoMetadataResultCallback 콜백을 전달합니다. 이 요청은 GMSPlacePhotoMetadataList 객체를 사용하여 GMSPlacePhotoMetadataResultCallback 콜백을 호출합니다.

  2. 콜백의 GMSPlacePhotoMetadataList 객체에서 results 배열 속성에는 사진이 포함되며 각 사진은 GMSPlacePhotoMetadata 객체로 표시됩니다.

  3. GMSPlacePhotoMetadata 객체를 사용하여 요청된 이미지의 최대 크기를 포함하는 GMSFetchPhotoRequest를 만듭니다.

  4. 배열의 각 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:]를 사용하여 로드된 사진은 공유 NSURLCacheFoundation URL 로드 시스템에 의해 디스크와 메모리에 모두 캐시됩니다.

캐싱 동작을 구성하려면 애플리케이션 대리자의 application:didFinishLaunchingWithOptions: 메서드에서 [NSURLCache setSharedURLCache:]를 사용하여 공유 URL 캐시를 변경하면 됩니다.

애플리케이션에서 NSURLCache를 iOS용 Places SDK와 공유하지 않으려면 새 NSURLCache를 만들어 공유 캐시로 설정하지 않고 앱에서 독점적으로 사용할 수 있습니다.

기여 분석

대부분의 경우 장소 사진은 저작자 표시 없이 사용할 수 있거나 필수 저작자 표시가 이미지의 일부로 포함되어 있습니다. 그러나 반환된 GMSPlacePhotoMetadata 인스턴스에 attributions 또는 authorAttribution가 포함된 경우 이미지를 표시할 때마다 애플리케이션에 이러한 저작자 표시를 포함해야 합니다. 기여 분석에 관한 문서를 참고하세요.