เลือกแพลตฟอร์ม: Android iOS

กำหนดค่าการหยุดชะงักแบบเรียลไทม์

การหยุดชะงักแบบเรียลไทม์คือชุดฟีเจอร์ที่แจ้งเตือนผู้ใช้เกี่ยวกับการหยุดชะงัก ตามเส้นทาง และช่วยให้ผู้ใช้รายงานและยืนยันการหยุดชะงักที่พบได้ ตัวอย่างของการติดขัด ได้แก่ อุบัติเหตุจากยานพาหนะ การจราจรติดขัด การปรากฏตัวของตำรวจและกล้องจับความเร็ว การก่อสร้าง การปิดช่องทางจราจร และสภาพอากาศบางอย่าง หน้านี้จะอธิบายฟีเจอร์การหยุดชะงักแบบเรียลไทม์และตัวเลือกการกำหนดค่า รวมถึงข้อควรพิจารณาสำหรับแอปที่ใช้ UI การนำทางที่กำหนดเอง

ฟีเจอร์การหยุดชะงักแบบเรียลไทม์

Navigation SDK มีฟีเจอร์การหยุดชะงักแบบเรียลไทม์ต่อไปนี้ซึ่งเป็นส่วนหนึ่งของประสบการณ์การนำทางหลัก

ฟีเจอร์เหล่านี้กำหนดค่าได้และเปิดใช้อยู่โดยค่าเริ่มต้น ส่วนต่อไปนี้จะให้ข้อมูลเพิ่มเติมเกี่ยวกับฟีเจอร์และตัวเลือกการกำหนดค่าที่มี

ข้อความไฮไลต์การหยุดชะงักแบบอินเทอร์แอกทีฟตามเส้นทาง

เมื่อแอปแสดงเส้นทาง ไม่ว่าจะเป็นในภาพรวมเส้นทางหรือระหว่างการนำทางที่ใช้งานอยู่ การหยุดชะงักในปัจจุบันจะปรากฏเป็นข้อความอธิบายตามเส้นทาง เมื่อเปิดใช้เลเยอร์การจราจร การจราจรขัดข้องนอกเส้นทางจะปรากฏบนแผนที่ด้วย ข้อความไฮไลต์จะมีไอคอนที่ระบุประเภทการหยุดชะงัก

ข้อความไฮไลต์ตามเส้นทาง

คุณสามารถควบคุมการแสดงข้อความไฮไลต์การหยุดชะงักตามเส้นทางได้โดยใช้shouldDisplayPrompts ซึ่งจะควบคุมการแสดงการแจ้งเตือนอัตโนมัติเมื่อผู้ใช้เข้าใกล้การหยุดชะงักด้วย

mapView.navigator.shouldDisplayPrompts = true

แสดงรายละเอียดการหยุดชะงักเมื่อผู้ใช้แตะข้อความไฮไลต์

การแตะข้อความไฮไลต์การหยุดชะงักจะเปิดการ์ดข้อมูลที่มีรายละเอียดเพิ่มเติม ซึ่งใช้ได้กับทั้งข้อความไฮไลต์ในเส้นทางและนอกเส้นทาง แต่ข้อความไฮไลต์นอกเส้นทางจะปรากฏก็ต่อเมื่อเปิดใช้เลเยอร์การจราจรเท่านั้น โดยการ์ดจะแสดงประเภทการหยุดชะงัก เวลาที่รายงานล่าสุด และบางครั้งจะมีตัวเลือกให้โหวตว่ายังมีการหยุดชะงักอยู่หรือไม่ ประเภทการ์ดข้อมูลและตัวเลือกการกำหนดค่าจะแตกต่างกันไปโดยขึ้นอยู่กับว่าผู้ใช้กำลังอยู่ในโหมดการนำทางที่ใช้งานอยู่หรือไม่

การ์ดข้อมูลข้อความไฮไลต์ในภาพรวมเส้นทางก่อนเริ่มการนำทางที่ใช้งานอยู่

ก่อนเริ่มการนำทางที่ใช้งานอยู่ ผู้ใช้สามารถแตะข้อความไฮไลต์ในเส้นทางหรือนอกเส้นทางบนแผนที่หรือภาพรวมเส้นทางเพื่อเปิดการ์ดข้อมูล ข้อความไฮไลต์นอกเส้นทางต้องเปิดใช้เลเยอร์การจราจร การ์ดข้อมูลจะให้รายละเอียดเพิ่มเติมเกี่ยวกับการหยุดชะงัก

การ์ดข้อมูลภาพรวม

คุณควบคุมความสามารถของผู้ใช้ในการแตะข้อความไฮไลต์การหยุดชะงักในภาพรวมเส้นทางเพื่อแสดงข้อมูลเพิ่มเติมได้โดยใช้ showsIncidentCards

mapView.settings.showsIncidentCards = true

การ์ดข้อมูลที่ไฮไลต์ระหว่างการนำทางที่ใช้งานอยู่

ในระหว่างการนำทางที่ใช้งานอยู่ ผู้ใช้สามารถแตะข้อความไฮไลต์การหยุดชะงักในเส้นทางหรือนอกเส้นทางเพื่อเปิดการ์ดข้อมูล การ์ดจะแสดงประเภทการหยุดชะงักและเวลาที่รายงานล่าสุด รวมถึงมีปุ่มให้ผู้ใช้โหวตว่าการหยุดชะงักยังคงเกิดขึ้นอยู่หรือไม่

