1. Hinweis
In diesem Codelab erfahren Sie, wie Sie eine einfache iOS-App erstellen, mit der Sie mit dem Google Maps Platform Navigation SDK zu einem vorkonfigurierten Ziel navigieren können.
So sieht Ihre App aus, wenn Sie fertig sind:

Voraussetzungen
- Grundkenntnisse der iOS-App-Entwicklung in Swift
- Grundkenntnisse der Google Maps SDK-Konzepte, z. B. zum Erstellen einer Karte, die auf einen bestimmten Ort zentriert ist.
Lerninhalte
- Eine einfache iOS-Swift-App erstellen, mit der Sie mit dem Navigation SDK zu einem Ziel navigieren können
- Das Navigation SDK aus dem Remote-CocoaPods-Repository einbinden
- Standortberechtigungen und Nutzungsvereinbarung mit den Endnutzerbedingungen des Navigation SDK verwalten
- Das SDK initialisieren
- Ein Ziel festlegen und die Navigationsanleitung starten
Voraussetzungen
- Die neueste stabile Version von Xcode
- Ein Google-Konto und ein Google Cloud-Projekt mit aktivierter Abrechnung
- Ein iOS-Gerät oder ein emuliertes Gerät, das im Xcode-Simulator ausgeführt wird Das Gerät muss die Mindestanforderungen für das Navigation SDK erfüllen.
2. Einrichten
Wenn Sie noch kein Google Cloud-Konto und kein Projekt mit aktivierter Abrechnung haben, richten Sie Ihr Google Cloud-Projekt gemäß der Anleitung Erste Schritte mit der Google Maps Platform ein.
Google Cloud-Projekt in der Console auswählen
Klicken Sie in der Cloud Console auf das Drop-down-Menü für das Projekt und wählen Sie das Projekt aus, das Sie für dieses Codelab verwenden möchten.

Navigation SDK in Ihrem Projekt aktivieren
Aktivieren Sie die für dieses Codelab erforderlichen APIs und SDKs der Google Maps Platform im Google Cloud Marketplace.
Rufen Sie in der Google Cloud Console APIs und Dienste > Bibliothek auf und suchen Sie nach „Navigation SDK“.
Es sollte ein Suchergebnis angezeigt werden.

