Vous pouvez utiliser le SDK Places pour iOS (nouveau) pour demander des photos de lieux à afficher dans votre application. Les photos renvoyées par le service Photos proviennent de plusieurs sources, y compris de propriétaires d'établissements et d'utilisateurs.
Les photos sont des images bitmap représentées par un objet UIImage. La taille maximale d'une image bitmap est de 4 800 x 4 800 pixels.
Demander une image
Vous pouvez demander jusqu'à 10 photos pour un lieu:
Appelez
[GMSPlacesClient lookUpPhotosForPlaceID]
en transmettant un ID de lieu et un rappelGMSPlacePhotoMetadataResultCallback
. Cette requête appelle le rappelGMSPlacePhotoMetadataResultCallback
avec un objetGMSPlacePhotoMetadataList
.À partir de l'objet
GMSPlacePhotoMetadataList
dans le rappel, la propriété de tableauresults
contient les photos, où chaque photo est représentée par un objetGMSPlacePhotoMetadata
.Utilisez l'objet
GMSPlacePhotoMetadata
pour créer unGMSFetchPhotoRequest
, y compris la taille maximale de l'image demandée.Pour chaque objet
GMSPlacePhotoMetadata
du tableau, appelez[GMSPlacesClient fetchPhotoWithRequest:callback:]
en transmettant l'objetGMSFetchPhotoRequest
. Cette méthode appelle le rappelGMSFetchPhotoResultCallback
avec une image bitmap utilisable en tant que UIImage.
Vous pouvez également demander des photos pour un lieu en envoyant une requête Place Details (New), en incluant GMSPlacePropertyPhotos
dans la liste des champs. L'avantage d'effectuer un appel Place Details est que l'objet de réponse GMSPlace
peut contenir les photos et tous les autres champs de données que vous souhaitez pour le lieu.
Exemple de code
L'exemple de méthode suivant prend un ID de lieu et obtient la première photo de la liste renvoyée. Vous pouvez utiliser cette méthode comme modèle pour la méthode que vous allez créer dans votre propre application.
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 } }]; }];
SDK Places Swift pour iOS (bêta)
// 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 }
Mise en cache
Les photos chargées à l'aide de [GMSPlacesClient loadPlacePhoto:callback:]
ou de [GMSPlacesClient loadPlacePhoto:constrainedToSize:scale:callback:]
sont mises en cache à la fois sur le disque et en mémoire par le système de chargement d'URL Foundation dans l'NSURLCache
partagé.
Pour configurer le comportement de mise en cache, vous pouvez modifier le cache d'URL partagé à l'aide de [NSURLCache setSharedURLCache:]
dans la méthode application:didFinishLaunchingWithOptions:
de votre délégué d'application.
Si vous ne souhaitez pas que votre application partage un NSURLCache
avec le SDK Places pour iOS, vous pouvez créer un NSURLCache
et l'utiliser exclusivement dans votre application sans le définir comme cache partagé.
Attributions
Dans la plupart des cas, les photos de lieu peuvent être utilisées sans attribution, ou contiendront déjà l'attribution. Toutefois, si l'instance GMSPlacePhotoMetadata
renvoyée inclut des attributions
ou authorAttribution
, vous devez inclure ces attributions dans votre application partout où vous affichez l'image. Consultez la documentation sur les attributions.