Plattform auswählen: Android iOS

Echtzeit-Verkehrsbehinderungen konfigurieren

Echtzeit-Verkehrsbehinderungen sind eine Sammlung von Funktionen, mit denen Nutzer über Verkehrsbehinderungen auf ihrer Route informiert werden. Außerdem können sie Verkehrsbehinderungen melden und bestätigen, die sie selbst beobachten. Beispiele für Verkehrsbehinderungen sind Fahrzeugunfälle, Staus, Polizeipräsenz, Geschwindigkeitsmessungen, Baustellen, Fahrbahnsperrungen und bestimmte Wetterbedingungen. Auf dieser Seite werden die Funktionen für Echtzeit-Verkehrsbehinderungen und ihre Konfigurationsoptionen erläutert. Außerdem werden Überlegungen für Apps beschrieben, die benutzerdefinierte Navigations-UIs verwenden.

Funktionen für Echtzeit-Verkehrsbehinderungen

Das Navigation SDK enthält die folgenden Funktionen für Echtzeit-Verkehrsbehinderungen als Teil der Kernnavigation:

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 Verkehrsbehinderungen auf Routen

Wenn eine App eine Route anzeigt, entweder in einer Routenübersicht oder während der aktiven Navigation, werden alle aktuellen Verkehrsbehinderungen als Hinweise auf der Route angezeigt. Wenn Sie den Verkehrslayer aktivieren, werden auch Verkehrsbehinderungen außerhalb der Route auf der Karte angezeigt. Hinweise enthalten ein Symbol, das den Typ der Verkehrsbehinderung angibt.

Hinweise entlang von Routen

Mit shouldDisplayPrompts können Sie die Anzeige von Hinweisen zu Verkehrsbehinderungen auf Routen steuern. Diese Option steuert auch die Anzeige automatischer Warnungen, wenn sich ein Nutzer einer Verkehrsbehinderung nähert.

mapView.navigator.shouldDisplayPrompts = true

Details zu Verkehrsbehinderungen anzeigen, wenn ein Nutzer auf einen Hinweis tippt

Wenn Sie auf einen Hinweis zu einer Verkehrsbehinderung tippen, wird eine Infokarte mit weiteren Details geöffnet. Dies gilt sowohl für Hinweise auf der Route als auch für Hinweise außerhalb der Route. Hinweise außerhalb der Route werden jedoch nur angezeigt, wenn der Verkehrslayer aktiviert ist. Auf der Karte werden der Typ der Verkehrsbehinderung, die Uhrzeit der letzten Meldung und manchmal eine Option angezeigt, mit der Sie abstimmen können, ob die Verkehrsbehinderung noch vorhanden ist. Der Typ der Infokarte und die Konfigurationsoptionen variieren je nachdem, ob sich der Nutzer in der aktiven Navigation befindet.

Infokarten für Hinweise in Routenübersichten, bevor die aktive Navigation gestartet wird

Vor dem Start der aktiven Navigation können Nutzer auf der Karte oder in der Routenübersicht auf einen Hinweis auf der Route oder außerhalb der Route tippen, um eine Infokarte zu öffnen. Für Hinweise außerhalb der Route muss der Verkehrslayer aktiviert sein. Die Infokarte enthält weitere Details zur Verkehrsbehinderung.

Übersichtskarte

Mit `showsIncidentCards` können Sie festlegen, ob Nutzer auf Hinweise zu Verkehrsbehinderungen in Routenübersichten tippen können, um weitere Informationen anzuzeigen showsIncidentCards.

mapView.settings.showsIncidentCards = true

Infokarten für Hinweise während der aktiven Navigation

Während der aktiven Navigation können Nutzer auf einen Hinweis zu einer Verkehrsbehinderung auf der Route oder außerhalb der Route tippen, um eine Infokarte zu öffnen. Auf der Karte werden der Typ der Verkehrsbehinderung und die Uhrzeit der letzten Meldung angezeigt. Außerdem gibt es Schaltflächen, mit denen Nutzer abstimmen können, ob die Verkehrsbehinderung noch vorhanden ist.

Die Abstimmung ist für Verkehrsbehinderungen auf der Route und außerhalb der Route im Umkreis von 5 km um den Nutzer verfügbar, mit Ausnahme von Straßensperrungen. Google verarbeitet diese Abstimmungen, um zu ermitteln, ob die Verkehrsbehinderung weiterhin angezeigt werden soll. Die Abstimmungen können auch auf der Karte für andere Google Maps- und Navigation SDK-Nutzer angezeigt werden.

Infokarte für aktive Navigation

Mit shouldDisplayPrompts können Sie die Anzeige und Tippbarkeit von Hinweisen zu Verkehrsbehinderungen während der aktiven Navigation steuern. Diese Option steuert auch die Anzeige von Hinweisen auf Routen und die Anzeige automatischer Warnungen, wenn sich ein Nutzer einer Verkehrsbehinderung nähert.

mapView.navigator.shouldDisplayPrompts = true

Automatische Warnungen zu Verkehrsbehinderungen mit Abstimmung während der aktiven Navigation

Wenn sich ein Nutzer während der aktiven Navigation einer Verkehrsbehinderung auf einer Route nähert, wird eine Aufforderung mit Informationen zur Verkehrsbehinderung und Schaltflächen angezeigt, mit denen er abstimmen kann, ob die Verkehrsbehinderung 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 ermittelt, ob die Verkehrsbehinderung weiterhin angezeigt werden soll.

Infokarte für aktive Navigation

Mit shouldDisplayPrompts können Sie die Anzeige von Warnungen während der aktiven Navigation konfigurieren. Diese Option steuert auch die Anzeige von Hinweisen auf Routen.

mapView.navigator.shouldDisplayPrompts = true

Meldung von Verkehrsbehinderungen während der aktiven Navigation

Im aktiven Navigationsmodus wird auf der Navigations-UI eine Schaltfläche angezeigt, mit der Nutzer neue Verkehrsbehinderungen auf ihrer Route melden können. Wenn ein Nutzer auf die Schaltfläche tippt, wird ein Menü mit den verfügbaren Arten von Verkehrsbehinderungen 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.

Schaltfläche „Berichte“ Menü „Berichte“

Standardmäßige Schaltfläche „Melden“ ein- oder ausblenden

Mit navigationReportIncidentButtonEnabled können Sie die Sichtbarkeit der standardmäßigen Schaltfläche „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 „Melden“ hinzufügen

Anstelle der standardmäßigen Schaltfläche zum Melden von Verkehrsbehinderungen 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-Verkehrsbehinderungen berücksichtigen, um Konflikte zu vermeiden.

Positionierung der Schaltfläche „Melden“

Standardmäßig befindet sich die Schaltfläche zum Melden von Verkehrsbehinderungen 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 eine bottomTrailingButtonsLayoutGuide.

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 (Testversion)

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-Verkehrsbehinderungen erhalten, einschließlich Infokarten, Aufforderungen und dem Menü zum Melden von Verkehrsbehinderungen, 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.
}
...