הגדרת שיבושים בזמן אמת
התכונה 'שיבושים בזמן אמת' כוללת אוסף של תכונות שמעדכנות את המשתמשים לגבי שיבושים במסלול שלהם, ומאפשרות להם לדווח על שיבושים שהם נתקלים בהם ולאמת אותם. דוגמאות לשיבושים: תאונות דרכים, עומסי תנועה, נוכחות של משטרה ומצלמות מהירות, עבודות בנייה, סגירת נתיבים ותנאי מזג אוויר מסוימים. בדף הזה מוסבר על התכונות של שיבושים בזמן אמת ועל אפשרויות ההגדרה שלהן, כולל שיקולים לגבי אפליקציות שמשתמשות בממשקי משתמש מותאמים אישית לניווט.
תכונות שקשורות לשיבושים בזמן אמת
Navigation SDK כולל את התכונות הבאות לשיבושים בזמן אמת כחלק מחוויית הניווט הבסיסית:- הודעות אינטראקטיביות על הפרעות לאורך מסלולים.
- התראות אוטומטיות על שיבושים עם אפשרות להצביע במהלך ניווט פעיל.
- דיווח על שיבושים במהלך ניווט פעיל.
התכונות האלה ניתנות להגדרה ומופעלות כברירת מחדל. בקטעים הבאים מפורט מידע נוסף על התכונות ועל אפשרויות ההגדרה הזמינות.
הסברים אינטראקטיביים על שיבושים לאורך המסלולים
כשמוצג מסלול באפליקציה, בסקירת מסלול או במהלך ניווט פעיל, כל השיבושים הנוכחיים מופיעים כהסברים לאורך המסלול. כשמפעילים את שכבת התנועה, שיבושים שלאורך המסלול מופיעים גם הם במפה. ההסברים כוללים סמל שמציין את סוג השיבוש.
אפשר לשלוט בהצגה של הערות על שיבושים לאורך מסלולים באמצעות shouldDisplayPrompts, ששולט גם בהצגה של התראות אוטומטיות כשמשתמש מתקרב לשיבוש.
mapView.navigator.shouldDisplayPrompts = true
הצגת פרטים על שיבושים כשמשתמש מקיש על הסבר
לחיצה על סימון של שיבוש פותחת כרטיס מידע עם פרטים נוספים. ההגדרה הזו חלה על הודעות לגבי מסלול הנסיעה וגם על הודעות לגבי חריגה מהמסלול, אבל הודעות לגבי חריגה מהמסלול מופיעות רק אם שכבת התנועה מופעלת. בכרטיס מוצג סוג השיבוש, השעה שבה הוא דווח לאחרונה, ולפעמים גם אפשרות להצביע אם השיבוש עדיין קיים. סוג כרטיס המידע ואפשרויות ההגדרה שלו משתנים בהתאם למצב הניווט של המשתמש.
כרטיסי מידע עם הסברים על מסלולים, לפני שמתחילים בניווט פעיל
לפני שמתחילים בניווט פעיל, המשתמשים יכולים להקיש על בועת הסבר במסלול או מחוץ למסלול במפה או בסקירת המסלול כדי לפתוח כרטיס מידע. כדי לקבל הודעות על חריגה מהמסלול, צריך להפעיל את שכבת התנועה. בכרטיס המידע מופיעים פרטים נוספים על השיבוש.
אתם יכולים להשתמש במאפיין showsIncidentCards כדי לקבוע אם המשתמשים יוכלו ללחוץ על הסמלים של השיבושים בסקירות המסלולים כדי להציג מידע נוסף.
mapView.settings.showsIncidentCards = true
כרטיסי מידע עם הסברים במהלך ניווט פעיל
במהלך ניווט פעיל, המשתמשים יכולים להקיש על בועת מידע על שיבוש בדרך או מחוץ לדרך כדי לפתוח כרטיס מידע. בכרטיס מוצגים סוג השיבוש והמועד האחרון שבו דווח עליו, והוא כולל לחצנים שמאפשרים למשתמשים להצביע אם השיבוש עדיין קיים.
ההצבעה זמינה לגבי שיבושים במסלול ומחוץ למסלול במרחק של עד 5 ק"מ מהמשתמש, לא כולל סגירת כבישים. Google מעבדת את ההצבעות האלה כדי לקבוע אם להמשיך להציג את השיבוש. יכול להיות שההצבעות יופיעו גם במפה למשתמשים אחרים ב-SDK של מפות Google וב-SDK של Google Navigation.
אתם יכולים לשלוט בהצגה של הודעות על שיבושים ובאפשרות להקיש עליהן במהלך ניווט פעיל באמצעות shouldDisplayPrompts, ששולט גם בהצגת הודעות לאורך המסלולים ובהצגת התראות אוטומטיות כשמשתמש מתקרב לשיבוש.
mapView.navigator.shouldDisplayPrompts = true
התראות אוטומטיות על שיבושים עם אפשרות הצבעה במהלך ניווט פעיל
במהלך ניווט פעיל, כשמשתמש מתקרב לשיבוש לאורך המסלול, מופיעה הנחיה עם מידע על השיבוש ולחצנים להצבעה אם השיבוש עדיין קיים. ההצבעות שנשלחות על ידי משתמשים עוברות עיבוד על ידי Google, ויכול להיות שהן יוצגו במפה למשתמשים אחרים ב-Google Maps וב-Navigation SDK, וגם ישמשו כדי לקבוע אם להמשיך להציג את השיבוש.
אפשר להגדיר את התצוגה של הנחיות ההתראה במהלך ניווט פעיל באמצעות
shouldDisplayPrompts, ששולט גם בתצוגה של הערות לאורך המסלולים.
mapView.navigator.shouldDisplayPrompts = true
דיווח על שיבושים במהלך ניווט פעיל
במהלך מצב ניווט פעיל, מופיע לחצן בממשק המשתמש של הניווט שמאפשר למשתמשים לדווח על שיבושים חדשים במסלול שלהם. כשמשתמש מקיש על הלחצן, מופיע תפריט עם סוגי השיבושים הזמינים לדיווח. דיווחים שמשתמשים שולחים מעובדים על ידי Google, ויכול להיות שהם יוצגו במפה למשתמשים אחרים ב-Google Maps וב-Navigation SDK.
הצגה או הסתרה של לחצן הדוחות הרגילים
אתם יכולים להגדיר את הנראות של לחצן הדיווח הרגיל במהלך ניווט פעיל באמצעות navigationReportIncidentButtonEnabled.
// Enables the incident reporting FAB to show in situations where incident // reporting is possible. mapView.settings.navigationReportIncidentButtonEnabled = true
הוספת לחצן דיווח בהתאמה אישית
במקום לחצן הדיווח הרגיל על שיבושים, אתם יכולים להוסיף לחצן דיווח בהתאמה אישית לממשק המשתמש של הניווט. כשמשתמש לוחץ על הלחצן המותאם אישית, אפשר להפעיל את הצגת תפריט הדיווח באמצעות קריאה לשיטה presentReportIncidentsPanel. לפני שמוסיפים לחצן דיווח בהתאמה אישית, צריך לוודא שהאפליקציה נמצאת בניווט פעיל והמשתמש נמצא במדינה שבה הדיווח מופעל. לשם כך, קוראים ל-reportIncidentsAvailable. אם אחד מהתנאים האלה לא מתקיים, תפריט הדיווח לא יופיע.
// Check if reporting is available before displaying your button let isReportingAvailable = mapview.isIncidentReportingAvailable() customReportingIncidentButton.isHidden = !isReportingAvailable customReportingIncidentButton.addTarget(self, action: #selector(didTapReportIncidentButton), for: .touchUpInside) // Trigger the reporting flow if the button is clicked func didTapReportIncidentButton() { mapView.presentReportIncidentsPanel(self) { [weak self] error in guard let self = self else { return } if let error = error as NSError? { if error.domain == GMSMapViewPresentReportIncidentPanelErrorDomain { let errorCode = GMSMapViewPresentReportIncidentPanelErrorCode(rawValue: error.code) switch errorCode { case .internal: self.showErrorMessage( title: "Error Presenting Report Incident Panel", message: "An internal error occurred." ) case .reportingNotAvailable: self.showErrorMessage( title: "Error Presenting Report Incident Panel", message: "Reporting is not available." ) case .none: self.showErrorMessage( title: "Error Presenting Report Incident Panel", message: "An unknown error occurred." ) } } else { // Handle other potential errors (e.g., network errors) self.showErrorMessage( title: "Error Presenting Report Incident Panel", message: "An unexpected error occurred: \(error.localizedDescription)" ) } } // If error is nil, the panel was presented successfully. You can add any extra logic here. } }
עבודה עם ממשקי משתמש מותאמים אישית לניווט
אם ההטמעה של Navigation SDK כוללת רכיבי ממשק משתמש בהתאמה אישית, צריך לקחת בחשבון את רכיבי השיבוש בזמן אמת כדי למנוע התנגשויות.
מיקום כפתור הדיווח
כברירת מחדל, הכפתור לדיווח על שיבושים ממוקם בפינה התחתונה של המפה – בצד ימין בשפות שנכתבות משמאל לימין, ובצד שמאל בשפות שנכתבות מימין לשמאל. אם אתם צריכים להזיז את כפתור הדיווח כדי לפנות מקום לרכיבים בממשק המשתמש המותאמים אישית, השתמשו ב-bottomTrailingButtonsLayoutGuide.
Swift
// Create a new layout guide let topRightLayoutGuide = UILayoutGuide() self.view.addLayoutGuide(topRightLayoutGuide) // Activate constraints using fixed constants here as an example // assuming the current reporting button is of fixed height topRightLayoutGuide.topAnchor.constraint(equalTo: _mapView.navigationHeaderLayoutGuide.bottomAnchor, constant: 50).isActive = true topRightLayoutGuide.trailingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.trailingAnchor, constant: -14).isActive = true // Assign the layout guide _mapView.bottomTrailingButtonsLayoutGuide = topRightLayoutGuide // Create an alternate layout guide to use when the header and the footer are not full width let topRightAlternateLayoutGuide = UILayoutGuide() self.view.addLayoutGuide(topRightAlternateLayoutGuide) // Activate constraints using fixed constants here as an example // assuming the current RTD button is of fixed height topRightAlternateLayoutGuide.topAnchor.constraint(equalTo: _mapView.navigationHeaderLayoutGuide.bottomAnchor, constant: 20).isActive = true topRightAlternateLayoutGuide.trailingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.trailingAnchor, constant: -10).isActive = true // Assign the layout guide _mapView.bottomTrailingButtonsAlternateLayoutGuide = topRightAlternateLayoutGuide
Objective-C
// Create a new layout guide UILayoutGuide *topRightLayoutGuide = [[UILayoutGuide alloc] init]; [self.view addLayoutGuide:topRightLayoutGuide]; // Activate constraints using fixed constants here as an example // assuming the current RTD button is of fixed height [[topRightLayoutGuide.topAnchor constraintEqualToAnchor:_mapView.navigationHeaderLayoutGuide.bottomAnchor constant:50] setActive:YES]; [[topRightLayoutGuide.trailingAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.trailingAnchor constant:-14] setActive:YES]; // Assign the layout guide _mapView.bottomTrailingButtonsLayoutGuide = topRightLayoutGuide; // Create an alternate layout guide to use when the header and the footer are not full width UILayoutGuide *topRightAlternateLayoutGuide = [[UILayoutGuide alloc] init]; [self.view addLayoutGuide:topRightAlternateLayoutGuide]; // Activate constraints using fixed constants here as an example // assuming the current RTD button is of fixed height [[topRightAlternateLayoutGuide.topAnchor constraintEqualToAnchor:_mapView.navigationHeaderLayoutGuide.bottomAnchor constant:50] setActive:YES]; [[topRightAlternateLayoutGuide.trailingAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.trailingAnchor constant:-14] setActive:YES]; // Assign the layout guide _mapView.bottomTrailingButtonsAlternateLayoutGuide = topRightAlternateLayoutGuide;
Prompt Visibility API (ניסיוני)
ה-API של חשיפת ההנחיה עוזר לכם להימנע מקונפליקטים בין רכיבי ממשק משתמש שנוצרו על ידי Navigation SDK לבין רכיבי ממשק משתמש מותאמים אישית משלכם. הוא עושה זאת על ידי הוספת מאזין לקבלת קריאה חוזרת לפני שרכיב ממשק משתמש של Navigation SDK עומד להופיע, וברגע שהרכיב מוסר. אתם יכולים לקבל קריאות חוזרות (callbacks) לגבי רכיבים של שיבושים בזמן אמת, כולל כרטיסי מידע, הנחיות ותפריט הדיווח על שיבושים, וגם לגבי התראות אחרות שנוצרות על ידי Navigation SDK.Swift
// Additional methods added to GMSNavigatorListener ... func navigatorWillPresentPrompt(_ navigator: GMSNavigator) { // Hide any sort of custom UI element. } func navigatorDidDismissPrompt(_ navigator: GMSNavigator) { // Show any sort of custom UI element. } ...
Objective-C
// Additional methods added to GMSNavigatorListener ... - (void)navigatorWillPresentPrompt:(GMSNavigator *)navigator { // Hide any sort of custom UI element. } - (void)navigatorDidDismissPrompt:(GMSNavigator *)navigator { // Show any sort of custom UI element. } ...