Klicken Sie auf Navigation SDK , um die Seite mit den Produktdetails zu öffnen. Klicken Sie auf Aktivieren , um das SDK in Ihrem Projekt zu aktivieren.
Wiederholen Sie diesen Vorgang für das Google Maps SDK for iOS.
API-Schlüssel erstellen
Generieren Sie auf der Seite „Anmeldedaten“ der Cloud Console einen API-Schlüssel. Für alle Anfragen an die Google Maps Platform ist ein API-Schlüssel erforderlich. Rufen Sie dazu in der Console die Seite „Anmeldedaten“ auf. Klicken Sie oben auf der Seite auf „+ Anmeldedaten erstellen“ und wählen Sie in den Optionen „API-Schlüssel“ aus.
Für die Produktionsnutzung empfiehlt es sich, eine Anwendungsbeschränkung für Ihren API-Schlüssel festzulegen. Dies ist für dieses Codelab jedoch optional.
3. Beispielprojektdateien abrufen
In diesem Abschnitt wird beschrieben, wie Sie ein einfaches leeres Xcode-App-Projekt einrichten, indem Sie Dateien aus dem GitHub-Repository für dieses Codelab klonen. Das GitHub-Repository enthält Versionen des Codelab-Codes vor und nach der Bearbeitung. Das Codelab beginnt mit einer leeren Projektvorlage und wird bis zum fertigen Zustand aufgebaut. Wenn Sie nicht weiterkommen, können Sie das fertige Projekt im Repository als Referenz verwenden.
Repository klonen oder Code herunterladen
Wechseln Sie zu dem Verzeichnis, in dem Sie das Codelab speichern möchten.
Klonen Sie dann das Repository oder laden Sie den Code herunter:
git clone https://github.com/googlemaps-samples/codelab-navigation-101-ios-swift
Wenn Sie Git nicht installiert haben, klicken Sie auf diese Schaltfläche, um den Code abzurufen:
Damit Sie so schnell wie möglich loslegen können, enthält das Repository im Ordner Starter etwas Startcode, der Ihnen bei der Durchführung dieses Codelabs hilft. Außerdem gibt es ein fertiges Solution-Projekt, mit dem Sie jederzeit voranspringen oder Ihren Fortschritt überprüfen können. Wenn Sie das Lösungsprojekt verwenden möchten, folgen Sie der Anleitung unter „Mit CocoaPods installieren“ unten und führen Sie dann den Befehl „pod update“ im Ordner solution/Navigation SDK Codelab aus.
Nachdem Sie das Repository lokal geklont haben, öffnen Sie den Ordner Starter in Xcode als vorhandenes Projekt. Prüfen Sie, ob das Projekt erstellt und ausgeführt wird.
Gerät verbinden oder Xcode-Simulator einrichten
4. Das Navigation SDK in Ihre App einbinden
Es gibt drei Möglichkeiten, das Navigation SDK in ein Xcode-Projekt einzubinden. In diesem Codelab wird CocoaPods verwendet. Weitere Informationen zur Einbindung mit dem Swift Package Manager oder zur manuellen Installation durch Herunterladen des SDK finden Sie in der Navigation SDK-Dokumentation unter Xcode-Projekt erstellen und Navigation SDK installieren.
Mit CocoaPods installieren
Falls Sie das Tool „CocoaPods“ noch nicht nutzen, installieren Sie es unter macOS, indem Sie den folgenden Befehl über das Terminal ausführen. Weitere Informationen finden Sie im Startleitfaden zu CocoaPods (in englischer Sprache).
sudo gem install cocoapods
Erstellen Sie im Projektordner eine neue Datei mit dem Namen „Podfile“. Sie finden den Ordner unter „starter/Navigation SDK Codelab“ (in Xcode: „File“ > „New“ > „File“ > „Other“ > „Empty“, speichern Sie die Datei als „Podfile“).
Fügen Sie der Datei Podfile folgenden Inhalt hinzu:
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '15.0'
target 'Navigation SDK Codelab' do
pod 'GoogleNavigation', '9.1.1'
end
Speichern Sie Podfile.
Öffnen Sie ein Terminal und wechseln Sie zu dem Verzeichnis, in dem Sie die Datei „Podfile“ gespeichert haben. Das sollte der Ordner „starter/Navigation SDK Codelab“ im Codelab-Repository sein.
cd "<path-to-starter-project-folder>/Navigation SDK Codelab"
Führen Sie den Befehl pod install aus. Dadurch werden die in der Datei Podfile angegebenen APIs und alle zugehörigen Abhängigkeiten installiert.
pod install
Schließen Sie Xcode und öffnen Sie dann mit einem Doppelklick die Datei „.xcworkspace“ Ihres Projekts, um Xcode wieder zu starten. Ab jetzt müssen Sie das Projekt über die Datei „.xcworkspace“ aufrufen.
Prüfen Sie, ob der Projektstruktur ein Ordner „Pods“ hinzugefügt wurde und ob er die Pods „GoogleMaps“ und „GoogleNavigation“ enthält.

API-Schlüssel hinzufügen
Fügen Sie Ihren API-Schlüssel folgendermaßen in die Datei AppDelegate.swift ein:
- Fügen Sie die folgenden Importanweisungen hinzu:
import GoogleMaps
import GoogleNavigation
- Fügen Sie der Methode
application(_:didFinishLaunchingWithOptions:)Folgendes hinzu:
GMSServices.provideAPIKey("YOUR_API_KEY")
Ersetzen Sie "YOUR_API_KEY" durch den API-Schlüssel, den Sie im vorherigen Schritt erstellt haben.
Erstellen Sie Ihr Projekt und beheben Sie alle Fehler.
5. App-Berechtigungen konfigurieren
Das Navigation SDK verwendet GPS-Signale, um den Standort auf der Straße zu ermitteln und eine detaillierte Navigationsanleitung zu geben. Daher muss Ihre App den Nutzer bitten, den Zugriff auf genaue Standortdaten zu gewähren.
Dazu fügen Sie in Xcode einige Attribute zur Datei „Info.plist“ Ihrer App hinzu, fügen Ihrer App Code hinzu, um zur Laufzeit die Berechtigung vom Nutzer anzufordern, und behandeln alle Fehler, z. B. wenn die Berechtigung nicht erteilt wird oder der Standort nicht verfügbar ist.
Öffnen Sie in Xcode die Datei „Info.plist“. Die Anzeige sollte ungefähr so aussehen.

