Places SDK for iOS מספק לאפליקציה מידע מפורט על מקומות, כולל השם והכתובת של המקום, המיקום הגיאוגרפי שצוין כקואורדינטות של קו רוחב וקו אורך, סוג המקום (כמו מועדון לילה, חנות לחיות מחמד, מוזיאון) ועוד. כדי לגשת למידע הזה על מקום ספציפי, אפשר להשתמש במזהה המקום, מזהה יציב שמזהה מקום באופן ייחודי.
פרטי המקום
המחלקות
GMSPlace
מספקות מידע על מקום ספציפי. אפשר לקבל אובייקט GMSPlace
בדרכים הבאות:
- התקשר אל
GMSPlacesClient findPlaceLikelihoodsFromUserLocationWithPlaceFields:
. אפשר לעיין במדריך בנושא קבלת המקום הנוכחי. - מפעילים את השיטה
GMSPlacesClient fetchPlaceFromPlaceID:
ומעבירים את הפרמטריםGMSPlaceField
, מזהה מקום ושיטת קריאה חוזרת. בבקשות לפרטי מקום, אם לא מציינים לפחות שדה אחד בבקשה, או אם משמיטים את הפרמטרfields
מבקשה, כל השדות האפשריים יוחזרו, ותחויבו בהתאם. במדריך קבלת מקום לפי מזהה מוסבר איך עושים את זה.
כשמבקשים מידע על מקום, צריך לציין אילו סוגים של נתוני מקום רוצים לקבל. כדי לעשות את זה, מעבירים GMSPlaceField
ומציינים את סוגי הנתונים שרוצים להחזיר. זהו שיקול חשוב, כי הוא ישפיע על העלות של כל בקשה.
מכיוון שתוצאות של נתוני מקומות לא יכולות להיות ריקות, מוחזרות רק תוצאות של מקומות עם נתונים (לדוגמה, אם למקום המבוקש אין תמונות, השדה photos
לא יופיע בתוצאה).
בדוגמה הבאה מועברת רשימה של שני ערכי שדות כדי לציין את הנתונים שמוחזרים על ידי בקשה:
Swift
// A hotel in Saigon with an attribution. let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs" // Specify the place data types to return. let fields: GMSPlaceField = GMSPlaceField(rawValue: UInt(GMSPlaceField.name.rawValue) | UInt(GMSPlaceField.placeID.rawValue))
Objective-C
// A hotel in Saigon with an attribution. NSString *placeID = @"ChIJV4k8_9UodTERU5KXbkYpSYs"; // Specify the place data types to return. GMSPlaceField fields = (GMSPlaceFieldName | GMSPlaceFieldPlaceID);
מידע נוסף על שדות של מקומות למידע נוסף על החיוב על בקשות לנתוני מקומות, אפשר לעיין במאמר שימוש וחיוב.
המחלקות
GMSPlace
יכולות להכיל את נתוני המקום הבאים:
-
name
– שם המקום. -
editorialSummary
– מספק תיאור של מקום. -
placeID
– המזהה הטקסטואלי של המקום. מידע נוסף על מזהי מקומות מופיע בהמשך הדף הזה. -
coordinate
– המיקום הגיאוגרפי של המקום, שמוגדר כקואורדינטות של קו רוחב וקו אורך. -
phoneNumber
– מספר הטלפון של המקום בפורמט בינלאומי. -
formattedAddress
– הכתובת של המיקום הזה שקריאה לבני אדם.לרוב, הכתובת הזו מקבילה לכתובת למשלוח דואר. הערה: במדינות מסוימות, כמו בריטניה, אסור להפיץ כתובות דואר אמיתיות בגלל הגבלות רישוי.
הכתובת המעוצבת מורכבת באופן לוגי מרכיב כתובת אחד או יותר. לדוגמה, הכתובת "111 8th Avenue, New York, NY" מורכבת מהרכיבים הבאים: "111" (מספר הרחוב), "8th Avenue" (הנתיב), "New York" (העיר) ו-"NY" (המדינה בארה"ב).
אל תנתחו את הכתובת המעוצבת באופן פרוגרמטי. במקום זאת, צריך להשתמש ברכיבי הכתובת הנפרדים, שכלולים בתגובת ה-API בנוסף לשדה הכתובת המעוצב.
-
openingHours
– שעות הפתיחה של המקום (כפי שמיוצגות על ידיGMSOpeningHours
). מתקשרים אלGMSOpeningHours.weekdayText
כדי לקבל רשימה של מחרוזות מקומיות של שעות הפתיחה היומיות לשבוע. תתקשר אלGMSOpeningHours.Periods
כדי לקבל רשימה שלGMSPeriod
עם מידע מפורט יותר ששווה לנתונים שמתקבלים מ-weekdayText
. הערה: אם המקום פתוח תמיד, תקופת הזמן מיוצגת כיום ראשון בחצות, והערך שלcloseEvent
הוא null. -
currentOpeningHours
ו-secondaryOpeningHours
– שדות שבהם מציינים את שעות הפתיחה בחגים ואת השינויים הזמניים בשעות הפתיחה של מקום.
addressComponents
– מערך של אובייקטים מסוגGMSAddressComponent
שמייצגים רכיבים של הכתובת של מקום. הרכיבים האלה מסופקים במטרה לחלץ מידע מובנה על הכתובת של מקום מסוים, למשל כדי למצוא את העיר שבה המקום נמצא. אל תשתמשו ברכיבים האלה כדי לעצב כתובות. במקום זאת, השתמשו במאפייןformattedAddress
, שמספק כתובת מעוצבת מותאמת לשפה ולמיקום.חשוב לזכור את העובדות הבאות לגבי מערך
addressComponents
:- מערך רכיבי הכתובת עשוי להכיל יותר רכיבים מהרכיב
formattedAddress
. - המערך לא בהכרח כולל את כל הישויות הפוליטיות שמכילות כתובת, מלבד אלה שכלולות ב-
formattedAddress
. - אין ערובה לכך שפורמט התשובה יישאר זהה בין בקשות שונות. בפרט, מספר
addressComponents
משתנה בהתאם לכתובת המבוקשת, ויכול להשתנות לאורך זמן עבור אותה כתובת. רכיב יכול לשנות את המיקום שלו במערך. אפשר לשנות את סוג הרכיב. יכול להיות שרכיב מסוים לא יופיע בתגובה מאוחרת יותר.
- מערך רכיבי הכתובת עשוי להכיל יותר רכיבים מהרכיב
-
userRatingsTotal
– מייצג את מספר הביקורות שמרכיבות את דירוג המקום.
המחלקות
GMSPlace
כוללות את פונקציות החברים הבאות:
-
isOpen
מחשבת אם מקום פתוח בשעה מסוימת, על סמךopeningHours
ו-UTCOffsetMinutes
, ועל סמך התאריך והשעה הנוכחיים. -
isOpenAtDate
מחזירה את הערך True אם המקום פתוח בתאריך מסוים, על סמךopeningHours
ו-UTCOffsetMinutes
, ועל סמך התאריך והשעה הנוכחיים.
כשמשתמשים בפונקציות האלה כדי לקבל את שעות הפתיחה או התאריכים, בבקשה המקורית fetchPlaceFromPlaceID:
או findPlaceLikelihoodsFromUserLocationWithPlaceFields:
צריך לציין גם את השדות GMSPlaceFieldOpeningHours
וגם את השדות GMSPlaceFieldUTCOffsetMinutes
. אם אחד מהשדות האלה חסר, אובייקט GMSPlace
שמתקבל לא יכיל שעות או תאריכי פתיחה, והקריאה תחזיר GMSPlaceOpenStatusUnknown
. כדי לקבל תוצאות מדויקות, צריך לבקש את השדות GMSPlaceFieldBusinessStatus
ו-GMSPlaceFieldUTCOffsetMinutes
בבקשה המקורית למקום. אם לא נשלחה בקשה כזו, ההנחה היא שהעסק פועל.
isOpen
עם פרטי מקום .
קבלת שעות פתיחה מיוחדות
שעות הפתיחה הרגילות מתקבלות דרךopeningHours
, currentOpeningHours
ו-secondaryOpeningHours
, אבל אפשר להשתמש בהן גם כדי לתמוך בשינויים זמניים בלוח הזמנים ובשעות הפתיחה בחגים.
אם יש שעות פתיחה מיוחדות לימים האלה, המערכת יכולה לסנן אותן ולהציג אותן.
Swift
func examineOpeningHours(place: GMSPlace) { // Check if the current opening hours contains a special day that has exceptional hours guard let currentOpeningHours = place.currentOpeningHours else { return } if let specialDays = currentOpeningHours.specialDays { guard !specialDays.isEmpty else { return } if let specialDay = specialDays.filter { $0.isExceptional }.first { // Indicate exceptional hours } } // Check if current opening hours contains a truncated time period let periods = currentOpeningHours.periods if !periods.isEmpty { for period in periods { let open = period.open let close = period.close if let open = open { let date = open.date if open.isTruncated { // Indicate truncated time period } } } } // Check if the place's secondary opening hours indicate when delivery is available let secondaryOpeningHours = place.secondaryOpeningHours guard let hoursType = secondaryOpeningHours.first?.hoursType else { return } if (hoursType == GMSPlaceHoursTypeDelivery) { // Indicate hours where delivery is available } }
Objective-C
- (void)examineOpeningHours:(GMSPlace *) place { // Check if the current opening hours contains a special day that has exceptional hours GMSOpeningHours *currentOpeningHours = place.currentOpeningHours; if (currentOpeningHours != nil) { NSArray<GMSPlaceSpecialDay *> *specialDays = currentOpeningHours.specialDays; if ([specialDays count] != 0) { for (GMSPlaceSpecialDay *specialDay in specialDays) { NSDate *date = specialDay.date; if ([specialDay isExceptional]) { // Indicate exceptional hours } } } } // Check if current opening hours contains a truncated time period NSArray <GMSPeriod *> * periods = currentOpeningHours.periods; if ([periods count] != 0) { for (GMSPeriod * period in periods) { GMSTimeOfWeek *open = period.open; GMSTimeOfWeek *close = period.close; if (open) { if ([open isTruncated]) { // Indicate truncated time period } } } } // Check if the place's secondary opening hours indicate when delivery is available GMSOpeningHours *secondaryOpeningHours = place.secondaryOpeningHours; GMSPlaceHoursType hoursType = secondaryOpeningHours.getHoursType; if (hoursType == GMSPlaceHoursTypeDelivery) { // Indicate hours where delivery is available } }
קבלת מקום לפי מזהה
מזהה מקום הוא מזהה טקסטואלי שמזהה באופן ייחודי מקום. ב-Places SDK ל-iOS, אפשר לאחזר את המזהה של מקום מאובייקט GMSPlace
. אפשר לשמור את מזהה המקום ולהשתמש בו כדי לאחזר את האובייקט GMSPlace
שוב בהמשך.
כדי לקבל מקום לפי מזהה, קוראים ל-GMSPlacesClient
fetchPlaceFromPlaceID:
ומעבירים את הפרמטרים הבאים:
- מחרוזת שמכילה מזהה מקום.
- אחד או יותר
GMSPlaceField
, שמציינים את סוגי הנתונים שיוחזרו. - טוקן של סשן אם השיחה מתבצעת כדי להשלים שאילתה של השלמה אוטומטית. אחרת, מעבירים nil.
-
GMSPlaceResultCallback
לטיפול בתוצאה.
ממשק ה-API מפעיל את שיטת הקריאה החוזרת שצוינה, ומעביר אליה אובייקט GMSPlace
. אם המקום לא נמצא, אובייקט המקום הוא nil.
Places Swift SDK ל-iOS
// Initialize Places Swift Client. let placesClient = PlacesClient.shared // A hotel in Saigon with an attribution let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs" // Fetch Place Request. let fetchPlaceRequest = FetchPlaceRequest( placeID: placeID, placeProperties: [.displayName] ) Task { switch await placesClient.fetchPlace(with: fetchPlaceRequest) { case .success(let place): print("The selected place is: \(place.displayName): \(String(describing: place.description))") case .failure(let placesError): print("Place not found: \(placeID); \(placesError)") } }
Swift
// A hotel in Saigon with an attribution. let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs" // Specify the place data types to return. let fields: GMSPlaceField = GMSPlaceField(rawValue: UInt(GMSPlaceField.name.rawValue) | UInt(GMSPlaceField.placeID.rawValue))! placesClient?.fetchPlace(fromPlaceID: placeID, placeFields: fields, sessionToken: nil, callback: { (place: GMSPlace?, error: Error?) in if let error = error { print("An error occurred: \(error.localizedDescription)") return } if let place = place { self.lblName?.text = place.name print("The selected place is: \(place.name)") } })
Objective-C
// A hotel in Saigon with an attribution. NSString *placeID = @"ChIJV4k8_9UodTERU5KXbkYpSYs"; // Specify the place data types to return. GMSPlaceField fields = (GMSPlaceFieldName | GMSPlaceFieldPlaceID); [_placesClient fetchPlaceFromPlaceID:placeID placeFields:fields sessionToken:nil callback:^(GMSPlace * _Nullable place, NSError * _Nullable error) { if (error != nil) { NSLog(@"An error occurred %@", [error localizedDescription]); return; } if (place != nil) { NSLog(@"The selected place is: %@", [place name]); } }];
הצגת שיוכים באפליקציה
כשהאפליקציה מציגה מידע שהתקבל מ-GMSPlacesClient
lookUpPlaceID:callback:
, היא חייבת להציג גם את פרטי השיוך.
אפשר לעיין בתיעוד בנושא שיוך.
מידע נוסף על מזהי מקומות
מזהה המקום שמשמש ב-Places SDK ל-iOS הוא אותו מזהה שמשמש ב-Places API, ב-Places SDK ל-Android ובממשקי API אחרים של Google.
כל מזהה מקום יכול להתייחס רק למקום אחד, אבל למקום אחד יכולים להיות יותר ממזהה מקום אחד.
יש נסיבות שבהן מקום מקבל מזהה מקום חדש. לדוגמה, זה יכול לקרות אם עסק עובר למיקום חדש.
כשמבקשים מיקום באמצעות ציון מזהה מקום, אפשר להיות בטוחים שתמיד יוחזר אותו מקום בתגובה (אם המקום עדיין קיים). עם זאת, שימו לב שהתשובה עשויה להכיל מזהה מקום ששונה מזה שצוין בבקשה.
מידע נוסף זמין במאמר סקירה כללית על מזהה מקום.