Routenführung

In dieser Anleitung erfahren Sie, wie Sie mit dem Navigation SDK for iOS eine Route zu einem einzelnen Ziel in Ihrer App planen.

Übersicht

  1. Binden Sie das Navigation SDK in Ihre App ein, wie im Abschnitt Projekt einrichten beschrieben.
  2. Konfigurieren Sie ein GMSMapView.
  3. Fordern Sie den Nutzer auf, die Nutzungsbedingungen zu akzeptieren und die Standortdienste und Hintergrundbenachrichtigungen zu autorisieren.
  4. Erstellen Sie ein Array mit einem oder mehreren Zielen.
  5. Definieren Sie ein GMSNavigator um die detaillierte Routenführung zu steuern.

Code

Nutzer um die erforderlichen Autorisierungen bitten

Bevor der Nutzer das Navigation SDK verwenden kann, muss er den Nutzungsbedingungen zustimmen und die Verwendung von Standortdiensten autorisieren, die für die Navigation erforderlich sind. Wenn Ihre App im Hintergrund ausgeführt wird, muss der Nutzer auch die Benachrichtigungen für Routenführungswarnungen autorisieren. In diesem Abschnitt wird gezeigt, wie Sie die erforderlichen Autorisierungsaufforderungen anzeigen.

Standortdienste autorisieren

Das Navigation SDK verwendet Standortdienste, für die eine Nutzerautorisierung erforderlich ist. So aktivieren Sie die Standortdienste und zeigen das Autorisierungsdialogfeld an:

  1. Fügen Sie Info.plist die Schlüssel NSLocationWhenInUseUsageDescription und NSLocationAlwaysAndWhenInUseUsage hinzu.
  2. Fügen Sie als Wert eine kurze Erklärung hinzu, warum Ihre App Standortdienste benötigt. Beispiel: „Diese App benötigt die Berechtigung, Standortdienste für die detaillierte Routenführung zu verwenden.“

  3. Rufen Sie die requestAlwaysAuthorization() Methode der Standortmanagerinstanz auf, um das Autorisierungsdialogfeld anzuzeigen.

Swift

self.locationManager.requestAlwaysAuthorization()

Objective-C

[_locationManager requestAlwaysAuthorization];

Vollständige Apple-Dokumentation zur Autorisierung von Standortdiensten.

Benachrichtigungen für die Routenführung im Hintergrund autorisieren

Das Navigation SDK benötigt die Nutzerberechtigung, um Benachrichtigungen zu senden, wenn die App im Hintergrund ausgeführt wird. Fügen Sie den folgenden Code hinzu, um den Nutzer um die Berechtigung zum Anzeigen dieser Benachrichtigungen zu bitten:

Swift

UNUserNotificationCenter.current().requestAuthorization(options: [.alert]) {
  granted, error in
    // Handle denied authorization to display notifications.
    if !granted || error != nil {
      print("User rejected request to display notifications.")
    }
}

Objective-C

// Request authorization for alert notifications.
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
UNAuthorizationOptions options = UNAuthorizationOptionAlert;
[center requestAuthorizationWithOptions:options
                      completionHandler:
 ^(
   BOOL granted,
   NSError *_Nullable error) {
     if (!error && granted) {
       NSLog(@"iOS Notification Permission: newly Granted");
     } else {
       NSLog(@"iOS Notification Permission: Failed or Denied");
     }
   }];

Nutzungsbedingungen akzeptieren

Verwenden Sie den folgenden Code, um das Dialogfeld mit den Nutzungsbedingungen anzuzeigen und die Navigation zu aktivieren, wenn der Nutzer die Bedingungen akzeptiert. Dieses Beispiel enthält auch den Code für Standortdienste und Benachrichtigungen für Routenführungswarnungen (siehe oben).

Swift

  let termsAndConditionsOptions = GMSNavigationTermsAndConditionsOptions(companyName: "Ride Sharing Co.")

  GMSNavigationServices.showTermsAndConditionsDialogIfNeeded(
    with: termsAndConditionsOptions) { termsAccepted in
    if termsAccepted {
      // Enable navigation if the user accepts the terms.
      self.mapView.isNavigationEnabled = true
      self.mapView.settings.compassButton = true

      // Request authorization to use location services.
      self.locationManager.requestAlwaysAuthorization()

      // Request authorization for alert notifications which deliver guidance instructions
      // in the background.
    UNUserNotificationCenter.current().requestAuthorization(options: [.alert]) {
      granted, error in
        // Handle rejection of notification authorization.
        if !granted || error != nil {
          print("Authorization to deliver notifications was rejected.")
        }
      }
    } else {
      // Handle rejection of terms and conditions.
    }
  }

Objective-C

GMSNavigationTermsAndConditionsOptions *termsAndConditionsOptions = [[GMSNavigationTermsAndConditionsOptions alloc] initWithCompanyName:@"Ride Sharing Co."];

