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 powiadomień 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ę jako etykiety wzdłuż trasy. Wywołania zawierają ikonę wskazującą typ 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ę pojawić 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 utrudnień 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 z informacją o utrudnieniach, 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. Mogą też być wykorzystywane do określania, czy nadal wyświetlać utrudnienia.

Wyświetlanie i kliknięcie wywołań dotyczących zakłóceń podczas aktywnej nawigacji możesz kontrolować za pomocą ustawienia shouldDisplayPrompts
, które wpływa też na wyświetlanie wywołań na trasach i wyświetlanie automatycznych alertów, gdy użytkownik zbliża się do zakłócenia.
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 umożliwiającymi głosowanie, 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 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. } ...