Định cấu hình thông tin gián đoạn theo thời gian thực
Thông tin gián đoạn theo thời gian thực là một tập hợp các tính năng cảnh báo người dùng về tình trạng gián đoạn trên tuyến đường của họ, đồng thời cho phép người dùng báo cáo và xác minh tình trạng gián đoạn mà họ gặp phải. Ví dụ về các sự cố bao gồm tai nạn xe cộ, tình trạng tắc nghẽn giao thông, sự hiện diện của cảnh sát và camera bắn tốc độ, công trình xây dựng, tình trạng đóng làn đường và một số điều kiện thời tiết. Trang này giải thích các tính năng gián đoạn theo thời gian thực và các lựa chọn cấu hình của các tính năng này, bao gồm cả những điểm cần cân nhắc đối với các ứng dụng sử dụng giao diện người dùng điều hướng tuỳ chỉnh.
Các tính năng về tình trạng gián đoạn theo thời gian thực
Navigation SDK bao gồm các tính năng gián đoạn theo thời gian thực sau đây trong trải nghiệm điều hướng cốt lõi:- Chú thích tương tác về tình trạng gián đoạn dọc theo tuyến đường.
- Cảnh báo tự động về tình trạng gián đoạn có tính năng bình chọn trong khi chỉ đường.
- Báo cáo tình trạng gián đoạn trong khi đang chỉ đường.
Các tính năng này có thể định cấu hình và được bật theo mặc định. Các phần sau đây cung cấp thêm thông tin về các tính năng và lựa chọn cấu hình hiện có.
Chú thích tương tác về tình trạng gián đoạn dọc theo tuyến đường
Khi một ứng dụng hiển thị tuyến đường, cho dù là trong phần tổng quan về tuyến đường hay trong khi đang di chuyển, mọi sự cố hiện tại sẽ xuất hiện dưới dạng chú thích dọc theo tuyến đường. Chú thích có một biểu tượng cho biết loại gián đoạn.

Bạn có thể kiểm soát việc hiển thị chú thích về tình trạng gián đoạn dọc theo các tuyến đường bằng cách sử dụng shouldDisplayPrompts
. Chế độ này cũng kiểm soát việc hiển thị cảnh báo tự động khi người dùng tiếp cận tình trạng gián đoạn.
mapView.navigator.shouldDisplayPrompts = true
Hiển thị thông tin chi tiết về sự gián đoạn khi người dùng nhấn vào chú thích
Người dùng có thể nhấn vào chú thích để hiển thị một thẻ thông tin có thêm thông tin về tình trạng gián đoạn, bao gồm cả loại tình trạng gián đoạn, thời gian báo cáo gần đây nhất và trong một số trường hợp, có lựa chọn bình chọn xem tình trạng gián đoạn có còn xảy ra hay không. Có 2 loại thẻ thông tin có thể xuất hiện, tuỳ thuộc vào việc người dùng có đang ở chế độ chỉ đường hay không, đồng thời các lựa chọn về cấu hình sẽ khác nhau đối với từng loại.
Thẻ thông tin chú thích trên thông tin tổng quan về tuyến đường, trước khi bắt đầu chế độ chỉ đường đang hoạt động
Khi người dùng nhấn vào chú thích trên chế độ xem tổng quan về tuyến đường, trước khi bắt đầu chế độ chỉ đường chủ động, một thẻ thông tin sẽ xuất hiện kèm theo thông tin chi tiết hơn về sự cố.

Bạn có thể kiểm soát khả năng người dùng nhấn vào chú thích về sự cố trên phần tổng quan về tuyến đường để hiển thị thêm thông tin bằng cách sử dụng showsIncidentCards
.
mapView.settings.showsIncidentCards = true
Thẻ thông tin chú thích trong khi đang chỉ đường
Khi chú thích về sự cố xuất hiện dọc theo một tuyến đường trong quá trình chỉ đường đang hoạt động, người dùng có thể nhấn vào chú thích đó để hiển thị một thẻ thông tin có thêm thông tin về sự cố, bao gồm cả loại sự cố và thời gian báo cáo gần đây nhất, cũng như các nút để bình chọn xem sự cố có còn xảy ra hay không. Google sẽ xử lý các lượt bình chọn do người dùng gửi và có thể hiển thị trên bản đồ cho những người dùng Google Maps và Navigation SDK khác, cũng như dùng để xác định xem có tiếp tục hiển thị thông tin gián đoạn hay không.

