Sie können das Driver SDK verwenden, um die App für die Fahrt und den Bestellfortschritt zu optimieren und die Navigation und Nachverfolgung zu verbessern. Das Driver SDK stellt der Fleet Engine der On-demand Rides and Deliveries-Lösung Updates zu Fahrzeugstandorten und Aufgaben bereit.
Das Driver SDK informiert die Fleet Engine-Dienste und Ihre benutzerdefinierten Dienste über den Standort und den Status des Fahrzeugs. Das Fahrzeug kann beispielsweise ONLINE
oder OFFLINE
sein und der Fahrzeugstandort ändert sich im Laufe der Fahrt.
Mindestsystemanforderungen
Voraussetzungen
In diesem Leitfaden wird davon ausgegangen, dass in Ihrer Anwendung bereits das Navigation SDK implementiert ist und das Fleet Engine-Back-End eingerichtet und verfügbar ist. Der Beispielcode enthält jedoch ein Beispiel für die Einrichtung des Navigation SDK.
Außerdem müssen Sie in Ihrem Google Cloud-Projekt das Maps SDK for iOS aktivieren und API-Schlüssel anfordern.
Projektkonfiguration
Swift-Paketmanager
Das Driver SDK kann über den Swift Package Manager installiert werden. Entfernen Sie vor dem Hinzufügen des SDK alle vorhandenen Driver SDK-Abhängigkeiten.
So fügen Sie das SDK einem neuen oder vorhandenen Projekt hinzu:
-
Öffnen Sie
project
oderworkspace
in Xcode und wählen Sie dann Datei > Paketabhängigkeiten hinzufügen aus. - Geben Sie https://github.com/googlemaps/ios-driver-sdk als URL ein, drücken Sie die Eingabetaste, um das Paket abzurufen, und klicken Sie auf „Paket hinzufügen“.
-
Wenn Sie eine bestimmte
version
installieren möchten, setzen Sie das Feld Abhängigkeitsregel auf eine der versionsbasierten Optionen. Bei neuen Projekten empfehlen wir, die neueste Version anzugeben und die Option „Exakte Version“ zu verwenden. Klicke anschließend auf „Paket hinzufügen“. -
Prüfen Sie im Fenster Paketprodukte auswählen, ob
GoogleRidesharingDriver
zum festgelegtenmain
-Ziel hinzugefügt wird. Klicke anschließend auf „Paket hinzufügen“. -
Um die Installation zu prüfen, gehen Sie zum Bereich
General
Ihres Ziels. Unter Frameworks, Bibliotheken und eingebettete Inhalte sollten die installierten Pakete angezeigt werden. Sie können auch im Abschnitt „Paketabhängigkeiten“ im „Project Navigator“ das Paket und seine Version prüfen.
So aktualisieren Sie die package
für ein vorhandenes Projekt:
- Gehen Sie in Xcode zu „File > Packages > Update To Recent Package Versions“ (Datei > Pakete> Auf neueste Paketversionen aktualisieren).
- Wenn Sie die Installation prüfen möchten, rufen Sie in der Projektnavigation den Bereich Paketabhängigkeiten auf. Dort sehen Sie das Paket und seine Version.
So entfernen Sie vorhandene Driver SDK-Abhängigkeiten, die mit CocoaPods
hinzugefügt wurden:
- Schließen Sie den Xcode-Arbeitsbereich. Öffnen Sie das Terminal und führen Sie den folgenden Befehl aus:
sudo gem install cocoapods-deintegrate cocoapods-clean pod deintegrate pod cache clean --all
-
Entferne
Podfile
,Podfile.resolved
und den Xcodeworkspace
, wenn du sie ausschließlich für CocoaPods verwendest.
So entfernen Sie das vorhandene Driver SDK, das manuell installiert wurde:
Suchen Sie in den Konfigurationseinstellungen Ihres Xcode-Projekts Frameworks, Bibliotheken und eingebettete Inhalte. Verwenden Sie das Minuszeichen
(-)
, um das folgende Framework zu entfernen:GoogleRidesharingDriver.xcframework
Entfernen Sie das Bundle
GoogleRidesharingDriver
aus dem Verzeichnis der obersten Ebene Ihres Xcode-Projekts.
CocoaPods
Um das Treiber SDK mit CocoaPods zu konfigurieren, benötigen Sie Folgendes:
- CocoaPods-Tool: Öffnen Sie zum Installieren dieses Tools das Terminal und führen Sie den folgenden Befehl aus.
sudo gem install cocoapods
Erstellen Sie eine Podfile-Datei für das Driver SDK und installieren Sie damit die API und die zugehörigen Abhängigkeiten: Erstellen Sie in Ihrem Projektverzeichnis eine Datei namens Podfile. In dieser Datei sind die Abhängigkeiten Ihres Projekts definiert. Bearbeiten Sie die Podfile-Datei und fügen Sie die Abhängigkeiten hinzu. Hier ist ein Beispiel, das die Abhängigkeiten enthält:
source "https://github.com/CocoaPods/Specs.git" target 'YOUR_APPLICATION_TARGET_NAME_HERE' do pod 'GoogleRidesharingDriver' end
Das folgende Beispiel enthält die Alpha- und Beta-Pods für das Driver SDK als Abhängigkeiten:
source "https://cpdc-eap.googlesource.com/ridesharing-driver-sdk.git" source "https://github.com/CocoaPods/Specs.git" target 'YOUR_APPLICATION_TARGET_NAME_HERE' do pod 'GoogleRidesharingDriver' end
Speichern Sie die Podfile-Datei. Öffnen Sie ein Terminal und rufen Sie das Verzeichnis auf, das die Podfile-Datei enthält:
cd <path-to-project>
Führen Sie den Befehl "pod install" aus. Dadurch werden die in der Podfile-Datei angegebenen APIs und alle zugehörigen Abhängigkeiten installiert.
pod install
Schließen Sie Xcode und öffnen Sie per Doppelklick die .xcworkspace-Datei Ihres Projekts, um Xcode zu starten. Ab diesem Zeitpunkt müssen Sie zum Öffnen des Projekts die .xcworkspace-Datei verwenden.
Weitere Informationen findest du im Startleitfaden zu CocoaPods.
Manuelle Installation
Ein XCFramework ist ein Binärpaket, mit dem Sie das Driver SDK installieren. Sie können dieses Paket auf mehreren Plattformen verwenden, einschließlich Computern mit Apple Silicon. In diesem Leitfaden erfahren Sie, wie Sie das XCFramework mit dem Driver SDK manuell zu Ihrem Projekt hinzufügen und Ihre Build-Einstellungen in Xcode konfigurieren.
Laden Sie die SDK-Binärdatei und die Ressourcen herunter:
Extrahieren Sie die Dateien, um auf XCFramework und Ressourcen zuzugreifen.
Starten Sie Xcode und öffnen Sie entweder ein vorhandenes Projekt oder erstellen Sie ein neues. Wenn Sie neu bei iOS sind, erstellen Sie ein neues Projekt und wählen Sie die Vorlage für iOS-Apps aus.
Erstellen Sie eine Frameworks-Gruppe in Ihrer Projektgruppe, falls noch keine vorhanden ist.
Ziehen Sie zum Installieren des Driver SDK die Datei
GoogleRidesharingDriver.xcframework
in Ihr Projekt unter Frameworks, Bibliotheken und eingebettete Inhalte. Wählen Sie bei Bedarf „Copy items if required“ (Elemente kopieren) aus.Ziehen Sie das heruntergeladene
GoogleRidesharingDriver.bundle
-Objekt in das oberste Verzeichnis Ihres Xcode-Projekts. Wenn Sie dazu aufgefordert werden, wählen SieCopy items if needed
aus.Wählen Sie Ihr Projekt im Project Navigator und dann das Ziel Ihrer Anwendung aus.
Öffnen Sie den Tab „Build Phases“ (Build-Phasen) und fügen Sie unter „Link Binary with Libraries“ (Binärdatei mit Bibliotheken verknüpfen) die folgenden Frameworks und Bibliotheken hinzu, sofern sie noch nicht vorhanden sind:
Accelerate.framework
AudioToolbox.framework
AVFoundation.framework
CoreData.framework
CoreGraphics.framework
CoreLocation.framework
CoreTelephony.framework
CoreText.framework
GLKit.framework
ImageIO.framework
libc++.tbd
libxml2.tbd
libz.tbd
LocalAuthentication.framework
OpenGLES.framework
QuartzCore.framework
SystemConfiguration.framework
UIKit.framework
WebKit.framework
Wählen Sie Ihr Projekt anstelle eines bestimmten Ziels aus und öffnen Sie den Tab Build Settings (Build-Einstellungen). Fügen Sie im Bereich Other Linker Flags (Weitere Verknüpfungs-Flags)
-ObjC
für die Fehlerbehebung und den Release hinzu. Wenn diese Einstellungen nicht sichtbar sind, ändern Sie den Filter in der Build-Einstellungsleiste von Basic in All.
Apple Privacy Manifest-Datei hinzufügen
Apple verlangt für Apps im App Store Details zum App-Datenschutz. Auf der Seite mit den Datenschutzinformationen für den Apple App Store finden Sie aktuelle Informationen und weitere Informationen.
- Laden Sie das Privacy Manifest-Bundle für das Driver SDK for iOS herunter: GoogleRidesharingDriverPrivacy.
- Extrahieren Sie die Datei, um auf
GoogleRidesharingDriverPrivacy.bundle
zuzugreifen. - Fügen Sie
GoogleRidesharingDriverPrivacy.bundle
mit einer dieser Methoden in die Xcode-Projektnavigation ein. Das Kästchen „Zu Zielen hinzufügen“ muss für das Ziel Ihrer App aktiviert sein. Nach dem Hinzufügen wird die PrivacyInfo-Datei im Projektnavigator angezeigt und Sie können sich die Werte ansehen. - Prüfen Sie, ob das Datenschutzmanifest hinzugefügt wurde. Erstellen Sie dazu ein Archiv Ihrer App und generieren Sie aus dem Archiv einen Datenschutzbericht.
Autorisierung und Authentifizierung implementieren
Wenn Ihre Treiberanwendung Updates generiert und an das Fleet Engine-Back-End sendet, müssen die Anfragen gültige Zugriffstokens enthalten. Zum Autorisieren und Authentifizieren dieser Anfragen ruft das Driver SDK das Objekt auf, das dem GMTDAuthorization
-Protokoll entspricht. Das Objekt stellt das erforderliche Zugriffstoken bereit.
Als App-Entwickler entscheiden Sie, wie Tokens generiert werden. Ihre Implementierung sollte Folgendes ermöglichen:
- Rufen Sie ein Zugriffstoken, möglicherweise im JSON-Format, von einem HTTPS-Server ab.
- Parsen Sie das Token und speichern Sie es im Cache.
- Aktualisieren Sie das Token, wenn es abläuft.
Weitere Informationen zu den vom Fleet Engine-Server erwarteten Tokens finden Sie unter JSON-Webtoken (JWT) für die Autorisierung erstellen.
Die Anbieter-ID ist mit der Google Cloud-Projekt-ID identisch. Weitere Informationen finden Sie in der Kurzanleitung zu Fleet Engine.
Im folgenden Beispiel wird ein Zugriffstoken-Anbieter implementiert:
Swift
import GoogleRidesharingDriver
private let providerURL = "INSERT_YOUR_TOKEN_PROVIDER_URL"
class SampleAccessTokenProvider: NSObject, GMTDAuthorization {
private struct AuthToken {
// The cached vehicle token.
let token: String
// Keep track of when the token expires for caching.
let expiration: TimeInterval
// Keep track of the vehicle ID the cached token is for.
let vehicleID: String
}
enum AccessTokenError: Error {
case missingAuthorizationContext
case missingData
}
private var authToken: AuthToken?
func fetchToken(
with authorizationContext: GMTDAuthorizationContext?,
completion: @escaping GMTDAuthTokenFetchCompletionHandler
) {
// Get the vehicle ID from the authorizationContext. This is set by the Driver SDK.
guard let authorizationContext = authorizationContext else {
completion(nil, AccessTokenError.missingAuthorizationContext)
return
}
let vehicleID = authorizationContext.vehicleID
// If appropriate, use the cached token.
if let authToken = authToken,
authToken.expiration > Date.now.timeIntervalSince1970 && authToken.vehicleID == vehicleID
{
completion(authToken.token, nil)
return
}
// Otherwise, try to fetch a new token from your server.
let request = URLRequest(url: URL(string: providerURL))
let task = URLSession.shared.dataTask(with: request) { [weak self] data, _, error in
guard let strongSelf = self else { return }
guard error == nil else {
completion(nil, error)
return
}
// Replace the following key values with the appropriate keys based on your
// server's expected response.
let vehicleTokenKey = "VEHICLE_TOKEN_KEY"
let tokenExpirationKey = "TOKEN_EXPIRATION"
guard let data = data,
let fetchData = try? JSONSerialization.jsonObject(with: data) as? [String: Any],
let token = fetchData[vehicleTokenKey] as? String,
let expiration = fetchData[tokenExpirationKey] as? Double
else {
completion(nil, AccessTokenError.missingData)
return
}
strongSelf.authToken = AuthToken(
token: token, expiration: expiration, vehicleID: vehicleID)
completion(token, nil)
}
task.resume()
}
}
Objective-C
#import "SampleAccessTokenProvider.h"
#import <GoogleRidesharingDriver/GoogleRidesharingDriver.h>
// SampleAccessTokenProvider.h
@interface SampleAccessTokenProvider : NSObject<GMTDAuthorization>
@end
static NSString *const PROVIDER_URL = @"INSERT_YOUR_TOKEN_PROVIDER_URL";
// SampleAccessTokenProvider.m
@implementation SampleAccessTokenProvider{
// The cached vehicle token.
NSString *_cachedVehicleToken;
// Keep track of the vehicle ID the cached token is for.
NSString *_lastKnownVehicleID;
// Keep track of when tokens expire for caching.
NSTimeInterval _tokenExpiration;
}
- (void)fetchTokenWithContext:(nullable GMTDAuthorizationContext *)authorizationContext
completion:(nonnull GMTDAuthTokenFetchCompletionHandler)completion {
// Get the vehicle ID from the authorizationContext. This is set by the Driver SDK.
NSString *vehicleID = authorizationContext.vehicleID;
if (!vehicleID) {
NSAssert(NO, @"Vehicle ID is missing from authorizationContext.");
return;
}
// Clear cached vehicle token if vehicle ID has changed.
if (![_lastKnownVehicleID isEqual:vehicleID]) {
_tokenExpiration = 0.0;
_cachedVehicleToken = nil;
}
_lastKnownVehicleID = vehicleID;
// Clear cached vehicletoken if it has expired.
if ([[NSDate date] timeIntervalSince1970] > _tokenExpiration) {
_cachedVehicleToken = nil;
}
// If appropriate, use the cached token.
if (_cachedVehicleToken) {
completion(_cachedVehicleToken, nil);
return;
}
// Otherwise, try to fetch a new token from your server.
NSURL *requestURL = [NSURL URLWithString:PROVIDER_URL];
NSMutableURLRequest *request =
[[NSMutableURLRequest alloc] initWithURL:requestURL];
request.HTTPMethod = @"GET";
// Replace the following key values with the appropriate keys based on your
// server's expected response.
NSString *vehicleTokenKey = @"VEHICLE_TOKEN_KEY";
NSString *tokenExpirationKey = @"TOKEN_EXPIRATION";
__weak typeof(self) weakSelf = self;
void (^handler)(NSData *_Nullable data, NSURLResponse *_Nullable response,
NSError *_Nullable error) =
^(NSData *_Nullable data, NSURLResponse *_Nullable response, NSError *_Nullable error) {
typeof(self) strongSelf = weakSelf;
if (error) {
completion(nil, error);
return;
}
NSError *JSONError;
NSMutableDictionary *JSONResponse =
[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&JSONError];
if (JSONError) {
completion(nil, JSONError);
return;
} else {
// Sample code only. No validation logic.
id expirationData = JSONResponse[tokenExpirationKey];
if ([expirationData isKindOfClass:[NSNumber class]]) {
NSTimeInterval expirationTime = ((NSNumber *)expirationData).doubleValue;
strongSelf->_tokenExpiration = [[NSDate date] timeIntervalSince1970] + expirationTime;
}
strongSelf->_cachedVehicleToken = JSONResponse[vehicleTokenKey];
completion(JSONResponse[vehicleTokenKey], nil);
}
};
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *mainQueueURLSession =
[NSURLSession sessionWithConfiguration:config delegate:nil
delegateQueue:[NSOperationQueue mainQueue]];
NSURLSessionDataTask *task = [mainQueueURLSession dataTaskWithRequest:request completionHandler:handler];
[task resume];
}
@end
RidesharingDriverAPI-Instanz erstellen
Um eine GMTDVehicleReporter
-Instanz zu erhalten, müssen Sie zuerst eine GMTDRidesharingDriverAPI
-Instanz mit den Provider-ID, VehicleID, DriverContext und accessTokenProvider erstellen. Die providerID ist mit der Google Cloud-Projekt-ID identisch. Außerdem können Sie über die Treiber API direkt auf die GMTDVehicleReporter
-Instanz zugreifen.
Im folgenden Beispiel wird eine GMTDRidesharingDriverAPI
-Instanz erstellt:
Swift
import GoogleRidesharingDriver
private let providerID = "INSERT_YOUR_PROVIDER_ID"
class SampleViewController: UIViewController {
private let mapView: GMSMapView
override func viewDidLoad() {
super.viewDidLoad()
let vehicleID = "INSERT_CREATED_VEHICLE_ID"
let accessTokenProvider = SampleAccessTokenProvider()
let driverContext = GMTDDriverContext(
accessTokenProvider: accessTokenProvider,
providerID: providerID,
vehicleID: vehicleID,
navigator: mapView.navigator)
let ridesharingDriverAPI = GMTDRidesharingDriverAPI(driverContext: driverContext)
}
}
Objective-C
#import "SampleViewController.h"
#import "SampleAccessTokenProvider.h"
#import <GoogleRidesharingDriver/GoogleRidesharingDriver.h>
static NSString *const PROVIDER_ID = @"INSERT_YOUR_PROVIDER_ID";
@implementation SampleViewController {
GMSMapView *_mapView;
}
- (void)viewDidLoad {
NSString *vehicleID = @"INSERT_CREATED_VEHICLE_ID";
SampleAccessTokenProvider *accessTokenProvider =
[[SampleAccessTokenProvider alloc] init];
GMTDDriverContext *driverContext =
[[GMTDDriverContext alloc] initWithAccessTokenProvider:accessTokenProvider
providerID:PROVIDER_ID
vehicleID:vehicleID
navigator:_mapView.navigator];
GMTDRidesharingDriverAPI *ridesharingDriverAPI = [[GMTDRidesharingDriverAPI alloc] initWithDriverContext:driverContext];
}
Optional: VehicleReporter-Ereignisse überwachen
GMTDVehicleReporter
aktualisiert das Fahrzeug regelmäßig, wenn locationTrackingEnabled
den Status „true
“ hat. Um auf diese regelmäßigen Updates zu reagieren, kann jedes Objekt GMTDVehicleReporter
-Ereignisse abonnieren, indem es dem GMTDVehicleReporterListener
-Protokoll entspricht.
Sie können die folgenden Ereignisse verarbeiten:
vehicleReporter(_:didSucceed:)
Informiert die Fahrer-App darüber, dass die Back-End-Dienste den Fahrzeugstandort und die Statusaktualisierung erfolgreich erhalten haben.
vehicleReporter(_:didFail:withError:)
Informiert den Listener, dass eine Fahrzeugaktualisierung fehlgeschlagen ist. Solange die Standortverfolgung aktiviert ist, sendet
GMTDVehicleReporter
weiterhin die neuesten Daten an das Fleet Engine-Back-End.
Im folgenden Beispiel werden diese Ereignisse verarbeitet:
Swift
import GoogleRidesharingDriver
private let providerID = "INSERT_YOUR_PROVIDER_ID"
class SampleViewController: UIViewController, GMTDVehicleReporterListener {
private let mapView: GMSMapView
override func viewDidLoad() {
// Assumes you have implemented the sample code up to this step.
ridesharingDriverAPI.vehicleReporter.add(self)
}
func vehicleReporter(_ vehicleReporter: GMTDVehicleReporter, didSucceed vehicleUpdate: GMTDVehicleUpdate) {
// Handle update succeeded.
}
func vehicleReporter(_ vehicleReporter: GMTDVehicleReporter, didFail vehicleUpdate: GMTDVehicleUpdate, withError error: Error) {
// Handle update failed.
}
}
Objective-C
/*
* SampleViewController.h
*/
@interface SampleViewController : UIViewController<GMTDVehicleReporterListener>
@end
/*
* SampleViewController.m
*/
#import "SampleViewController.h"
#import "SampleAccessTokenProvider.h"
#import <GoogleRidesharingDriver/GoogleRidesharingDriver.h>
static NSString *const PROVIDER_ID = @"INSERT_YOUR_PROVIDER_ID";
@implementation SampleViewController {
GMSMapView *_mapView;
}
- (void)viewDidLoad {
// Assumes you have implemented the sample code up to this step.
[ridesharingDriverAPI.vehicleReporter addListener:self];
}
- (void)vehicleReporter:(GMTDVehicleReporter *)vehicleReporter didSucceedVehicleUpdate:(GMTDVehicleUpdate *)vehicleUpdate {
// Handle update succeeded.
}
- (void)vehicleReporter:(GMTDVehicleReporter *)vehicleReporter didFailVehicleUpdate:(GMTDVehicleUpdate *)vehicleUpdate withError:(NSError *)error {
// Handle update failed.
}
@end
GMTDVehicleReporter als Listener zu GMSRoadSnappedLocationProvider hinzufügen
Damit Standortaktualisierungen für das Driver SDK zur Verfügung gestellt werden können, muss GMTDVehicleReporter
als Listener für GMSRoadSnappedLocationProvider
festgelegt sein.
Swift
import GoogleRidesharingDriver
private let providerID = "INSERT_YOUR_PROVIDER_ID"
class SampleViewController: UIViewController, GMTDVehicleReporterListener {
private let mapView: GMSMapView
override func viewDidLoad() {
// Assumes you have implemented the sample code up to this step.
if let roadSnappedLocationProvider = mapView.roadSnappedLocationProvider {
roadSnappedLocationProvider.add(ridesharingDriverAPI.vehicleReporter)
roadSnappedLocationProvider.startUpdatingLocation()
}
}
}
Objective-C
/*
* SampleViewController.h
*/
@interface SampleViewController : UIViewController<GMTDVehicleReporterListener>
@end
/*
* SampleViewController.m
*/
#import "SampleViewController.h"
#import "SampleAccessTokenProvider.h"
#import <GoogleRidesharingDriver/GoogleRidesharingDriver.h>
static NSString *const PROVIDER_ID = @"INSERT_YOUR_PROVIDER_ID";
@implementation SampleViewController {
GMSMapView *_mapView;
}
- (void)viewDidLoad {
// Assumes you have implemented the sample code up to this step.
[_mapView.roadSnappedLocationProvider addListener:ridesharingDriverAPI.vehicleReporter];
[_mapView.roadSnappedLocationProvider startUpdatingLocation];
}
@end
Standortermittlung aktivieren
Um das Standort-Tracking zu aktivieren, kann deine App locationTrackingEnabled
auf true
auf GMTDVehicleReporter
setzen. GMTDVehicleReporter
sendet automatisch Standortaktualisierungen. Nachdem die Dienste abgeglichen und das Fahrzeug einer Fahrt zugewiesen haben, sendet GMTDVehicleReporter
automatisch Routenaktualisierungen, wenn sich GMSNavigator
im Navigationsmodus befindet (wenn über setDestinations
ein Ziel festgelegt ist).
Die Route, die während der Fahrtaktualisierung festgelegt wird, entspricht der Route, die der Fahrer während der Navigation durchläuft. Damit die Freigabe von Fahrten richtig funktioniert, muss der über setDestinations
festgelegte Wegpunkt mit dem im Fleet Engine-Back-End festgelegten Ziel übereinstimmen.
Wenn locationTrackingEnabled
auf true
gesetzt ist, werden in regelmäßigen Abständen Fahrt- und Fahrzeugaktualisierungen an das Fleet Engine-Back-End gesendet, basierend auf dem für locationUpdateInterval
festgelegten Wert. Wenn locationTrackingEnabled
auf false
gesetzt ist, werden Updates angehalten und eine endgültige Anfrage für ein Fahrzeugupdate wird an das Fleet Engine-Back-End gesendet, um den Fahrzeugstatus auf GMTDVehicleState.offline
zu setzen. Unter updateVehicleState
finden Sie besondere Hinweise zur Behandlung von Fehlern, wenn locationTrackingEnabled
auf false
festgelegt ist.
Im folgenden Beispiel wird die Standortermittlung aktiviert:
Swift
import GoogleRidesharingDriver
private let providerID = "INSERT_YOUR_PROVIDER_ID"
class SampleViewController: UIViewController, GMTDVehicleReporterListener {
private let mapView: GMSMapView
override func viewDidLoad() {
// Assumes you have implemented the sample code up to this step.
ridesharingDriverAPI.vehicleReporter.locationTrackingEnabled = true
}
}
Objective-C
/*
* SampleViewController.m
*/
#import "SampleViewController.h"
#import "SampleAccessTokenProvider.h"
#import <GoogleRidesharingDriver/GoogleRidesharingDriver.h>
static NSString *const PROVIDER_ID = @"INSERT_YOUR_PROVIDER_ID";
@implementation SampleViewController {
GMSMapView *_mapView;
}
- (void)viewDidLoad {
// Assumes you have implemented the sample code up to this step.
ridesharingDriverAPI.vehicleReporter.locationTrackingEnabled = YES;
}
@end
Das Berichtsintervall beträgt standardmäßig 10 Sekunden, kann aber mit locationUpdateInterval
geändert werden. Das mindestens unterstützte Aktualisierungsintervall beträgt 5 Sekunden. Das maximal unterstützte Aktualisierungsintervall beträgt 60 Sekunden. Häufigere Updates können zu langsameren Anfragen und Fehlern führen.
Fahrzeugstatus aktualisieren
Das folgende Beispiel zeigt, wie der Fahrzeugstatus auf ONLINE
gesetzt wird. Weitere Informationen finden Sie unter updateVehicleState
.
Swift
import GoogleRidesharingDriver
private let providerID = "INSERT_YOUR_PROVIDER_ID"
class SampleViewController: UIViewController, GMTDVehicleReporterListener {
private let mapView: GMSMapView
override func viewDidLoad() {
// Assumes you have implemented the sample code up to this step.
ridesharingDriverAPI.vehicleReporter.update(.online)
}
}
Objective-C
#import "SampleViewController.h"
#import "SampleAccessTokenProvider.h"
#import <GoogleRidesharingDriver/GoogleRidesharingDriver.h>
static NSString *const PROVIDER_ID = @"INSERT_YOUR_PROVIDER_ID";
@implementation SampleViewController {
GMSMapView *_mapView;
}
- (void)viewDidLoad {
// Assumes you have implemented the sample code up to this step.
[ridesharingDriverAPI.vehicleReporter
updateVehicleState:GMTDVehicleStateOnline];
}
@end
Ein update_mask
-Fehler kann auftreten, wenn die Maske leer ist. Er tritt normalerweise bei der ersten Aktualisierung nach dem Start auf. Das folgende Beispiel zeigt, wie dieser Fehler behoben werden kann:
Swift
import GoogleRidesharingDriver
class VehicleReporterListener: NSObject, GMTDVehicleReporterListener {
func vehicleReporter(
_ vehicleReporter: GMTDVehicleReporter,
didFail vehicleUpdate: GMTDVehicleUpdate,
withError error: Error
) {
let fullError = error as NSError
if let innerError = fullError.userInfo[NSUnderlyingErrorKey] as? NSError {
let innerFullError = innerError as NSError
if innerFullError.localizedDescription.contains("update_mask cannot be empty") {
emptyMaskUpdates += 1
return
}
}
failedUpdates += 1
}
override init() {
emptyMaskUpdates = 0
failedUpdates = 0
}
}
Objective-C
#import "VehicleReporterListener.h"
#import <GoogleRidesharingDriver/GoogleRidesharingDriver.h>
@implementation VehicleReporterListener {
NSInteger emptyMaskUpdates = 0;
NSInteger failedUpdates = 0;
}
- (void)vehicleReporter:(GMTDVehicleReporter *)vehicleReporter
didFailVehicleUpdate:(GMTDVehicleUpdate *)vehicleUpdate
withError:(NSError *)error {
for (NSError *underlyingError in error.underlyingErrors) {
if ([underlyingError.localizedDescription containsString:@"update_mask cannot be empty"]) {
emptyMaskUpdates += 1;
return;
}
}
failedUpdates += 1
}
@end
Standortupdates deaktivieren und Fahrzeug offline stellen
Deine App kann Updates deaktivieren und das Fahrzeug offline nehmen. Wenn beispielsweise die Schicht eines Fahrgasts endet, kann Ihre Anwendung locationTrackingEnabled
auf false
setzen.
Wenn Sie die Updates deaktivieren, wird auch der Status des Fahrzeugs im Fleet Engine-Back-End auf OFFLINE
gesetzt.
Swift
vehicleReporter.locationTrackingEnabled = false
Objective-C
_vehicleReporter.locationTrackingEnabled = NO;