Konfigurowanie zakłóceń w czasie rzeczywistym
Zakłócenia w czasie rzeczywistym to zbiór funkcji, które ostrzegają użytkowników o zakłóceniach na trasie i umożliwiają im zgłaszanie i weryfikowanie napotkanych zakłóceń. Przykłady zakłóceń to wypadki drogowe, korki, obecność policji i fotoradarów, roboty drogowe, zamknięcia pasów ruchu i niektóre warunki pogodowe. Na tej stronie znajdziesz informacje o funkcjach zakłóceń w czasie rzeczywistym i ich opcjach konfiguracji, a także wskazówki dotyczące aplikacji, które korzystają z niestandardowych interfejsów nawigacji.
Funkcje dotyczące zakłóceń w czasie rzeczywistym
Pakiet Navigation SDK obejmuje te funkcje dotyczące zakłóceń w czasie rzeczywistym, które są częścią podstawowej funkcji nawigacji:- Interaktywne wywołania dotyczące utrudnień na trasach.
- Automatyczne alerty o utrudnieniach z możliwością głosowania podczas aktywnej nawigacji.
- Zgłaszanie utrudnień podczas aktywnej nawigacji
Te funkcje można skonfigurować i są one domyślnie włączone. Więcej informacji o funkcjach i dostępnych opcjach konfiguracji znajdziesz w kolejnych sekcjach.
Interaktywne powiadomienia o zakłóceniach na trasach
Gdy aplikacja wyświetla trasę, w podsumowaniu trasy lub podczas aktywnej nawigacji, wszelkie bieżące utrudnienia pojawiają się w postaci etykiet wzdłuż trasy. Wywołania zawierają ikonę wskazującą rodzaj zakłócenia.

Wyświetlanie wywołań dotyczących zakłóceń na trasach możesz kontrolować za pomocą ustawienia shouldDisplayPrompts
, które wpływa też na wyświetlanie automatycznych alertów, gdy użytkownik zbliża się do zakłócenia.
mapView.navigator.shouldDisplayPrompts = true
Wyświetlanie szczegółów zakłóceń, gdy użytkownik kliknie wywołanie
Użytkownicy mogą kliknąć wywołanie, aby wyświetlić kartę informacyjną z dodatkowymi informacjami o zakłóceniu, w tym jego typem, czasem ostatniego zgłoszenia, a w niektórych przypadkach opcją głosowania, czy zakłócenie nadal występuje. Mogą się pojawiać 2 rodzaje kart informacyjnych w zależności od tego, czy użytkownik korzysta z aktywnej nawigacji. Opcje konfiguracji różnią się w zależności od typu.
Karty informacyjne w przeglądach tras przed rozpoczęciem aktywnej nawigacji
Gdy użytkownik kliknie wywołanie w podsumowaniu trasy przed rozpoczęciem aktywnej nawigacji, pojawi się karta informacyjna z dodatkowymi informacjami o utrudnieniach.

Za pomocą parametru showsIncidentCards
możesz kontrolować, czy użytkownicy mogą klikać wywołania dotyczące zakłóceń na przeglądach tras, aby wyświetlać więcej informacji.
mapView.settings.showsIncidentCards = true
Karty informacyjne podczas aktywnej nawigacji
Gdy podczas aktywnej nawigacji wzdłuż trasy pojawi się wywołanie dotyczące utrudnień, użytkownicy mogą kliknąć to wywołanie, aby wyświetlić kartę informacyjną z dodatkowymi informacjami o utrudnieniach, w tym o ich rodzaju i czasie ostatniego zgłoszenia, a także przyciski do głosowania, czy utrudnienia nadal występują. Głosy przesłane przez użytkowników są przetwarzane przez Google i mogą być wyświetlane na mapie innym użytkownikom Map Google i pakietu SDK Navigation, a także służyć do określania, czy nadal wyświetlać informacje o utrudnieniach.