Berechtigung für genauen Standort anfordern
Sie können neue Werte hinzufügen, indem Sie den Mauszeiger auf die Zeile „Information Property List“ bewegen, bis ein Pluszeichen (+) angezeigt wird. Klicken Sie auf das Pluszeichen, um ein Dialogfeld mit vorgeschlagenen Attributnamen aufzurufen. Sie können aber auch Attribute manuell hinzufügen.
Fügen Sie der Datei „Info.plist“ die folgenden Attribute und Werte hinzu:
Attribut | Wert |
Privacy - Location Always And When In Use Usage Description | „Diese App benötigt den Standort Ihres Geräts, um eine detaillierte Navigationsanleitung zu geben.“ |
Privacy - Location When In Use Usage Description | „Diese App benötigt den Standort Ihres Geräts, um eine detaillierte Navigationsanleitung zu geben.“ |
allowsBackgroundLocationUpdates | JA |
Berechtigung zur Standortermittlung im Hintergrund anfordern
Fügen Sie der Datei „Info.plist“ die folgenden Attribute und Werte hinzu:
UIBackgroundModes > „Add Row“ > Item 0: App registers for location updates (wählen Sie diesen Wert aus der Drop-down-Liste der Vorschläge aus).
Wenn Sie fertig sind, sollte die Datei „Info.plist“ ungefähr so aussehen:

Standortzugriff zur Laufzeit anfordern
Fügen Sie der Datei ViewController.swift die folgenden Importanweisungen hinzu:
import GoogleNavigation
Fügen Sie der Klasse „ViewController“ die folgende Deklaration hinzu:
var locationManager: CLLocationManager!
Fügen Sie eine Methodenüberschreibung für loadView() hinzu und rufen Sie locationManager.requestAlwaysAuthorization() auf:
override func loadView() {
locationManager = CLLocationManager()
locationManager.requestAlwaysAuthorization()
Ihre App fordert jetzt den Standort vom Nutzer an und stellt ihn Ihrer App zur Verfügung, wenn der Nutzer die Berechtigung erteilt .
Berechtigung zum Anzeigen von Benachrichtigungen anfordern
Fügen Sie der Methode „loadView()“ den folgenden Code hinzu, um den Nutzer um die Berechtigung zum Anzeigen von Benachrichtigungen zu bitten. Diese ist erforderlich, um Navigationsanweisungen anzuzeigen.
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.")
}
}
Erstellen Sie die App und führen Sie sie aus. Sie sollten aufgefordert werden, den Standort freizugeben und Benachrichtigungen zu aktivieren.

6. Navigationsbenutzeroberfläche hinzufügen
In diesem Schritt fügen Sie eine Karte hinzu und konfigurieren sie so, dass ein Standort angezeigt wird. Anschließend wird dem Nutzer ein Dialogfeld mit den Nutzungsbedingungen des Navigation SDK angezeigt.
Kartenansicht zu Ihrer App hinzufügen
Fügen Sie diese Zeile hinzu, um eine GMSMapView-Variable in Ihrem ViewController zu deklarieren.
var mapView: GMSMapView!
Fügen Sie der Methode loadView() in der Datei Viewcontroller.swift den folgenden Code hinzu, um die Karte zu initialisieren:
let camera = GMSCameraPosition.camera(withLatitude: 51.483174, longitude: -0.177369, zoom: 14)
let options = GMSMapViewOptions()
options.camera = camera
options.frame = .zero
mapView = GMSMapView(options: options)
view = mapView
Erstellen Sie Ihre App und führen Sie sie aus. Es sollte eine Karte angezeigt werden, die auf Südwestlondon zentriert ist.

