In dieser Anleitung erfahren Sie, wie Sie mit dem Navigation SDK for iOS eine Route innerhalb Ihrer App zu einem einzelnen Ziel planen.
Übersicht
- Binden Sie das Navigation SDK in Ihre App ein, wie im Abschnitt Projekt einrichten beschrieben.
- Konfigurieren Sie ein
GMSMapView. - Fordern Sie den Nutzer auf, die Nutzungsbedingungen zu akzeptieren und Standortdienste und Hintergrundbenachrichtigungen zu autorisieren.
- Erstellen Sie ein Array mit einem oder mehreren Zielen.
Definieren Sie einen
GMSNavigatorum die detaillierte Routenführung zu steuern.- Fügen Sie Ziele mit
setDestinationshinzu. - Setzen Sie
isGuidanceActiveauftrue, um die Navigation zu starten. - Verwenden Sie
simulateLocationsAlongExistingRouteum den Fortschritt des Fahrzeugs auf der Route zu simulieren. Dies ist nützlich für Tests, Fehlerbehebung und Vorführungen Ihrer App.
- Fügen Sie Ziele mit
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:
Aktivieren Sie die Standort- und Hintergrundfunktionen in Xcode:
- Öffnen Sie Ihr Ziel in Xcode und wählen Sie den Tab Signing &Capabilities (Signierung und Funktionen) aus. Weitere Informationen finden Sie in der Anleitung von Apple zum Hinzufügen von Funktionen zu Ihrer App.
- Fügen Sie die Funktionen Location (Always) (Standort (Immer)) und Location (When In Use) (Standort (Bei Verwendung)) hinzu. Fügen Sie in das Textfeld für jede Funktion eine kurze Erklärung hinzu, warum Ihre App Standortdienste benötigt, z. B. „Diese App benötigt die Berechtigung zur Verwendung von Standortdiensten für die detaillierte Routenführung.“
- Fügen Sie die Funktion Background Modes (Hintergrundmodi) hinzu und wählen Sie dann das Kästchen Location updates (Standortaktualisierungen) aus. Ohne diese Funktion stürzt die App beim Starten der Navigation ab. Weitere Informationen finden Sie in der Anleitung von Apple zum Verarbeiten von Standortaktualisierungen im Hintergrund.
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");
}
}];
Bewegungssensoren autorisieren
In einer zukünftigen Hauptversion kombiniert das Navigation SDK for iOS Daten zum Kernstandort mit Bewegungssensoren des Geräts (CMAltimeter), um die Höhe der Route zu berechnen. Wenn das SDK auf den Höhenmesser zugreift, fordert iOS den Nutzer automatisch mit diesem String um die Berechtigung auf.
Das Hinzufügen dieses Schlüssels hat derzeit keine Auswirkungen auf das Verhalten, verhindert aber Abstürze bei der Initialisierung, wenn Sie das SDK später aktualisieren.
So bereiten Sie sich auf zukünftige Upgrades des SDK vor:
Öffnen Sie Ihr Ziel in Xcode und rufen Sie den Tab Info auf oder öffnen Sie die Datei
Info.plist.Fügen Sie einen neuen Schlüssel hinzu: Privacy - Motion Usage Description (
NSMotionUsageDescription).Fügen Sie eine kurze Erklärung für den Nutzer hinzu. Beispiel: „Diese App benötigt Zugriff auf Bewegungssensoren, um die Höhe zu berechnen und die Genauigkeit der Routenführung zu verbessern.“
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 die Methode setDestinations des Navigators mit einem Array aus
einem oder mehreren
GMSNavigationWaypoint
Zielen auf, um eine Route zu planen. 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 Abschnitt der Reise zu verschieben.
Mobilitätsform?
Die Mobilitätsform definiert sowohl den Typ der abzurufenden Route als auch die Art und Weise, wie der Kurs des Nutzers bestimmt wird. Sie können eine von vier Mobilitätsformen für eine Route festlegen: Auto, Fahrrad, zu Fuß und Taxi. Im Auto- und Taximodus basiert der Kurs des Nutzers auf der Fahrtrichtung. Im Fahrrad- 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, Mautstraßen oder beides auf einer Route zu vermeiden.
Swift
self.mapView.navigator?.avoidsTolls = true
Objective-C
_mapView.navigator.avoidsTolls = YES;
Lautstärke der Sprachführung festlegen
Legen Sie die Eigenschaft volumeLevel des Navigators auf „low“, „normal“ oder „high“ fest, um die Lautstärke der Sprachführung anzupassen. Der Navigator verwendet die zuletzt gespeicherte Lautstärke oder standardmäßig „normal“.
Swift
self.mapView.navigator?.volumeLevel = .low
Objective-C
_mapView.navigator.volumeLevel = GMSNavigationVolumeLevelLow;
Orts-ID-Suche
Mit der Orts-ID-Suche
können Sie Orts-IDs für Routenziele finden. Fügen Sie ein Ziel aus einem
placeID mit GMSNavigationWaypoint 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 bestimmten Koordinaten (Breitengrad, Längengrad) auf der Karte oder an einem Label. Weitere Informationen finden Sie unter Infofenster.