Mit dem Navigation SDK der Google Maps Platform eine einfache iOS-Navigations-App in Swift erstellen
Informationen zu diesem Codelab
1. Vorbereitung
In diesem Codelab erfahren Sie, wie Sie eine einfache iOS-App erstellen, die mit dem Navigation SDK der Google Maps Platform zu einem vorkonfigurierten Ziel führt.
So sollte Ihre App dann aussehen.
Voraussetzungen
- Kenntnisse der grundlegenden iOS-App-Entwicklung in Swift.
- Grundlegende Kenntnisse der grundlegenden Konzepte des Google Maps SDK, z. B. das Erstellen einer Karte, die auf einem bestimmten Ort zentriert ist.
Aufgaben in diesem Lab
- Anleitung zum Erstellen einer einfachen iOS Swift-App, die mithilfe des Navigation SDK zu einem Ziel navigiert
- So integrieren Sie das Navigation SDK aus dem Remote-Cocoapods-Repository.
- Verwaltung von Berechtigungen zur Standortermittlung und Nutzervereinbarung mit den Endnutzerbedingungen für das Navigation SDK
- So initialisieren Sie das SDK.
- So legen Sie ein Ziel fest und starten die Navigation.
Voraussetzungen
- Die neueste stabile Version von XCode.
- Ein Google-Konto und ein Projekt mit aktivierter Abrechnung.
- Ein iOS-Gerät oder ein emuliertes Gerät, das im XCode-Simulator ausgeführt wird. Unabhängig von Ihrer Wahl muss das Gerät die Mindestanforderungen für das Navigation SDK erfüllen.
2. Einrichten
Wenn Sie noch kein Google Cloud Platform-Konto und kein Projekt mit aktivierter Abrechnung haben, richten Sie Ihr Google Cloud-Projekt ein. Folgen Sie dazu der Anleitung für die ersten Schritte mit der Google Maps Platform.
Wählen Sie in der Console ein Google Cloud-Projekt aus.
Klicken Sie in der Cloud Console auf das Drop-down-Menü für Projekte und wählen Sie das Projekt aus, das Sie für dieses Codelab verwenden möchten.
Aktivieren Sie das Navigation SDK in Ihrem Projekt.
Aktivieren Sie die für dieses Codelab erforderlichen APIs und SDKs der Google Maps Platform im Google Cloud Marketplace.
Gehen Sie in der Google Cloud Console zu APIs & Dienste > Bibliothek und suchen Sie nach „Navigation SDK“.
Sie sollten ein Suchergebnis sehen.
Klicken Sie auf Navigation SDK, um die Seite mit den Produktdetails zu öffnen. Klicken Sie auf Aktivieren, um das SDK für Ihr Projekt zu aktivieren.
Wiederholen Sie diesen Vorgang für das Google Maps SDK for iOS.
API-Schlüssel erstellen
Generieren Sie in der Cloud Console auf der Seite Anmeldedaten einen API-Schlüssel. Für alle Anfragen an die Google Maps Platform ist ein API-Schlüssel erforderlich. Auf der Seite „Anmeldedaten“ in der Console. Klicken Sie auf „+Anmeldedaten erstellen“. oben auf der Seite und wählen Sie „API-Schlüssel“ aus. aus.
Für den Einsatz in der Produktion empfiehlt es sich, eine Anwendungseinschränkung für Ihren API-Schlüssel festzulegen. Für dieses Codelab ist dies 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 Vorher- und Nachher-Versionen des Codelab-Codes. Das Codelab beginnt mit einer leeren Projektvorlage und baut sich bis zum Ende auf. Wenn Sie nicht weiterkommen, können Sie das fertige Projekt im Repository als Referenz verwenden.
Repository klonen oder Code herunterladen
Rufen Sie das Verzeichnis auf, 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 du git nicht installiert hast, klicke 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
einige Startcode, mit dem Sie dieses Codelab nachvollziehen können. Außerdem gibt es ein abgeschlossenes Solution
-Projekt, falls du weitermachen oder jederzeit deinen Fortschritt überprüfen möchtest. Wenn Sie das Lösungsprojekt verwenden möchten, folgen Sie der Anleitung unten unter „Mit CocoaPods installieren“ 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
mit XCode als vorhandenes Projekt. Prüfen Sie, ob das Projekt erstellt und ausgeführt wird.
Gerät verbinden oder XCode Simulator einrichten
4. Navigation SDK zu Ihrer App hinzufügen
Es gibt drei Möglichkeiten, das Navigation SDK in ein XCode-Projekt einzubinden. In diesem Codelab werden CocoaPods verwendet. Informationen zur Integration mit 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
Wenn Sie das Tool CocoaPods noch nicht haben, installieren Sie es unter macOS, indem Sie den folgenden Befehl über das Terminal ausführen. Weitere Informationen finden Sie im Startleitfaden für CocoaPods.
sudo gem install cocoapods
Erstellen Sie im Projektordner im Ordner „starter/Navigation SDK Codelab“ eine neue Datei mit dem Namen „Podfile“. Klicken Sie dazu in Xcode auf „File“ > „New“ > „File“ > „Other“ > „Empty“ und speichern Sie die Datei als „Podfile“.
Fügen Sie Ihrem Podfile
die folgenden Inhalte hinzu:
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '15.0'
target 'Navigation SDK Codelab' do
pod 'GoogleNavigation', '9.1.1'
end
Podfile
sparen.
Öffnen Sie ein Terminal und wechseln Sie in das Verzeichnis, in dem Sie die Podfile-Datei gespeichert haben. Dies 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 Podfile
angegebenen APIs und ggf. zugehörige Abhängigkeiten installiert.
pod install
Schließen Sie Xcode und öffnen Sie dann die .xcworkspace-Datei Ihres Projekts, um Xcode zu starten. Ab jetzt müssen Sie das Projekt mit der .xcworkspace-Datei öffnen.
Prüfen Sie, ob der Projektstruktur ein Pod-Verzeichnis hinzugefügt wurde und ob es „GoogleMaps“ enthält und „GoogleNavigation“ Pods
API-Schlüssel hinzufügen
Füge deinen API-Schlüssel folgendermaßen in 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 Navigations-SDK benötigt GPS-Signale, um den Standort anhand von Straßen zu ermitteln und detaillierte Wegbeschreibungen zu liefern. Ihre App muss den Nutzer daher um Zugriff auf genaue Standortdaten bitten.
Dazu fügen Sie der Info.plist Ihrer App in Xcode einige Eigenschaften hinzu, fügen Ihrer App Code hinzu, um bei der Laufzeit die Berechtigung vom Nutzer anzufordern, und behandeln Fehler wie die Nichterteilung der Berechtigung oder die Unverfügbarkeit des Standorts.
Öffnen Sie Info.plist in Xcode. Die Anzeige sollte ungefähr so aussehen.
Berechtigung zur genauen Standortermittlung anfordern
Sie können neue Werte hinzufügen, indem Sie den Mauszeiger über die "Liste der Informationseigenschaften" bewegen. bis Sie ein "+" angezeigt. Klicken Sie auf das „+“, , um ein Dialogfeld mit vorgeschlagenen Eigenschaftennamen aufzurufen. Sie können Attribute aber auch manuell hinzufügen.
Fügen Sie der Info.plist die folgenden Properties und Werte hinzu:
Attribut | Wert |
Datenschutz – Standortermittlung „Immer“ und „Bei Verwendung“ | „Diese App benötigt deinen Gerätestandort, um eine detaillierte Routenführung anbieten zu können.“ |
Datenschutz – Nutzung „Standort bei Nutzung“, Beschreibung | „Diese App benötigt den Standort Ihres Geräts, um eine detaillierte Routenführung bereitzustellen.“ |
allowsBackgroundLocationUpdates | JA |
Berechtigung zur Standortermittlung im Hintergrund anfordern
Fügen Sie der Info.plist die folgenden Properties und Werte hinzu:
UIBackgroundModes
> Zeile hinzufügen > Item 0: App registers for location updates
(wählen Sie diesen Wert aus der Drop-down-Liste der Vorschläge aus)
Die Datei Info.plist sollte in etwa so aussehen, wenn Sie fertig sind.
Zugriff auf Standort zur Laufzeit anfordern
Fügen Sie ViewController.swift
die folgenden Importanweisungen hinzu:
import GoogleNavigation
Fügen Sie der ViewController-Klasse 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 nun den Standort des Nutzers an und stellt ihn Ihrer App zur Verfügung, wenn er die Berechtigung erteilt.
Berechtigung zum Anzeigen von Benachrichtigungen anfordern
Fügen Sie den folgenden Code zu „loadView()“ hinzu, um vom Nutzer die Berechtigung zum Anzeigen von Benachrichtigungen anzufordern, die für die Anzeige von Anweisungen für Fahrmanöver erforderlich sind.
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. Prüfen Sie, ob Sie aufgefordert werden, Ihren 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. Dem Nutzer wird ein Dialogfeld mit den Nutzungsbedingungen des Navigation SDK angezeigt.
Kartenanzeige in Ihre App einbinden
Fügen Sie diese Zeile hinzu, um eine GMSMapView-Variable in Ihrem ViewController zu deklarieren.
var mapView: GMSMapView!
Fügen Sie den folgenden Code zu loadView()
in Viewcontroller.swift
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
Wenn Sie Ihre App erstellen und ausführen, sollte eine Karte mit dem Mittelpunkt des Südwestens von London angezeigt werden.
Dialogfeld mit den Nutzungsbedingungen des Navigations-SDK anzeigen
Fügen Sie ViewController.swift
den folgenden Code in derselben loadView()
-Methode wie den vorherigen Code hinzu. Daraufhin werden die Nutzungsbedingungen für Endnutzer des Navigation SDK angezeigt. Wenn sie nicht akzeptiert wird, 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 anzuzeigen.
7. Listener für wichtige Navigationsereignisse hinzufügen
In diesem Schritt erfahren Sie, wie Sie Listener für Schlüsselereignisse wie die Ankunft an einem Ziel oder die Neuberechnung der Route einrichten.
Damit Sie diese Ereignisse beobachten können, muss Ihr Ansichts-Controller das GMSNavigatorListener
-Protokoll verwenden.
Fügen Sie dieses Protokoll der Klassendefinition in ViewController.swift
hinzu.
class ViewController: UIViewController,
GMSNavigatorListener {
Fügen Sie nun eine Codezeile hinzu, um den Listener in loadView():
einzurichten.
// Add a listener for GMSNavigator.
mapView.navigator?.add(self)
Fügen Sie Ihrer Klasse abschließend 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 Navigation starten
In diesem Abschnitt erfahren Sie, wie Sie ein Ziel festlegen und die Navigation starten.
Erstellen Sie eine neue Funktion für die Navigationslogik.
Fügen Sie zuerst Ihrer ViewController
eine neue Funktion namens startNav()
hinzu. Diese enthält die Logik zum Festlegen eines Ziels und zum Starten der Navigation.
// Create a route and start guidance.
@objc func startNav() {
}
Erstellen Sie eine Waypoint
für das Ziel.
Erstellen Sie als Nächstes ein Array mit 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")!)
}
Rufe setDestinations()
auf und handel mit der Antwort.
Rufe als Nächstes setDestinations
auf und handel mit der zurückgegebenen GMSRouteStatus
.
Wenn GMSRouteStatus
„OK“ ist, starten Sie die Anleitung, indem Sie isGuidanceActive=true
für das navigator
-Objekt der mapView
festlegen. Andernfalls wird eine Meldung ausgegeben, 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 behandeln
Es ist nützlich, die GMSRouteStatus
-Fehler expliziter zu behandeln, insbesondere bei der Behebung erster Probleme mit Ihrer neuen App. Möglicherweise treten aufgrund Ihrer Debug-Einrichtung beispielsweise häufiger Fehler bei der Standortberechtigung, dem API-Schlüssel oder der Meldung „Kein Weg gefunden“ auf. Daher kann es hilfreich sein, diese Fehlerzustände zu behandeln.
Fügen Sie Code hinzu, der diese speziellen Fälle behandelt und eine Anweisung in der Konsole 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 Navigation hinzufügen
Fügen Sie abschließend der Benutzeroberfläche eine Schaltfläche hinzu und verbinden Sie sie mit der startNav-Methode. Erstellen Sie eine Methode namens makeButton()
mit 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()
ruft die Funktion
setDestinations()
Methode, bei der nach den ersten 1.000 verwendeten Zielen Gebühren anfallen. Weitere Informationen finden Sie unter Nutzung und Abrechnung.
9. Glückwunsch!
Gut gemacht – Sie sind am Ziel angekommen!
Sie haben mit dem Google Maps Platform Navigation SDK eine einfache App erstellt, die eine detaillierte Routenführung zu einem Ziel bietet.
Sie haben die App-Berechtigungen und das Dialogfeld mit den Nutzungsbedingungen für Endnutzer des Navigations-SDK konfiguriert und ein Ziel mit einer Orts-ID angegeben. Sie haben verschiedene Erfolgs- und Fehlerzustände in Ihrer App behandelt.
10. Weitere Schritte
Wenn Sie Ihre App-Entwicklung weiter vorantreiben möchten, werfen Sie einen Blick auf die folgenden Themen, um sich inspirieren zu lassen.
- Auf weitere Navigationsereignisse warten: Fügen Sie Code hinzu, um eine Meldung anzuzeigen, wenn die verbleibende Zeit oder Entfernung einen Grenzwert überschreitet.
- Navigationsoberfläche anpassen
- Wenn Sie sich einer größeren Herausforderung stellen möchten, versuchen Sie, eine Places API-Ortsauswahl hinzuzufügen, damit Nutzer das Ziel festlegen können. Hinweis: Die Navigation SDK-Demo-Apps enthalten eine Beispielimplementierung. Führen Sie
pod try GoogleNavigation
in Ihrem Projektordner aus, um den Code zu sehen.