Place Photos (nouveau)

Sélectionnez une plate-forme: Sur Android iOS Service Web

Vous pouvez utiliser le SDK Places pour iOS (nouveau) afin de demander des photos de lieux à afficher dans votre application. Les photos renvoyées par le service Photos proviennent d'un diverses sources, y compris les propriétaires d'établissement et les photos fournies par les utilisateurs.

Les photos sont des images bitmap représentées par un UIImage. Une image bitmap a une taille maximale de 4 800 x 4 800 pixels.

Demander une image

Vous pouvez demander jusqu'à 10 photos pour un lieu:

  1. Appeler [GMSPlacesClient lookUpPhotosForPlaceID], en transmettant un identifiant de lieu Rappel GMSPlacePhotoMetadataResultCallback Cette requête appelle le rappel GMSPlacePhotoMetadataResultCallback avec une GMSPlacePhotoMetadataList .

  2. À partir de l'objet GMSPlacePhotoMetadataList du rappel, results de tableau contient les photos, où chacune d'elles est représentée par un GMSPlacePhotoMetadata .

  3. Utilisez l'objet GMSPlacePhotoMetadata pour créer un GMSFetchPhotoRequest, y compris la taille maximale de l'image demandée.

  4. Pour chaque objet GMSPlacePhotoMetadata du tableau, appelez [GMSPlacesClient fetchPhotoWithRequest:callback:] en transmettant l'objet GMSFetchPhotoRequest. Cette méthode appelle la méthode GMSFetchPhotoResultCallback avec une image bitmap utilisable en tant qu'UIImage.

Pour demander des photos d'un lieu, vous pouvez aussi requête Place Details (New), y compris GMSPlacePropertyPhotos dans la liste des champs. L'avantage d'une à un appel Place Details est que la réponse GMSPlace peut contenir les photos et tout autre champ de données que vous souhaitez le lieu.

Exemple de code

L'exemple de méthode suivant utilise un identifiant de lieu et obtient la première photo du a renvoyé la liste. Vous pouvez utiliser cette méthode comme modèle pour la méthode que 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
    }
  }];
}];

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
}

Mise en cache

Photos chargées avec [GMSPlacesClient loadPlacePhoto:callback:] ou [GMSPlacesClient loadPlacePhoto:constrainedToSize:scale:callback:] sont mis en cache à la fois sur le disque et en mémoire par le système de chargement de l'URL de base dans le NSURLCache partagé.

Pour configurer le comportement de mise en cache, vous pouvez modifier le cache des URL partagées à l'aide de [NSURLCache setSharedURLCache:] dans le application:didFinishLaunchingWithOptions: du délégué de votre application .

Si vous ne souhaitez pas que votre application partage un NSURLCache avec SDK Places pour iOS, vous pouvez créer un NSURLCache et l'utiliser exclusivement dans votre application, sans la définir comme cache partagé.

Attributions

Dans la plupart des cas, les photos de lieu peuvent être utilisées sans attribution, ou porteront le logo attribution obligatoire incluse dans l'image. Toutefois, si la valeur GMSPlacePhotoMetadata inclut l'une des instances attributions ou authorAttribution vous devez inclure ces attributions dans votre application partout où vous affichez les l'image. Consultez la documentation sur attributions.