Foto Tempat (Baru)

Pilih platform: Android iOS Layanan Web

Anda dapat menggunakan Places SDK for iOS (Baru) untuk meminta foto tempat agar ditampilkan di aplikasi Anda. Foto yang dikembalikan oleh layanan foto berasal dari berbagai sumber, termasuk foto dari pemilik bisnis dan pengguna.

Foto adalah gambar bitmap yang direpresentasikan oleh objek UIImage. Gambar bitmap memiliki ukuran maksimum 4.800x4.800 piksel.

Meminta gambar

Anda dapat meminta hingga 10 foto untuk suatu tempat:

  1. Panggil [GMSPlacesClient lookUpPhotosForPlaceID], dengan meneruskan ID tempat dan callback GMSPlacePhotoMetadataResultCallback. Permintaan ini memanggil callback GMSPlacePhotoMetadataResultCallback dengan objek GMSPlacePhotoMetadataList.

  2. Dari objek GMSPlacePhotoMetadataList dalam callback, properti array results berisi foto, dengan setiap foto diwakili oleh objek GMSPlacePhotoMetadata.

  3. Gunakan objek GMSPlacePhotoMetadata untuk membuat GMSFetchPhotoRequest, termasuk ukuran maksimum gambar yang diminta.

  4. Untuk setiap objek GMSPlacePhotoMetadata dalam array, panggil [GMSPlacesClient fetchPhotoWithRequest:callback:] yang meneruskan objek GMSFetchPhotoRequest. Metode ini memanggil callback GMSFetchPhotoResultCallback dengan gambar bitmap yang dapat digunakan sebagai UIImage.

Cara lain untuk meminta foto untuk suatu tempat adalah dengan membuat permintaan Place Details (New), termasuk GMSPlacePropertyPhotos dalam daftar kolom. Keuntungan melakukan panggilan Place Details adalah objek GMSPlace respons dapat berisi foto dan kolom data lainnya yang Anda inginkan untuk tempat tersebut.

Kode contoh

Metode contoh berikut mengambil ID tempat dan mendapatkan foto pertama dalam daftar yang ditampilkan. Anda dapat menggunakan metode ini sebagai template untuk metode yang akan Anda buat di aplikasi Anda sendiri.

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
    }
  }];
}];

Places Swift SDK for iOS (Pratinjau)

// 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
}

Menyimpan ke cache

Foto yang dimuat menggunakan [GMSPlacesClient loadPlacePhoto:callback:] atau [GMSPlacesClient loadPlacePhoto:constrainedToSize:scale:callback:] di-cache dalam disk dan memori oleh sistem pemuatan URL Foundation di NSURLCache bersama.

Untuk mengonfigurasi perilaku caching, Anda dapat mengubah cache URL bersama menggunakan [NSURLCache setSharedURLCache:] dalam metode application:didFinishLaunchingWithOptions: delegasi aplikasi Anda.

Jika tidak ingin aplikasi Anda membagikan NSURLCache dengan Places SDK for iOS, Anda dapat membuat NSURLCache baru dan menggunakannya secara eksklusif dalam aplikasi tanpa menyetelnya sebagai cache bersama.

Atribusi

Umumnya, foto tempat dapat digunakan tanpa atribusi, atau akan mengharuskan atribusi yang diperlukan disertakan sebagai bagian dari gambar. Namun, jika instance GMSPlacePhotoMetadata yang ditampilkan menyertakan attributions atau authorAttribution, Anda harus menyertakan atribusi ini dalam aplikasi di mana pun Anda menampilkan gambar. Lihat dokumentasi tentang atribusi.