Echtzeit-Verkehrsmeldungen konfigurieren
Echtzeit-Verkehrsmeldungen sind eine Sammlung von Funktionen, mit denen Nutzer über Störungen auf ihrer Route informiert werden. Außerdem können sie Störungen melden und bestätigen, die sie selbst beobachten. Beispiele für Störungen sind Fahrzeugunfälle, Staus, Polizeipräsenz, Geschwindigkeitsmessungen, Baustellen, Fahrbahnsperrungen und bestimmte Wetterbedingungen. Auf dieser Seite werden die Funktionen für Echtzeit-Verkehrsmeldungen und ihre Konfigurationsoptionen erläutert. Außerdem werden Aspekte für Apps behandelt, die benutzerdefinierte Navigations-UIs verwenden.
Funktionen für Echtzeit-Verkehrsmeldungen
Das Navigation SDK enthält die folgenden Funktionen für Echtzeit-Störungen als Teil der Kernnavigation:- Interaktive Hinweise zu Störungen auf Routen.
- Automatisierte Störungswarnungen mit Abstimmung während der aktiven Navigation.
- Störungen während der aktiven Navigation melden.
Diese Funktionen sind konfigurierbar und standardmäßig aktiviert. In den folgenden Abschnitten finden Sie weitere Informationen zu den Funktionen und den verfügbaren Konfigurationsoptionen.
Interaktive Hinweise zu Störungen auf Routen
Wenn eine App eine Route anzeigt, entweder in einer Routenübersicht oder während der aktiven Navigation, werden alle aktuellen Störungen als Hinweise auf der Route angezeigt. Die Hinweise enthalten ein Symbol, das den Typ der Störung angibt.
Sie können die Anzeige von Hinweisen zu Störungen auf Routen mit shouldDisplayPrompts steuern. Diese Option steuert auch die Anzeige automatisierter Warnungen, wenn sich ein Nutzer einer Störung nähert.
mapView.navigator.shouldDisplayPrompts = true
Details zu Störungen anzeigen, wenn ein Nutzer auf einen Hinweis tippt
Nutzer können auf einen Hinweis tippen, um eine Infokarte mit weiteren Informationen zur Störung aufzurufen, z. B. den Typ der Störung, den Zeitpunkt der letzten Meldung und in einigen Fällen eine Option, um abzustimmen, ob die Störung noch vorhanden ist. Je nachdem, ob sich der Nutzer in der aktiven Navigation befindet, werden zwei verschiedene Arten von Infokarten angezeigt. Die Konfigurations optionen variieren für jeden Typ.
Infokarten für Hinweise in Routenübersichten, bevor die aktive Navigation gestartet wird
Wenn ein Nutzer vor dem Start der aktiven Navigation auf einen Hinweis in einer Routenübersicht tippt, wird eine Infokarte mit weiteren Informationen zur Störung angezeigt.
Mit showsIncidentCards können Sie festlegen, ob Nutzer auf Hinweise zu Störungen in Routenübersichten tippen können, um weitere
Informationen aufzurufen.
mapView.settings.showsIncidentCards = true
Infokarten für Hinweise während der aktiven Navigation
Wenn während der aktiven Navigation ein Hinweis zu einer Störung auf einer Route angezeigt wird, können Nutzer darauf tippen, um eine Infokarte mit weiteren Informationen zur Störung aufzurufen, z. B. den Typ der Störung und den Zeitpunkt der letzten Meldung. Außerdem werden Schaltflächen angezeigt, mit denen sie abstimmen können, ob die Störung noch vorhanden ist. Von Nutzern eingereichte Abstimmungen werden von Google verarbeitet und können auf der Karte für andere Google Maps- und Navigation SDK-Nutzer angezeigt werden. Außerdem wird anhand der Abstimmungen entschieden, ob die Störung weiterhin angezeigt werden soll.
Mit
shouldDisplayPrompts können Sie die Anzeige und Tippbarkeit von Hinweisen zu Störungen während der aktiven Navigation steuern. Diese Option steuert auch die
Anzeige von Hinweisen auf Routen und die
Anzeige automatisierter Warnungen, wenn sich ein Nutzer einer Störung nähert.
mapView.navigator.shouldDisplayPrompts = true
Automatisierte Störungswarnungen mit Abstimmung während der aktiven Navigation
Wenn sich ein Nutzer während der aktiven Navigation einer Störung auf einer Route nähert, wird eine Meldung mit Informationen zur Störung und Schaltflächen angezeigt, mit denen er abstimmen kann, ob die Störung noch vorhanden ist. Von Nutzern eingereichte Abstimmungen werden von Google verarbeitet und können auf der Karte für andere Google Maps- und Navigation SDK-Nutzer angezeigt werden. Außerdem wird anhand der Abstimmungen entschieden, ob die Störung weiterhin angezeigt werden soll.
Mit
shouldDisplayPrompts können Sie die Anzeige von Warnmeldungen während der aktiven Navigation konfigurieren. Diese Option steuert auch die Anzeige
von Hinweisen auf Routen.
mapView.navigator.shouldDisplayPrompts = true
Störungen während der aktiven Navigation melden
Im aktiven Navigationsmodus wird auf der Navigations-UI eine Schaltfläche angezeigt, mit der Nutzer neue Störungen auf ihrer Route melden können. Wenn ein Nutzer auf die Schaltfläche tippt, wird ein Menü mit den verfügbaren Störungstypen angezeigt, die gemeldet werden können. Von Nutzern eingereichte Meldungen werden von Google verarbeitet und können auf der Karte für andere Google Maps- und Navigation SDK-Nutzer angezeigt werden.
Standardmäßige Schaltfläche zum Melden ein- oder ausblenden
Mit
navigationReportIncidentButtonEnabled können Sie die Sichtbarkeit der standardmäßigen Schaltfläche zum Melden während der aktiven Navigation konfigurieren.
// Enables the incident reporting FAB to show in situations where incident // reporting is possible. mapView.settings.navigationReportIncidentButtonEnabled = true
Benutzerdefinierte Schaltfläche zum Melden hinzufügen
Anstelle der standardmäßigen Schaltfläche zum Melden von Störungen können Sie der Navigations-UI eine benutzerdefinierte Schaltfläche zum Melden hinzufügen. Wenn der Nutzer auf die benutzerdefinierte Schaltfläche klickt, können Sie die Anzeige des Menüs zum Melden auslösen, indem Sie die presentReportIncidentsPanel
Methode aufrufen. Bevor Sie eine benutzerdefinierte Schaltfläche zum Melden hinzufügen, prüfen Sie mit reportIncidentsAvailable, ob sich die App in der aktiven Navigation befindet und der Nutzer sich in einem Land befindet, in dem das Melden aktiviert ist. Wenn eine dieser Bedingungen nicht erfüllt ist, wird das Menü zum Melden nicht angezeigt.
// 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. } }
Mit benutzerdefinierten Navigations-UIs arbeiten
Wenn Ihre Implementierung des Navigation SDK benutzerdefinierte UI-Elemente enthält, müssen Sie die Elemente für Echtzeit-Verkehrsmeldungen berücksichtigen, um Konflikte zu vermeiden.
Positionierung der Schaltfläche zum Melden
Standardmäßig befindet sich die Schaltfläche zum Melden von Störungen in der unteren Ecke der Karte, rechts für linksläufige Sprachen und links für rechtsläufige Sprachen. Wenn Sie die Schaltfläche zum Melden verschieben müssen, um Platz für benutzerdefinierte UI-Elemente zu schaffen, verwenden Sie einebottomTrailingButtonsLayoutGuide.
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 (experimentell)
Mit der Prompt Visibility API können Sie Konflikte zwischen UI-Elementen, die vom Navigation SDK generiert wurden, und Ihren eigenen benutzerdefinierten UI-Elementen vermeiden. Dazu wird ein Listener hinzugefügt, der einen Callback empfängt, bevor ein UI-Element des Navigation SDK angezeigt wird und sobald das Element entfernt wird. Sie können Callbacks für Elemente für Echtzeit-Verkehrsmeldungen erhalten, z. B. Infokarten, Meldungen und das Menü zum Melden von Störungen, sowie für andere Benachrichtigungen, die vom Navigation SDK generiert wurden.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. } ...