Mit dem Places SDK for iOS (neu) können Sie Fotos von Orten anfordern, die in Ihrer App angezeigt werden sollen. Die vom Fotodienst bereitgestellten Fotos stammen aus unterschiedlichen Quellen, z. B. von Geschäftsinhabern oder Nutzern.
Fotos sind Bitmap-Bilder, die durch ein UIImage-Objekt dargestellt werden. Ein Bitmap-Bild hat eine maximale Größe von 4.800 x 4.800 Pixeln.
Bild anfordern
Sie können bis zu 10 Fotos für einen Ort anfordern:
Rufen Sie
[GMSPlacesClient lookUpPhotosForPlaceID]
auf und übergeben Sie eine Orts-ID und einenGMSPlacePhotoMetadataResultCallback
-Callback. Bei dieser Anfrage wird derGMSPlacePhotoMetadataResultCallback
-Callback mit einemGMSPlacePhotoMetadataList
-Objekt aufgerufen.Im
GMSPlacePhotoMetadataList
-Objekt im Rückruf enthält das Array-Attributresults
die Fotos. Jedes Foto wird durch einGMSPlacePhotoMetadata
-Objekt dargestellt.Verwenden Sie das
GMSPlacePhotoMetadata
-Objekt, um einGMSFetchPhotoRequest
-Objekt zu erstellen, einschließlich der maximalen Größe des angeforderten Bilds.Rufen Sie für jedes
GMSPlacePhotoMetadata
-Objekt im Array[GMSPlacesClient fetchPhotoWithRequest:callback:]
mit demGMSFetchPhotoRequest
-Objekt auf. Diese Methode ruft den RückrufGMSFetchPhotoResultCallback
mit einem verwendbaren Bitmap-Bild als UIImage auf.
Eine weitere Möglichkeit, Fotos für einen Ort anzufordern, ist die Place Details (New)-Anfrage, bei der GMSPlacePropertyPhotos
in die Feldliste aufgenommen wird. Der Vorteil eines Place Details-Aufrufs besteht darin, dass das Antwortobjekt GMSPlace
Fotos und alle anderen Datenfelder für den Ort enthalten kann.
Beispielcode
In der folgenden Beispielmethode wird eine Orts-ID übergeben, um das erste Foto in der zurückgegebenen Liste abzurufen. Sie können diese Methode als Vorlage für die Methode verwenden, die Sie in Ihrer eigenen App 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 } }]; }];
Places Swift SDK for iOS (Vorabversion)
// 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
Fotos, die über [GMSPlacesClient loadPlacePhoto:callback:]
oder [GMSPlacesClient loadPlacePhoto:constrainedToSize:scale:callback:]
geladen werden, werden vom Foundation-URL-Ladesystem im freigegebenen NSURLCache
sowohl auf dem Laufwerk als auch im Arbeitsspeicher im Cache gespeichert.
Wenn Sie das Caching-Verhalten konfigurieren möchten, können Sie den freigegebenen URL-Cache mit [NSURLCache setSharedURLCache:]
in der application:didFinishLaunchingWithOptions:
-Methode Ihres Anwendungsdelegats ändern.
Wenn Ihre Anwendung keinen NSURLCache
mit dem Places SDK for iOS teilen soll, können Sie einen neuen NSURLCache
erstellen und ausschließlich in Ihrer App verwenden, ohne ihn als freigegebenen Cache festzulegen.
Attribution
In den meisten Fällen dürfen Fotos von Orten ohne Quellenangabe verwendet werden bzw. sind die erforderlichen Zuordnungen bereits im Bild eingebunden. Wenn die zurückgegebene GMSPlacePhotoMetadata
-Instanz jedoch attributions
oder authorAttribution
enthält, müssen Sie diese Quellenangaben in Ihre Anwendung einbinden, wo immer das Bild zu sehen ist. Weitere Informationen finden Sie in der Dokumentation zu Attributionen.