การโหวตใช้ได้กับการหยุดชะงักในเส้นทางและนอกเส้นทางภายใน 5 กม. จากผู้ใช้ โดยไม่รวมการปิดถนน Google จะประมวลผลคะแนนเหล่านี้เพื่อช่วยพิจารณาว่าจะแสดงการหยุดชะงักต่อไปหรือไม่ นอกจากนี้ คะแนนยังอาจปรากฏบนแผนที่สำหรับผู้ใช้ Google Maps และ Navigation SDK คนอื่นๆ ด้วย

การ์ดข้อมูลการนำทางที่ใช้งานอยู่

คุณสามารถควบคุมการแสดงและการแตะข้อความไฮไลต์การหยุดชะงักระหว่างการนำทางที่ใช้งานอยู่ได้โดยใช้ shouldDisplayPrompts ซึ่งยังควบคุม การแสดงข้อความไฮไลต์ตามเส้นทางและ การแสดงการแจ้งเตือนอัตโนมัติเมื่อผู้ใช้เข้าใกล้การหยุดชะงักด้วย

mapView.navigator.shouldDisplayPrompts = true

การแจ้งเตือนเหตุขัดข้องอัตโนมัติพร้อมการโหวตระหว่างการนำทางที่ใช้งานอยู่

ในระหว่างการนำทางที่ใช้งานอยู่ เมื่อผู้ใช้เข้าใกล้การหยุดชะงักตามเส้นทาง ระบบจะแสดงข้อความแจ้งพร้อม ข้อมูลเกี่ยวกับการหยุดชะงักและปุ่มสำหรับโหวตว่าการหยุดชะงักยังคงอยู่หรือไม่ Google จะประมวลผลคะแนนที่ผู้ใช้ส่งและอาจแสดงคะแนนดังกล่าวในแผนที่สำหรับ ผู้ใช้ Google Maps และ Navigation SDK รายอื่นๆ รวมถึงใช้เพื่อพิจารณาว่าจะแสดงการหยุดชะงักต่อไปหรือไม่

การ์ดข้อมูลการนำทางที่ใช้งานอยู่

คุณสามารถกำหนดค่าการแสดงข้อความแจ้งการแจ้งเตือนระหว่างการนำทางที่ใช้งานอยู่ได้โดยใช้ shouldDisplayPrompts ซึ่งจะควบคุมการแสดง ข้อความไฮไลต์ตามเส้นทางด้วย

mapView.navigator.shouldDisplayPrompts = true

การรายงานเหตุขัดข้องระหว่างการนำทางที่ใช้งานอยู่

ในโหมดการไปยังส่วนต่างๆ ที่ใช้งานอยู่ ปุ่มจะปรากฏใน UI การนำทางเพื่อให้ผู้ใช้รายงานการหยุดชะงักใหม่ตามเส้นทาง เมื่อผู้ใช้แตะปุ่มนี้ เมนูที่มีประเภทการหยุดชะงักที่รายงานได้จะปรากฏขึ้น Google จะประมวลผลรายงานที่ผู้ใช้ส่งและอาจแสดงรายงานดังกล่าวในแผนที่สำหรับผู้ใช้ Google Maps และ Navigation SDK รายอื่นๆ

ปุ่มรายงาน เมนูการรายงาน

แสดงหรือซ่อนปุ่มการรายงานมาตรฐาน

คุณกำหนดค่าระดับการมองเห็นของปุ่มการรายงานมาตรฐานในระหว่างการนำทางที่ใช้งานอยู่ได้โดยใช้ navigationReportIncidentButtonEnabled

// Enables the incident reporting FAB to show in situations where incident
// reporting is possible.
mapView.settings.navigationReportIncidentButtonEnabled = true

เพิ่มปุ่มรายงานที่กำหนดเอง

คุณสามารถเพิ่มปุ่มรายงานที่กำหนดเองลงใน UI การนำทางแทนปุ่มรายงานการหยุดชะงักมาตรฐานได้ เมื่อผู้ใช้คลิกปุ่มที่กำหนดเอง คุณจะทริกเกอร์การแสดงเมนูการรายงานได้โดยเรียกใช้เมธอด 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.
          }
     }

ทำงานกับ UI การนำทางที่กำหนดเอง

หากการติดตั้งใช้งาน Navigation SDK มีองค์ประกอบ UI ที่กำหนดเอง คุณต้องพิจารณาองค์ประกอบการหยุดชะงักแบบเรียลไทม์เพื่อหลีกเลี่ยงความขัดแย้ง

การวางตำแหน่งปุ่มรายงาน

โดยค่าเริ่มต้น ปุ่มรายงานการหยุดชะงักจะอยู่ที่มุมด้านล่าง/มุมท้ายของแผนที่ โดยจะอยู่ทางด้านขวาสำหรับภาษาที่อ่านจากซ้ายไปขวา และอยู่ทางด้านซ้ายสำหรับภาษาที่อ่านจากขวาไปซ้าย หากต้องการย้ายปุ่มรายงานเพื่อเพิ่มพื้นที่สำหรับองค์ประกอบ UI ที่กำหนดเอง ให้ใช้ 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 (ทดลอง)

Prompt Visibility API ช่วยให้คุณหลีกเลี่ยงความขัดแย้งระหว่างองค์ประกอบ UI ที่สร้างโดย Navigation SDK กับองค์ประกอบ UI ที่กำหนดเองของคุณเองได้โดยการเพิ่ม Listener เพื่อรับ Callback ก่อนที่องค์ประกอบ UI ของ Navigation SDK จะปรากฏขึ้น และทันทีที่นำองค์ประกอบออก คุณจะได้รับ การเรียกกลับสำหรับองค์ประกอบการหยุดชะงักแบบเรียลไทม์ ซึ่งรวมถึงการ์ดข้อมูล พรอมต์ และเมนูการรายงานการหยุดชะงัก รวมถึงการแจ้งเตือนอื่นๆ ที่สร้างโดย 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.
}
...