Echtzeitunterbrechungen konfigurieren
Echtzeit-Störungen sind eine Sammlung von Funktionen, die Nutzer über Störungen auf ihrer Route informieren und es ihnen ermöglichen, Störungen zu melden und zu bestätigen. Beispiele für Störungen sind Verkehrsunfälle, Staus, Polizeikontrollen und Blitzer, Baustellen, Fahrbahnverengungen und bestimmte Wetterbedingungen. Auf dieser Seite werden die Funktionen für Echtzeitstörungen und ihre Konfigurationsoptionen beschrieben. Außerdem werden Aspekte für Apps mit benutzerdefinierten Navigations-UIs erläutert.
Funktionen für Echtzeitunterbrechungen
Das Navigation SDK umfasst die folgenden Echtzeit-Funktionen für Störungen als Teil der Kernnavigation:- Interaktive Hinweise zu Störungen entlang von Routen:
- Automatisierte Benachrichtigungen über Störungen mit Abstimmung während der aktiven Navigation:
- Meldung von Verkehrsbehinderungen während der aktiven Navigation:
Diese Funktionen sind konfigurierbar und standardmäßig aktiviert. In den folgenden Abschnitten finden Sie weitere Informationen zu den Funktionen und verfügbaren Konfigurationsoptionen.
Interaktive Hinweise zu Störungen entlang von Routen
Wenn in einer App eine Route angezeigt wird, entweder in einer Routenübersicht oder während der aktiven Navigation, werden alle aktuellen Störungen als Hinweisfelder entlang der Route angezeigt. Callouts enthalten ein Symbol, das den Typ der Störung angibt.

Mit shouldDisplayPrompts
können Sie die Anzeige von Hinweisen zu Störungen auf Routen steuern. Damit wird auch die Anzeige automatischer Benachrichtigungen gesteuert, 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 Störungstyp, den Zeitpunkt, zu dem die Störung zuletzt gemeldet wurde, und in einigen Fällen eine Option, um darüber abzustimmen, ob die Störung noch vorhanden ist. Es gibt zwei verschiedene Arten von Infokarten, die je nachdem, ob sich der Nutzer in der aktiven Navigation befindet, angezeigt werden. Die Konfigurationsoptionen variieren für jeden Typ.
Hinweiskarten in Routenübersichten, bevor die aktive Navigation gestartet wird
Wenn ein Nutzer vor dem Start der aktiven Navigation auf einen Hinweis in der Routenübersicht tippt, wird eine Infokarte mit weiteren Informationen zur Störung angezeigt.

Mit showsIncidentCards
können Sie festlegen, ob Nutzer auf Störungshinweise in Routenübersichten tippen können, um weitere Informationen aufzurufen.
mapView.settings.showsIncidentCards = true
Infokarten mit Hinweisen während der aktiven Navigation
Wenn während der aktiven Navigation ein Hinweis zu einer Verkehrsbehinderung auf einer Route angezeigt wird, können Nutzer darauf tippen, um eine Infokarte mit weiteren Informationen zur Verkehrsbehinderung aufzurufen. Dazu gehören der Typ der Verkehrsbehinderung und die Uhrzeit, zu der sie zuletzt gemeldet wurde. Außerdem werden Schaltflächen angezeigt, mit denen Nutzer abstimmen können, ob die Verkehrsbehinderung noch vorhanden ist. Von Nutzern eingereichte Meldungen werden von Google verarbeitet und können anderen Google Maps- und Navigation SDK-Nutzern auf der Karte angezeigt werden. Außerdem wird anhand dieser Meldungen 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. Damit wird auch die Anzeige von Hinweisen entlang von Routen und die Anzeige automatischer Benachrichtigungen gesteuert, wenn sich ein Nutzer einer Störung nähert.
mapView.navigator.shouldDisplayPrompts = true
Automatisierte Benachrichtigungen zu Störungen 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 Aufforderung mit Informationen zur Störung und Schaltflächen zum Abstimmen darüber angezeigt, ob die Störung noch vorhanden ist. Von Nutzern abgegebene Stimmen werden von Google verarbeitet und können auf der Karte für andere Nutzer des Google Maps und Navigation SDK angezeigt werden. Außerdem wird anhand dieser Stimmen entschieden, ob die Verkehrsbehinderung weiterhin angezeigt werden soll.

Sie können die Anzeige von Warnhinweisen während der aktiven Navigation mit shouldDisplayPrompts
konfigurieren. Damit wird auch die Anzeige von Hinweis-Callouts entlang von Routen gesteuert.
mapView.navigator.shouldDisplayPrompts = true
Meldung von Verkehrsbehinderungen während der aktiven Navigation
Während der aktive Navigationsmodus läuft, wird in der Navigationsbenutzeroberfläche eine Schaltfläche angezeigt, über die 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 Berichte werden von Google verarbeitet und können auf der Karte für andere Nutzer des Google Maps und Navigation SDK angezeigt werden.


Schaltfläche für Standardberichte ein- oder ausblenden
Sie können die Sichtbarkeit der Schaltfläche für Standardberichte während der aktiven Navigation mit navigationReportIncidentButtonEnabled
konfigurieren.
// Enables the incident reporting FAB to show in situations where incident // reporting is possible. mapView.settings.navigationReportIncidentButtonEnabled = true
Schaltfläche für benutzerdefinierte Berichte hinzufügen
Anstelle der standardmäßigen Schaltfläche für die Meldung von Störungen können Sie der Navigations-UI eine benutzerdefinierte Schaltfläche für die Meldung von Störungen hinzufügen. Wenn der Nutzer auf die benutzerdefinierte Schaltfläche klickt, können Sie die Anzeige des Berichtsmenüs auslösen, indem Sie die Methode presentReportIncidentsPanel
aufrufen. Bevor Sie eine benutzerdefinierte Schaltfläche zum Melden hinzufügen, prüfen Sie mit dem Aufruf von reportIncidentsAvailable
, ob die App in der aktiven Navigation verwendet wird und der Nutzer sich in einem Land befindet, in dem das Melden aktiviert ist. Wenn eine dieser Bedingungen nicht erfüllt ist, wird das Berichtsmenü 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 Echtzeit-Störungselemente berücksichtigen, um Konflikte zu vermeiden.
Positionierung der Schaltfläche für Berichte
Standardmäßig befindet sich die Schaltfläche zum Melden von Störungen unten auf der Karte – rechts bei linksläufigen Sprachen und links bei rechtsläufigen Sprachen. Wenn Sie die Schaltfläche für Berichte verschieben müssen, um Platz für benutzerdefinierte UI-Elemente zu schaffen, verwenden Sie einbottomTrailingButtonsLayoutGuide
.
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 werden, und Ihren eigenen benutzerdefinierten UI-Elementen vermeiden. Dazu fügen Sie einen Listener hinzu, um einen Callback zu erhalten, bevor ein UI-Element des Navigation SDK angezeigt wird und sobald das Element entfernt wird. Sie können Callbacks für Echtzeit-Störungselemente erhalten, darunter Infokarten, Aufforderungen und das Menü zum Melden von Störungen, sowie für andere Benachrichtigungen, die vom Navigation SDK generiert werden.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. } ...