Sie können das Places SDK for iOS (New) verwenden, um Fotos von Orten anzufordern, in Ihrer Anwendung anzuzeigen. Vom Fotodienst zurückgegebene Fotos stammen aus einem aus verschiedenen Quellen, einschließlich Geschäftsinhabern und Fotos, die von Nutzern beigesteuert wurden.
Fotos sind Bitmapbilder, die durch ein UIImage-Objekts. 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:
Anruf
[GMSPlacesClient lookUpPhotosForPlaceID]
, übergeben eine Orts-ID und eineGMSPlacePhotoMetadataResultCallback
-Rückruf. Diese Anfrage ruft denGMSPlacePhotoMetadataResultCallback
-Callback mit einerGMSPlacePhotoMetadataList
-Objekt enthält.Aus dem
GMSPlacePhotoMetadataList
-Objekt im Callbackresults
Array-Eigenschaft enthält die Fotos, wobei jedes Foto durch einGMSPlacePhotoMetadata
-Objekt enthält.Verwenden Sie das Objekt
GMSPlacePhotoMetadata
, um einGMSFetchPhotoRequest
, einschließlich der maximalen Größe des angeforderten Bildes.Rufen Sie für jedes
GMSPlacePhotoMetadata
-Objekt im Array den folgenden Befehl auf:[GMSPlacesClient fetchPhotoWithRequest:callback:]
und übergeben dasGMSFetchPhotoRequest
-Objekt. Diese Methode ruft die MethodeGMSFetchPhotoResultCallback
mit einem verwendbaren Bitmapbild als UIImage zurück.
Sie können auch Fotos für einen Ort anfordern, indem Sie
Place Details (New)-Anfrage,
einschließlich GMSPlacePropertyPhotos
in der Feldliste. Der Vorteil einer
„Place Details“-Aufruf
ist, dass die Antwort
GMSPlace
kann die Fotos und andere Datenfelder enthalten, die Sie für
auf den Ort.
Beispielcode
Mit der folgenden Beispielmethode wird das erste Foto im Liste zurückgegeben. Sie können diese Methode als Vorlage für die Methode verwenden, in Ihrer eigenen App erstellen können.
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
Fotos von [GMSPlacesClient loadPlacePhoto:callback:]
geladen
oder [GMSPlacesClient loadPlacePhoto:constrainedToSize:scale:callback:]
werden vom Foundation URL-Ladesystem sowohl auf dem Laufwerk als auch im Arbeitsspeicher im Cache gespeichert.
in der geteilten NSURLCache
.
Um das Caching-Verhalten zu konfigurieren, können Sie den gemeinsamen URL-Cache mit folgendem Befehl ändern:
[NSURLCache setSharedURLCache:]
in der application:didFinishLaunchingWithOptions:
des Anwendungsdelegierten
.
Wenn Sie nicht möchten, dass Ihre Anwendung ein NSURLCache
mit dem
Places SDK for iOS können Sie ein neues NSURLCache
erstellen und dieses
ausschließlich in Ihrer App, ohne ihn als gemeinsamen Cache festzulegen.
Attribution
In den meisten Fällen können Ortsfotos ohne Namensnennung verwendet werden oder sind
die erforderliche Quellenangabe im Bild enthalten. Wenn die zurückgegebene
GMSPlacePhotoMetadata
Instanz enthält beliebige
attributions
oder
authorAttribution
,
müssen Sie diese Quellenangaben überall dort in Ihre Anwendung aufnehmen, wo das
Bild. Weitere Informationen finden Sie in der Dokumentation zu
Quellenangaben.