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:
Rufen Sie
[GMSPlacesClient lookUpPhotosForPlaceID]
auf und übergeben Sie eine Orts-ID und einenGMSPlacePhotoMetadataResultCallback
-Callback. Diese Anfrage ruft denGMSPlacePhotoMetadataResultCallback
-Callback mit einemGMSPlacePhotoMetadataList
-Objekt auf.Im
GMSPlacePhotoMetadataList
-Objekt im Callback enthält die Arrayeigenschaftresults
die Fotos. Jedes Foto wird durch einGMSPlacePhotoMetadata
-Objekt dargestellt.Verwenden Sie das Objekt
GMSPlacePhotoMetadata
, um einGMSFetchPhotoRequest
zu erstellen, einschließlich der maximalen Größe des angeforderten Bildes.Rufen Sie für jedes
GMSPlacePhotoMetadata
-Objekt im Array[GMSPlacesClient fetchPhotoWithRequest:callback:]
auf und übergeben Sie dasGMSFetchPhotoRequest
-Objekt. Mit dieser Methode wird derGMSFetchPhotoResultCallback
-Callback mit einem verwendbaren Bitmapbild als UIImage aufgerufen.
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: 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 } }]; }];
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.