Bạn có thể kiểm soát việc hiển thị và khả năng nhấn của chú thích về sự cố trong quá trình điều hướng đang diễn ra bằng cách sử dụng shouldDisplayPrompts
. Lớp này cũng kiểm soát việc hiển thị chú thích dọc theo các tuyến đường và việc hiển thị cảnh báo tự động khi người dùng tiếp cận một sự cố.
mapView.navigator.shouldDisplayPrompts = true
Cảnh báo gián đoạn tự động có tính năng bình chọn trong khi chỉ đường
Trong quá trình điều hướng chủ động, khi người dùng đến gần một điểm gián đoạn trên tuyến đường, một lời nhắc sẽ xuất hiện kèm theo thông tin về điểm gián đoạn và các nút để bình chọn xem điểm gián đoạn đó có còn tồn tại hay không. Google sẽ xử lý các lượt bình chọn do người dùng gửi và có thể hiển thị các lượt bình chọn đó trên bản đồ cho những người dùng khác của Google Maps và Navigation SDK, cũng như dùng để xác định xem có nên tiếp tục hiển thị thông tin về sự cố hay không.

Bạn có thể định cấu hình cách hiển thị lời nhắc cảnh báo trong khi chỉ đường bằng cách sử dụng shouldDisplayPrompts
. Lớp này cũng kiểm soát cách hiển thị chú thích dọc theo các tuyến đường.
mapView.navigator.shouldDisplayPrompts = true
Báo cáo tình trạng gián đoạn trong khi đang chỉ đường
Trong chế độ chỉ đường đang hoạt động, một nút sẽ xuất hiện trên giao diện người dùng chỉ đường, cho phép người dùng báo cáo các sự cố mới dọc theo tuyến đường của họ. Khi người dùng nhấn vào nút này, một trình đơn sẽ xuất hiện với các loại gián đoạn có thể báo cáo. Google sẽ xử lý những báo cáo mà người dùng gửi và có thể hiển thị báo cáo đó trên bản đồ cho những người dùng khác của Google Maps và Navigation SDK.


Hiện hoặc ẩn nút báo cáo chuẩn
Bạn có thể định cấu hình chế độ hiển thị của nút báo cáo tiêu chuẩn trong quá trình điều hướng đang hoạt động bằng cách sử dụng navigationReportIncidentButtonEnabled
.
// Enables the incident reporting FAB to show in situations where incident // reporting is possible. mapView.settings.navigationReportIncidentButtonEnabled = true
Thêm nút báo cáo tuỳ chỉnh
Thay vì nút báo cáo gián đoạn tiêu chuẩn, bạn có thể thêm một nút báo cáo tuỳ chỉnh vào giao diện người dùng điều hướng. Khi người dùng nhấp vào nút tuỳ chỉnh, bạn có thể kích hoạt việc hiển thị trình đơn báo cáo bằng cách gọi phương thức presentReportIncidentsPanel
. Trước khi thêm nút báo cáo tuỳ chỉnh, hãy xác minh rằng ứng dụng đang ở chế độ điều hướng đang hoạt động và người dùng đang ở quốc gia có bật tính năng báo cáo bằng cách gọi reportIncidentsAvailable
. Nếu một trong hai điều kiện này không đúng, thì trình đơn báo cáo sẽ không xuất hiện.
// 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. } }
Thao tác với giao diện người dùng điều hướng tuỳ chỉnh
Nếu quá trình triển khai Navigation SDK của bạn có các phần tử giao diện người dùng tuỳ chỉnh, bạn cần cân nhắc các phần tử gây gián đoạn theo thời gian thực để tránh xung đột.
Vị trí của nút báo cáo
Theo mặc định, nút báo cáo sự cố được đặt ở góc dưới cùng/góc cuối của bản đồ – ở bên phải đối với ngôn ngữ đọc từ trái sang phải và bên trái đối với ngôn ngữ đọc từ phải sang trái. Nếu bạn cần di chuyển nút báo cáo để có chỗ cho các phần tử giao diện người dùng tuỳ chỉnh, hãy sử dụngbottomTrailingButtonsLayoutGuide
.
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 (Thử nghiệm)
Prompt Visibility API (API Hiển thị lời nhắc) giúp bạn tránh xung đột giữa các phần tử giao diện người dùng do Navigation SDK tạo và các phần tử giao diện người dùng tuỳ chỉnh của riêng bạn bằng cách thêm một trình nghe để nhận lệnh gọi lại trước khi một phần tử giao diện người dùng của Navigation SDK sắp xuất hiện và ngay khi phần tử đó bị xoá. Bạn có thể nhận các lệnh gọi lại cho các phần tử gián đoạn theo thời gian thực, bao gồm cả thẻ thông tin, lời nhắc và trình đơn báo cáo gián đoạn, cũng như cho các thông báo khác do Navigation SDK tạo.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. } ...