אתם יכולים להשתמש ב-Places SDK ל-iOS (הגרסה החדשה) כדי לבקש להציג באפליקציה שלכם תמונות של מקומות. התמונות שמוחזרות על ידי שירות התמונות מגיעות ממגוון מקורות, כולל בעלי עסקים ותמונות שנוספו על ידי משתמשים.
תמונות הן תמונות בפורמט בייטמאפ שמיוצגות על ידי אובייקט UIImage. הגודל המקסימלי של תמונה בפורמט בייטמאפ הוא 4,800 על 4,800 פיקסלים.
שליחת בקשה לקבלת תמונה
אפשר לבקש עד 10 תמונות של מקום:
קוראים ל-
[GMSPlacesClient lookUpPhotosForPlaceID]
ומעבירים מזהה מקום וקריאה חוזרת (callback) שלGMSPlacePhotoMetadataResultCallback
. הבקשה הזו מפעילה את הפונקציה הלא סטטיתGMSPlacePhotoMetadataResultCallback
עם אובייקטGMSPlacePhotoMetadataList
.מהאובייקט
GMSPlacePhotoMetadataList
בקריאה החוזרת, מאפיין המערךresults
מכיל את התמונות, כאשר כל תמונה מיוצגת על ידי אובייקטGMSPlacePhotoMetadata
.משתמשים באובייקט
GMSPlacePhotoMetadata
כדי ליצורGMSFetchPhotoRequest
, כולל הגודל המקסימלי של התמונה המבוקשת.לכל אובייקט
GMSPlacePhotoMetadata
במערך, קוראים ל-[GMSPlacesClient fetchPhotoWithRequest:callback:]
ומעבירים את האובייקטGMSFetchPhotoRequest
. ה-method הזה קורא ל-callbackGMSFetchPhotoResultCallback
עם קובץ אימג' בפורמט 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: 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 ל-iOS (גרסת Preview)
// 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 של Foundation ב-NSURLCache
המשותף.
כדי להגדיר את התנהגות האחסון במטמון, אפשר לשנות את המטמון המשותף של כתובות ה-URL באמצעות [NSURLCache setSharedURLCache:]
ב-method application:didFinishLaunchingWithOptions:
של הנציג של האפליקציה.
אם אתם לא רוצים שהאפליקציה שלכם תשתף את NSURLCache
עם Places SDK ל-iOS, תוכלו ליצור NSURLCache
חדש ולהשתמש בו באופן בלעדי באפליקציה, בלי להגדיר אותו כמטמון המשותף.
שיוכים
ברוב המקרים, אפשר להשתמש בתמונות של מקומות ללא שיוך, או שהשיוך הנדרש ייכלל כחלק מהתמונה. עם זאת, אם המופע של GMSPlacePhotoMetadata
שמוחזר כולל את הערכים attributions
או authorAttribution
, צריך לכלול את השיוך הזה באפליקציה בכל מקום שבו מוצגת התמונה. מידע נוסף זמין במאמר בנושא שיוך.