[GMSNavigationServices
  showTermsAndConditionsDialogIfNeededWithOptions:termsAndConditionsOptions
  callback:^(BOOL termsAccepted) {
   if (termsAccepted) {
     // Enable navigation if the user accepts the terms.
     _mapView.navigationEnabled = YES;
     _mapView.settings.compassButton = YES;

     // Request authorization to use the current device location.
     [_locationManager requestAlwaysAuthorization];

     // Request authorization for alert notifications which deliver guidance instructions
     // in the background.
     UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
     UNAuthorizationOptions options = UNAuthorizationOptionAlert;
     [center requestAuthorizationWithOptions:options
                           completionHandler:
     ^(
       BOOL granted,
       NSError *_Nullable error) {
         if (!error && granted) {
           NSLog(@"iOS Notification Permission: newly Granted");
         } else {
           NSLog(@"iOS Notification Permission: Failed or Denied");
         }
       }];
   } else {
     // Handle rejection of the terms and conditions.
   }
 }];

Route erstellen und Routenführung starten

Rufen Sie zum Planen einer Route die Methode setDestinations() des Navigators mit einem Array mit einem oder mehreren Zielen (GMSNavigationWaypoint) auf. Wenn die Route erfolgreich berechnet wurde, wird sie auf der Karte angezeigt. Setzen Sie isGuidanceActive im Callback auf true, um die Routenführung zu starten.

Im folgenden Beispiel wird gezeigt:

  • Eine neue Route mit einem Ziel erstellen.
  • Routenführung starten.
  • Benachrichtigungen für die Routenführung im Hintergrund aktivieren.
  • Fahrt auf der Route simulieren (optional).
  • Kameramodus auf „Folgen“ setzen (optional).

Swift

func startNav() {
  var destinations = [GMSNavigationWaypoint]()
  destinations.append(GMSNavigationWaypoint.init(placeID: "ChIJnUYTpNASkFQR_gSty5kyoUk",
                                                 title: "PCC Natural Market")!)

  mapView.navigator?.setDestinations(destinations) { routeStatus in
    self.mapView.navigator?.isGuidanceActive = true
    self.mapView.locationSimulator?.simulateLocationsAlongExistingRoute()
    self.mapView.cameraMode = .following
  }
}

Objective-C

- (void)startNav {
  NSArray<GMSNavigationWaypoint *> *destinations =
  @[[[GMSNavigationWaypoint alloc] initWithPlaceID:@"ChIJnUYTpNASkFQR_gSty5kyoUk"
                                             title:@"PCC Natural Market"],

  [_mapView.navigator setDestinations:destinations
                             callback:^(GMSRouteStatus routeStatus){
                               [_mapView.locationSimulator simulateLocationsAlongExistingRoute];
                               _mapView.navigator.guidanceActive = YES;
                               _mapView.cameraMode = GMSNavigationCameraModeFollowing;
                             }];
}

Weitere Informationen zu Orts-IDs finden Sie unter Orts-IDs.

Szenarien mit mehreren Zwischenstopps

Sie können maximal 25 Wegpunkte konfigurieren.

Die Methode setDestinations unterstützt keine Reisen mit mehreren Zwischenstopps. Verwenden Sie continueToNextDestinationWithCompletion() , um den Wegpunkt zum nächsten Teil der Reise zu verschieben.

Mobilitätsform?

Die Mobilitätsform bestimmt, welche Art von Route abgerufen wird und wie der Kurs des Nutzers ermittelt wird. Sie können eine von vier Mobilitätsformen für eine Route festlegen: Autofahren, Radfahren, Zu Fuß gehen und Taxi. Im Auto- und Taximodus basiert der Kurs des Nutzers auf der Fahrtrichtung. Im Rad- und Fußgängermodus wird der Kurs durch die Richtung dargestellt, in die das Gerät zeigt (im Querformat nach oben).

Legen Sie die travelMode Eigenschaft der Kartenansicht fest, wie im folgenden Beispiel gezeigt:

Swift

self.mapView.travelMode = .cycling

Objective-C

_mapView.travelMode = GMSNavigationTravelModeCycling;

Zu vermeidende Straßen festlegen

Verwenden Sie die BOOL-Eigenschaften avoidsHighways und avoidsTolls, um Autobahnen und/oder mautpflichtige Straßen auf einer Route zu vermeiden.

Swift

self.mapView.navigator?.avoidsTolls = true

Objective-C

_mapView.navigator.avoidsTolls = YES;

Orts-ID-Suche

Mit der Orts-ID-Suche können Sie Orts-IDs für Routenziele finden. Fügen Sie mit GMSNavigationWaypoint ein Ziel aus einem placeID hinzu.

Dynamische Textanpassung

Sie können dynamischen Text überall in Ihrer App hinzufügen, solange die Google-Attribution nicht verdeckt wird. Das Navigation SDK unterstützt nicht das Verankern des Texts an einem Breiten-/Längengrad auf der Karte oder an einem Label. Weitere Informationen finden Sie unter Infofenster.