Dialogfeld mit den Nutzungsbedingungen des Navigation SDK anzeigen
Fügen Sie der Datei ViewController.swift in derselben Methode loadView() wie den vorherigen Code den folgenden Code hinzu. Dadurch werden die Endnutzerbedingungen des Navigation SDK angezeigt. Wenn sie nicht akzeptiert werden, wird die Navigation nicht aktiviert.
// Show the terms and conditions.
let companyName = "Navigation SDK Codelab"
GMSNavigationServices.showTermsAndConditionsDialogIfNeeded(withCompanyName: companyName) { termsAccepted in
if termsAccepted {
// Enable navigation if the user accepts the terms.
self.mapView.isNavigationEnabled = true
// Request authorization for alert notifications which deliver guidance instructions
// in the background.
} else {
// Handle the case when the user rejects the terms and conditions.
}
}
Erstellen Sie die App und führen Sie sie aus, um das Dialogfeld zu sehen.

7. Listener für wichtige Navigationsereignisse hinzufügen
In diesem Schritt erfahren Sie, wie Sie Listener für wichtige Ereignisse einrichten, z. B. die Ankunft am Ziel oder die Umleitung des Fahrers.
Damit auf diese Ereignisse gewartet werden kann, muss Ihr View-Controller das Protokoll GMSNavigatorListener übernehmen.
Fügen Sie dieses Protokoll der Klassendefinition in ViewController.swift hinzu.
class ViewController: UIViewController,
GMSNavigatorListener {
Fügen Sie nun in loadView(): eine Codezeile hinzu, um den Listener einzurichten:
// Add a listener for GMSNavigator.
mapView.navigator?.add(self)
Fügen Sie Ihrer Klasse schließlich zwei Methoden hinzu, um die ausgelösten Ereignisse zu verarbeiten.
// Listener to handle arrival events.
func navigator(_ navigator: GMSNavigator, didArriveAt waypoint: GMSNavigationWaypoint) {
print("You have arrived at: \(waypoint.title)")
}
// Listener for route change events.
func navigatorDidChangeRoute(_ navigator: GMSNavigator) {
print("The route has changed.")
}
8. Ziel festlegen und Navigationsanleitung starten
In diesem Abschnitt erfahren Sie, wie Sie ein Ziel festlegen und die Navigationsanleitung starten.
Neue Funktion für die Navigationslogik erstellen
Fügen Sie zuerst Ihrem ViewController eine neue Funktion mit dem Namen startNav() hinzu. Diese Funktion enthält die Logik zum Festlegen eines Ziels und zum Starten der Navigation.
// Create a route and start guidance.
@objc func startNav() {
}
Erstellen Sie einen Waypoint für das Ziel.
Erstellen Sie als Nächstes ein Array von Zielen mit einem einzelnen Wegpunkt.
// Create a route and start guidance.
@objc func startNav() {
var destinations = [GMSNavigationWaypoint]()
destinations.append(
GMSNavigationWaypoint.init(
placeID: "ChIJH-tBOc4EdkgRJ8aJ8P1CUxo",
title: "Trafalgar Square")!)
}
setDestinations()aufrufen und die Antwort verarbeiten.
Rufen Sie als Nächstes setDestinations auf und verarbeiten Sie den zurückgegebenen GMSRouteStatus.
Wenn der GMSRouteStatus „OK“ ist, starten Sie die Navigationsanleitung, indem Sie isGuidanceActive=true für das navigator-Objekt von mapView festlegen. Andernfalls geben Sie eine Anweisung aus, dass ein Fehler aufgetreten ist.
Wenn der zurückgegebene GMSRouteStatus-Wert „OK“ ist, starten Sie die Simulation der Fahrt entlang der Route, indem Sie mapView.locationSimulator.simulateLocationsAlongExistingRoute() aufrufen.
// Create a route and start guidance.
@objc func startNav() {
var destinations = [GMSNavigationWaypoint]()
destinations.append(
GMSNavigationWaypoint.init(
placeID: "ChIJH-tBOc4EdkgRJ8aJ8P1CUxo",
title: "Trafalgar Square")!)
mapView.navigator?.setDestinations(
destinations
) { routeStatus in
guard routeStatus == .OK else {
print("Handle route statuses that are not OK.")
return
}
//If routeStatus is OK, start guidance.
self.mapView.navigator?.isGuidanceActive = true
//start simulating driving along the route. self.mapView.locationSimulator?.simulateLocationsAlongExistingRoute()
self.mapView.cameraMode = .following
}
}
Häufige Fehlerstatus verarbeiten
Es ist sinnvoll, die GMSRouteStatus-Fehler genauer zu behandeln, insbesondere wenn Sie anfängliche Probleme mit Ihrer neuen App beheben. So können beispielsweise aufgrund Ihrer Debug-Einrichtung anfangs häufiger Fehler bei der Standortberechtigung, beim API-Schlüssel oder bei der Routenfindung auftreten. Daher kann es nützlich sein, diese Fehlerstatus zu verarbeiten.
Fügen Sie Code hinzu, der diese spezifischen Fälle verarbeitet und eine Anweisung in der Console ausgibt.
mapView.navigator?.setDestinations(
destinations
) { routeStatus in
guard routeStatus == .OK else {
print("Handle route statuses that are not OK.")
switch routeStatus {
case .locationUnavailable:
print("Location unavailable.") //check permissions
case .noRouteFound:
print("No route found.") //check start location and destination
case .waypointError:
print("Waypoint error") //check Place ID
default:
print("Not sure what happened")
}
return
}
Schaltfläche zum Starten der Navigationsanleitung hinzufügen
Fügen Sie der Benutzeroberfläche schließlich eine Schaltfläche hinzu und verknüpfen Sie sie mit der Methode „startNav“. Erstellen Sie eine Methode mit dem Namen makeButton() und dem folgenden Code: Rufen Sie die Funktion makeButton() über loadView() auf.
// Add a button to the view.
func makeButton() {
// A button to start navigation.
let navButton = UIButton(frame: CGRect(x: 5, y: 150, width: 200, height: 35))
navButton.backgroundColor = .blue
navButton.alpha = 0.5
navButton.setTitle("Start navigation", for: .normal)
navButton.addTarget(self, action: #selector(startNav), for: .touchUpInside)
self.mapView.addSubview(navButton)
}
Erstellen Sie Ihre App und führen Sie sie aus.
Hinweis: Wenn Sie den Code in
startNav()
ausführen,
setDestinations()
wird die Methode Weitere Informationen finden Sie unter Nutzung und Abrechnung.
9. Glückwunsch!
Sie haben Ihr Ziel erreicht!

Sie haben eine einfache App erstellt, die mit dem Google Maps Platform Navigation SDK eine detaillierte Navigationsanleitung zu einem Ziel gibt.
Sie haben App-Berechtigungen und das Dialogfeld mit den Endnutzerbedingungen des Navigation SDK konfiguriert und ein Ziel mit einer Orts-ID angegeben. Sie haben verschiedene Erfolgs- und Fehlerstatus in Ihrer App verarbeitet.
10. Weitere Schritte
Wenn Sie Ihre App-Entwicklung weiter vorantreiben möchten, sehen Sie sich die folgenden Themen an.
- Weitere Navigationsereignisse abhören. Code hinzufügen, um eine Nachricht anzuzeigen, wenn die verbleibende Zeit oder Entfernung einen bestimmten Wert überschreitet
- Navigationsbenutzeroberfläche anpassen.
- Wenn Sie eine größere Herausforderung suchen, versuchen Sie, eine Ortsauswahl der Places API hinzuzufügen, damit der Nutzer das Ziel festlegen kann. Hinweis: Die Demo-Apps des Navigation SDK enthalten eine Beispielimplementierung. Führen Sie in Ihrem Projektordner
pod try GoogleNavigationaus, um den Code zu sehen.