In dieser Anleitung erfahren Sie, wie Sie mit dem Navigation SDK for iOS eine Route zu einem einzelnen Ziel in Ihrer App 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 die Standortdienste und Hintergrundbenachrichtigungen zu autorisieren.
- Erstellen Sie ein Array mit einem oder mehreren Zielen.
Definieren Sie ein
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:
- Fügen Sie
Info.plistdie SchlüsselNSLocationWhenInUseUsageDescriptionundNSLocationAlwaysAndWhenInUseUsagehinzu. 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.“
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.