תמונות של המקום (חדש)

תוכלו להשתמש ב-Places SDK ל-iOS (חדש) כדי לבקש שתמונות של מקומות יוצגו באפליקציה. התמונות שהוחזרו על ידי שירות התמונות מגיעות ממגוון מקורות, כולל בעלי עסקים ותמונות שמשתמשים הוסיפו.

תמונות הן תמונות של מפת סיביות (bitmap) שמיוצגות על ידי אובייקט UIImage. הגודל המקסימלי של תמונה במפת סיביות הוא 4,800 על 4,800 פיקסלים.

בקשת תמונה

אפשר לבקש עד 10 תמונות של מקום מסוים:

  1. מתקשרים למספר [GMSPlacesClient lookUpPhotosForPlaceID] ומעבירים מזהה מקום וקריאה חוזרת (callback) ב-GMSPlacePhotoMetadataResultCallback. הבקשה הזו מפעילה את הקריאה החוזרת GMSPlacePhotoMetadataResultCallback עם אובייקט GMSPlacePhotoMetadataList.

  2. מהאובייקט GMSPlacePhotoMetadataList בקריאה החוזרת (callback), מאפיין מערך results מכיל את התמונות, שבהן כל תמונה מיוצגת על ידי אובייקט GMSPlacePhotoMetadata.

  3. לכל אובייקט GMSPlacePhotoMetadata במערך, קוראים ל-[GMSPlacesClient loadPlacePhoto:callback:] או ל-[GMSPlacesClient loadPlacePhoto:constrainedToSize:scale:callback:]. בשיטות האלה מתבצעת קריאה חוזרת (callback) באמצעות תמונה של מפת סיביות (bitmap) שאפשר להשתמש בה בתור UIImage.

דרך נוספת לבקש תמונות של מקום היא לבקש פרטי מקום (חדש), כולל GMSPlacePropertyPhotos ברשימת השדות. היתרון בקריאה של פרטי מקום הוא שהאובייקט GMSPlace יכול להכיל את התמונות וכל שדה נתונים אחר שרוצים לתת למקום.

קוד לדוגמה

בדוגמה הבאה אנחנו משתמשים במזהה מקום ומקבלת את התמונה הראשונה ברשימה המוחזרת. תוכלו להשתמש בשיטה הזו כתבנית לשיטה שתיצרו באפליקציה שלכם.

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 = photos.first else { return }

  // Request individual photos in the response list
  let fetchPhotoRequest = GMSFetchPhotoRequest(metadata: photoMetadata, maxSize: CGSizeMake(4800, 4800)
  placesClient.fetchPhoto(fetchPhotoRequest: fetchPhotoRequest, callback: {
    (photoURL: URL?, error: Error?) in
      guard let photoURL, error == nil else { return }
      print("Photo URL: \(photoURL)")
  })
};

Objective-C

// A hotel in Saigon with an attribution.
NSString *placeID = @"ChIJV4k8_9UodTERU5KXbkYpSYs";

[placesClient lookUpPhotosForPlaceID:placeID callback: (GMSPlacePhotoMetadataList *list, NSError *error) {
  GMSPlacePhotoMetadata *photoMetadata = [list firstObject];

  if (photoMetadata == nil) { return }

  // Request individual photos in the response list
  GMSFetchPhotoRequest *fetchPhotoRequest = [[GMSFetchPhotoRequest alloc] initWithPhotoMetadata:photoMetadata maxSize:CGSizeMake(4800, 4800)];
  [placesClient fetchPhoto:fetchPhotoRequest, callback: ^(NSURL *_Nullable photoURL, NSError *_Nullable error) {
    if (error == null) {
      NSLog(@"Photo URL: %@", photoURL)
    }
  }];
}];

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
}

שמירה במטמון

תמונות שנטענות באמצעות [GMSPlacesClient loadPlacePhoto:callback:] או [GMSPlacesClient loadPlacePhoto:constrainedToSize:scale:callback:] נשמרות במטמון גם בדיסק וגם בזיכרון על ידי מערכת הטעינה של כתובות URL בסיסיות בקובץ המשותף NSURLCache.

כדי להגדיר את התנהגות השמירה במטמון, אפשר לשנות את המטמון של כתובת ה-URL המשותפת באמצעות [NSURLCache setSharedURLCache:] ב-method application:didFinishLaunchingWithOptions: של בעל הגישה לאפליקציה.

אם לא רוצים שהאפליקציה תשתף NSURLCache עם ה-Places SDK ל-iOS, אפשר ליצור NSURLCache חדש ולהשתמש בו באופן בלעדי באפליקציה בלי להגדיר אותו כמטמון המשותף.

שיוכים

ברוב המקרים אפשר להשתמש בתמונות של מקומות ללא ייחוס, או שהייחוס הנדרש ייכלל כחלק מהתמונה. אבל אם המכונה GMSPlacePhotoMetadata שמוחזרת כוללת attributions או authorAttribution, צריך לכלול את הייחוסים האלה באפליקציה בכל מקום שבו מוצגת התמונה. במאמרי העזרה בנושא שיוך (Attribution)