Ortsfotos (neu)

Mit dem Places SDK for iOS (New) können Sie Ortsfotos anfordern, die in Ihrer App angezeigt werden sollen. Vom Fotodienst zurückgegebene Fotos stammen aus verschiedenen Quellen, z. B. von Geschäftsinhabern und von Nutzern zur Verfügung gestellten Fotos.

Fotos sind Bitmapbilder, die durch ein UIImage-Objekt dargestellt werden. Ein Bitmapbild darf maximal 4.800 x 4.800 Pixel groß sein.

Bild anfordern

Sie können bis zu zehn Fotos für einen Ort anfordern:

  1. Rufen Sie [GMSPlacesClient lookUpPhotosForPlaceID] auf und übergeben Sie eine Orts-ID und einen GMSPlacePhotoMetadataResultCallback-Callback. Diese Anfrage ruft den GMSPlacePhotoMetadataResultCallback-Callback mit einem GMSPlacePhotoMetadataList-Objekt auf.

  2. Im GMSPlacePhotoMetadataList-Objekt im Callback enthält die Arrayeigenschaft results die Fotos. Jedes Foto wird durch ein GMSPlacePhotoMetadata-Objekt dargestellt.

  3. Rufen Sie für jedes GMSPlacePhotoMetadata-Objekt im Array [GMSPlacesClient loadPlacePhoto:callback:] oder [GMSPlacesClient loadPlacePhoto:constrainedToSize:scale:callback:] auf. Diese Methoden rufen den Callback mit einem verwendbaren Bitmapbild als UIImage auf.

Sie können auch eine Anfrage für Place Details (New) mit GMSPlacePropertyPhotos in der Feldliste senden, um Fotos für einen Ort anzufordern. Der Vorteil von „Place Details“-Aufrufen besteht darin, dass das Antwortobjekt GMSPlace die Fotos und andere Datenfelder enthalten kann, die Sie für den Ort benötigen.

Beispielcode

Mit der folgenden Beispielmethode wird eine Orts-ID verwendet, mit der das erste Foto aus der zurückgegebenen Liste abgerufen wird. Sie können diese Methode als Vorlage für die Methode verwenden, die Sie in Ihrer eigenen Anwendung erstellen.

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 = photos.first else { return }

  // Request individual photos in the response list
  let fetchPhotoRequest = GMSFetchPhotoRequest(metadata: photoMetadata, maxSize: CGSizeMake(4800, 4800)
  placesClient.fetchPhoto(fetchPhotoRequest: fetchPhotoRequest, callback: {
    (photoURL: URL?, error: Error?) in
      guard let photoURL, error == nil else { return }
      print("Photo URL: \(photoURL)")
  })
};

Objective-C

// A hotel in Saigon with an attribution.
NSString *placeID = @"ChIJV4k8_9UodTERU5KXbkYpSYs";

[placesClient lookUpPhotosForPlaceID:placeID callback: (GMSPlacePhotoMetadataList *list, NSError *error) {
  GMSPlacePhotoMetadata *photoMetadata = [list firstObject];

  if (photoMetadata == nil) { return }

  // Request individual photos in the response list
  GMSFetchPhotoRequest *fetchPhotoRequest = [[GMSFetchPhotoRequest alloc] initWithPhotoMetadata:photoMetadata maxSize:CGSizeMake(4800, 4800)];
  [placesClient fetchPhoto:fetchPhotoRequest, callback: ^(NSURL *_Nullable photoURL, NSError *_Nullable error) {
    if (error == null) {
      NSLog(@"Photo URL: %@", photoURL)
    }
  }];
}];

GooglePlacesSwift

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

Caching

Mit [GMSPlacesClient loadPlacePhoto:callback:] oder [GMSPlacesClient loadPlacePhoto:constrainedToSize:scale:callback:] geladene Fotos werden vom Foundation-URL-Ladesystem sowohl auf dem Laufwerk als auch im Arbeitsspeicher im freigegebenen NSURLCache zwischengespeichert.

Zum Konfigurieren des Caching-Verhaltens können Sie den gemeinsamen URL-Cache mit [NSURLCache setSharedURLCache:] in der Methode application:didFinishLaunchingWithOptions: des Anwendungsdelegats ändern.

Wenn Sie nicht möchten, dass Ihre Anwendung ein NSURLCache mit dem Places SDK for iOS teilt, können Sie ein neues NSURLCache erstellen und dieses exklusiv in Ihrer App verwenden, ohne es als gemeinsamen Cache festzulegen.

Attribution

In den meisten Fällen können Ortsfotos ohne Quellenangabe verwendet werden bzw. sind die erforderlichen Quellenangaben bereits im Bild enthalten. Wenn die zurückgegebene GMSPlacePhotoMetadata-Instanz jedoch attributions oder authorAttribution enthält, müssen Sie diese Quellenangaben überall dort, wo das Bild angezeigt wird, in Ihre Anwendung einfügen. Weitere Informationen finden Sie in der Dokumentation zu Quellenangaben.