Wyświetlanie i kliknięcia powiadomień o utrudnieniach podczas aktywnej nawigacji możesz kontrolować za pomocą ustawienia shouldDisplayPrompts
, które wpływa też na wyświetlanie powiadomień na trasach i wyświetlanie automatycznych alertów, gdy użytkownik zbliża się do utrudnienia.
mapView.navigator.shouldDisplayPrompts = true
Automatyczne alerty o utrudnieniach z możliwością głosowania podczas aktywnej nawigacji
Podczas aktywnej nawigacji, gdy użytkownik zbliża się do utrudnienia na trasie, wyświetla się komunikat z informacjami o utrudnieniu i przyciskami do głosowania, czy utrudnienie nadal występuje. Głosy przesłane przez użytkowników są przetwarzane przez Google i mogą być wyświetlane na mapie innym użytkownikom Map Google i pakietu SDK Nawigacji, a także wykorzystywane do określania, czy nadal wyświetlać informacje o utrudnieniach.

Wyświetlanie alertów podczas aktywnej nawigacji możesz skonfigurować za pomocą ustawienia shouldDisplayPrompts
, które kontroluje też wyświetlanie wskazówek na trasach.
mapView.navigator.shouldDisplayPrompts = true
Zgłaszanie utrudnień podczas aktywnej nawigacji
W trybie aktywnej nawigacji w interfejsie nawigacji pojawia się przycisk, który umożliwia użytkownikom zgłaszanie nowych utrudnień na trasie. Gdy użytkownik naciśnie ten przycisk, pojawi się menu z dostępnymi typami zakłóceń, które można zgłosić. Zgłoszenia przesyłane przez użytkowników są przetwarzane przez Google i mogą być wyświetlane na mapie innym użytkownikom Map Google i pakietu SDK do nawigacji.


Wyświetlanie i ukrywanie przycisku raportowania standardowego
Widoczność standardowego przycisku raportowania podczas aktywnej nawigacji możesz skonfigurować za pomocą parametru
navigationReportIncidentButtonEnabled
.
// Enables the incident reporting FAB to show in situations where incident // reporting is possible. mapView.settings.navigationReportIncidentButtonEnabled = true
Dodawanie niestandardowego przycisku raportowania
Zamiast standardowego przycisku zgłaszania przerw w działaniu możesz dodać do interfejsu nawigacyjnego przycisk niestandardowy. Gdy użytkownik kliknie przycisk niestandardowy, możesz wywołać wyświetlenie menu raportowania, wywołując metodę presentReportIncidentsPanel
. Przed dodaniem niestandardowego przycisku zgłaszania sprawdź, czy aplikacja jest aktywna i czy użytkownik znajduje się w kraju, w którym zgłaszanie jest włączone. W tym celu wywołaj funkcję reportIncidentsAvailable
. Jeśli którykolwiek z tych warunków nie zostanie spełniony, menu zgłaszania się nie pojawi.
// 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. } }
Praca z niestandardowymi interfejsami nawigacji
Jeśli Twoja implementacja pakietu Navigation SDK zawiera niestandardowe elementy interfejsu, musisz uwzględnić elementy zakłóceń w czasie rzeczywistym, aby uniknąć konfliktów.
Położenie przycisku zgłaszania
Domyślnie przycisk zgłaszania zakłóceń znajduje się w dolnym rogu mapy – po prawej stronie w przypadku języków pisanych od lewej do prawej i po lewej stronie w przypadku języków pisanych od prawej do lewej. Jeśli musisz przenieść przycisk raportowania, aby zrobić miejsce na niestandardowe elementy interfejsu, użyjbottomTrailingButtonsLayoutGuide
.
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 (eksperymentalny)
Interfejs Prompt Visibility API pomaga uniknąć konfliktów między elementami interfejsu wygenerowanymi przez Navigation SDK a własnymi elementami interfejsu niestandardowego. W tym celu dodaje on odbiornik, który otrzymuje wywołanie zwrotne, zanim pojawi się element interfejsu Navigation SDK, i gdy tylko zostanie on usunięty. Możesz otrzymywać wywołania zwrotne dotyczące elementów zakłóceń w czasie rzeczywistym, w tym kart informacyjnych, promptów i menu zgłaszania zakłóceń, a także innych powiadomień generowanych przez 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. } ...