L'SDK Driver è una libreria che puoi integrare nell'app del driver. È responsabile dell'aggiornamento di Fleet Engine con la posizione del veicolo, il percorso, la distanza rimanente e l'orario di arrivo stimato. Inoltre, si integra con l'SDK di navigazione, che fornisce istruzioni di navigazione passo passo per il conducente.
Requisiti minimi di sistema
Prerequisiti
Questa guida presuppone che la tua app implementi già l'opzione Navigazione SDK e che il Fleet Motore il backend è configurato e disponibile. Tuttavia, il codice di esempio fornisce un esempio come configurare l'SDK di navigazione.
Devi anche attivare l'SDK Maps per iOS nel tuo progetto Google Cloud e ricevi un'API Chiave.
Sviluppo locale
Per lo sviluppo locale, è sufficiente accedere con Cloud SDK.
gcloud
gcloud auth login
L'indirizzo email utilizzato per accedere deve essere un membro del gruppo Workspace.
Automazione (sistemi di creazione o integrazione continua)
Configura gli host di automazione in base a best practice:
Se il tuo processo viene eseguito all'interno di un ambiente Google Cloud, utilizza automatico il rilevamento delle credenziali.
In caso contrario, archivia il file della chiave dell'account di servizio in una posizione sicura al file system dell'host e impostare GOOGLE_APPLICATION_CREDENTIALS la variabile di ambiente in modo appropriato.
L'indirizzo email dell'account di servizio associato alle credenziali deve essere un membro di gruppo Workspace.
Configurazione progetto
Gestore pacchetti Swift
L'SDK Driver può essere installato tramite Gestore pacchetti Swift. Per aggiungere l'SDK, assicurati di avere rimosso eventuali dipendenze esistenti dell'SDK del driver.
Per aggiungere l'SDK a un progetto nuovo o esistente:
-
Apri il file Xcode
project
oworkspace
, quindi seleziona File > Aggiungi dipendenze pacchetto. - Inserisci https://github.com/googlemaps/ios-driver-sdk come URL e premi Invio per estrarre il pacchetto e fai clic su "Aggiungi pacchetto".
-
Per installare un'entità
version
specifica, imposta il campo Regola di dipendenza su uno dei le opzioni basate sulla versione. Per i nuovi progetti, ti consigliamo di specificare la versione più recente con la "versione esatta" . Al termine, fai clic su "Aggiungi pacchetto". -
Nella finestra Scegli i prodotti del pacchetto, verifica che verrà aggiunto
GoogleRidesharingDriver
il targetmain
designato. Al termine, fai clic su "Aggiungi pacchetto". -
Per verificare l'installazione, vai al riquadro
General
di destinazione. In Framework, librerie e contenuti incorporati dovresti vedere i pacchetti installati. Puoi anche visualizzare le "Dipendenze pacchetto" sezione di "Project Navigator" per verificare il pacchetto e la sua versione.
Per aggiornare package
per un progetto esistente:
Se esegui l'upgrade da una versione precedente alla 9.0.0, devi rimuovere le dipendenze seguenti:
GoogleMapsBase
,GoogleMapsCore
eGoogleMapsM4B
dopo l'upgrade. Non rimuovere la dipendenza perGoogleMaps
. Per ulteriori informazioni, consulta Note di rilascio della versione 9.0.0.Dalle impostazioni di configurazione del progetto Xcode, individua Framework, Libraries, e Contenuti incorporati. Utilizza il segno meno(-) per rimuovere il seguente framework:
GoogleMapsBase
(solo per gli upgrade da versioni precedenti alla 9.0.0)GoogleMapsCore
(solo per gli upgrade da versioni precedenti alla 9.0.0)GoogleMapsM4B
(solo per gli upgrade da versioni precedenti alla 9.0.0)
- Da Xcode, vai su "File > Pacchetti > Aggiorna alle ultime versioni del pacchetto".
- Per verificare l'installazione, vai alla sezione Dipendenze pacchetto di Project Navigator per verificare il pacchetto e la sua versione.
Per rimuovere le dipendenze esistenti dell'SDK del driver aggiunte utilizzando
CocoaPods
, segui questi passaggi:
- Chiudi l'area di lavoro Xcode. Apri il terminale ed esegui questo comando:
sudo gem install cocoapods-deintegrate cocoapods-clean pod deintegrate pod cache clean --all
-
Rimuovi
Podfile
,Podfile.resolved
e Esegui l'Xcodeworkspace
se non lo utilizzi per scopi diversi da CocoaPods.
Per rimuovere l'SDK del driver esistente installato manualmente, segui questi passaggi:
Dalle impostazioni di configurazione del tuo progetto Xcode, individua Frameworks, Librerie e contenuti incorporati. Utilizza il segno meno
(-)
per rimuovere l'elemento. il seguente framework:GoogleRidesharingDriver.xcframework
Dalla directory di primo livello del tuo progetto Xcode, rimuovi Set
GoogleRidesharingDriver
.
CocoaPods
Per configurare l'SDK Driver utilizzando CocoaPods, sono necessari i seguenti elementi:
- Lo strumento CocoaPods: per installare lo strumento, apri il terminale ed esegui .
sudo gem install cocoapods
Creare un podfile per l'SDK Driver e utilizzarlo per installare l'API e e le sue dipendenze: crea un file denominato Podfile nella directory del progetto. Questo file definisce le dipendenze del progetto. Modifica il podfile e aggiungi le tue dipendenze. Ecco un esempio che include le dipendenze:
source "https://github.com/CocoaPods/Specs.git" target 'YOUR_APPLICATION_TARGET_NAME_HERE' do pod 'GoogleRidesharingDriver' end
Ecco un esempio che include i pod Alpha e Beta per SDK driver come dipendenze:
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
Salva il podfile. Apri un terminale e vai alla directory contenente Podfile:
cd <path-to-project>
Esegui il comando di installazione dei pod. Questa operazione installerà le API specificate nel di pod, insieme alle eventuali dipendenze.
pod install
Chiudi Xcode, quindi apri (fai doppio clic) nell'area di lavoro .xcworkspace del tuo progetto per avviare Xcode. D'ora in poi, dovrai utilizzare .xcworkspace per aprire il progetto.
Fai riferimento alla guida introduttiva di CocoaPods guida per saperne di più i dettagli.
Installazione manuale
Un XCFramework è un pacchetto binario che puoi usare per installare SDK driver. Puoi utilizzare questo pacchetto su più di Google Cloud, incluse le macchine che utilizzano Apple al silicio. Questa guida illustra come aggiungere manualmente l'XCFramework contenente Driver SDK nel progetto e configura la build impostazioni in Xcode.
Scarica il file binario e le risorse dell'SDK:
Estrai i file per accedere a XCFramework e alle risorse.
Avvia Xcode e apri un progetto esistente o creane uno nuovo progetto. Se è la prima volta che utilizzi iOS, crea un nuovo progetto e seleziona l'icona Modello di app.
Creare un gruppo Framework nel gruppo di progetto se non ne esiste uno .
Per installare l'SDK dei driver, trascina
GoogleRidesharingDriver.xcframework
nel tuo progetto in Framework, librerie e contenuti incorporati. Quando richiesto, seleziona Copia gli elementi, se necessario.Trascina l'elemento
GoogleRidesharingDriver.bundle
scaricato in primo livello del tuo progetto Xcode. Quando richiesto, selezionaCopy items if needed
.Seleziona il tuo progetto dal navigatore dei progetti e scegli target dell'applicazione.
Apri la scheda Fasi di creazione e in Collega binario con le librerie aggiungi i seguenti framework e librerie, se non sono già presenti:
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
Scegli il tuo progetto, anziché un target specifico, e apri lo strumento Crea Impostazioni. Nella sezione Altri flag linker, aggiungi
-ObjC
per sia di debug che di release. Se queste impostazioni non sono visibili, modifica nella barra delle impostazioni della build da Di base a Tutte.
Ispeziona il file manifest della privacy di Apple
Apple richiede informazioni sulla privacy per le app disponibili sull'App Store. Visita la pagina dei dettagli sulla privacy dell'App Store di Apple per aggiornamenti e ulteriori informazioni.
Il file manifest della privacy di Apple è incluso nel bundle di risorse per l'SDK. Per verificare che il file manifest per la privacy sia stato incluso e per controllarne i contenuti, crea un archivio della tua app e genera una segnalazione sulla privacy dall'archivio.
Implementare l'autorizzazione e l'autenticazione
Quando l'app Driver genera e invia aggiornamenti al backend Fleet Engine,
le richieste devono includere token di accesso validi. Per autorizzare e
di autenticare queste richieste, l'SDK del driver chiama
conforme a GMTDAuthorization
protocollo. L'oggetto è responsabile di fornire il token di accesso richiesto.
In qualità di sviluppatore dell'app, sei tu a scegliere il modo in cui vengono generati i token. La tua implementazione dovrebbe offrire la possibilità di:
- Recupera un token di accesso, possibilmente in formato JSON, da un server HTTPS.
- Analizza e memorizza nella cache il token.
- Aggiorna il token alla scadenza.
Per maggiori dettagli sui token previsti dal server Fleet Engine, consulta Creazione di un token JWT (JSON Web Token) per l'autorizzazione.
L'ID provider corrisponde all'ID progetto Google Cloud. Consulta la guida dell'utente dell'API Fleet Engine Deliveries per ulteriori informazioni.
L'esempio seguente implementa un provider di token di accesso:
#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 {
if (!completion) {
NSAssert(NO, @"%s encountered an unexpected nil completion.", __PRETTY_FUNCTION__);
return;
}
// 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 vehicle token 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
Crea un'istanza DeliveryDriverAPI
Per ottenere un'istanza GMTDDeliveryVehicleReporter
, devi prima creare un'istanza
GMTDDeliveryDriverAPI
utilizzando i token providerID
, vehicleID
,
driverContext
e accessTokenProvider
. Il providerID
è uguale a
ID progetto Google Cloud. Puoi accedere a GMTDDeliveryVehicleReporter
direttamente dall'API driver.
L'esempio seguente crea un'istanza GMTDDeliveryDriverAPI
:
#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];
GMTDDeliveryDriverAPI *deliveryDriverAPI = [[GMTDDeliveryDriverAPI alloc] initWithDriverContext:driverContext];
}
Facoltativamente, ascolta gli eventi di VehicleReporter
GMTDDeliveryVehicleReporter
aggiorna periodicamente il veicolo quando
locationTrackingEnabled
è SÌ. Per rispondere a questi aggiornamenti periodici, qualsiasi
può iscriversi a GMTDDeliveryVehicleReporter
eventi rispettando le
il protocollo GMTDVehicleReporterListener
.
Puoi gestire i seguenti eventi:
vehicleReporter:didSucceedVehicleUpdate
Informa l'app driver che i servizi di backend hanno ricevuto correttamente il aggiornamento della posizione e dello stato del veicolo.
vehicleReporter:didFailVehicleUpdate:withError
Informa il listener che un aggiornamento del veicolo non è riuscito. A condizione che la posizione il monitoraggio è attivato,
GMTDDeliveryVehicleReporter
continua a inviare i dati più recenti al backend Fleet Engine.
Nell'esempio seguente vengono gestiti questi eventi:
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 IMPLEMENTED HAVE THE SAMPLE CODE UP TO THIS STEP.
[ridesharingDriverAPI.vehicleReporter addListener:self];
}
- (void)vehicleReporter:(GMTDDeliveryVehicleReporter *)vehicleReporter didSucceedVehicleUpdate:(GMTDVehicleUpdate *)vehicleUpdate {
// Handle update succeeded.
}
- (void)vehicleReporter:(GMTDDeliveryVehicleReporter *)vehicleReporter didFailVehicleUpdate:(GMTDVehicleUpdate *)vehicleUpdate withError:(NSError *)error {
// Handle update failed.
}
@end
Attiva il monitoraggio della posizione
Per attivare il monitoraggio della posizione, la tua app può impostare locationTrackingEnabled
su YES
il giorno GMTDDeliveryVehicleReporter
. Poi GMTDDeliveryVehicleReporter
invia automaticamente aggiornamenti sulla posizione. Quando GMSNavigator
è in navigazione
(quando una destinazione è impostata tramite setDestinations
) e
locationTrackingEnabled
impostato su YES
, GMTDDeliveryVehicleReporter
invia automaticamente anche aggiornamenti
su percorso e orario di arrivo stimato.
Il percorso impostato durante questi aggiornamenti è lo stesso del conducente.
durante la sessione di navigazione. Affinché il monitoraggio della flotta funzioni
correttamente, il waypoint impostato tramite -setDestinations:callback:
deve corrispondere
impostata nel backend di Fleet Engine.
Il seguente esempio abilita il monitoraggio della posizione:
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 IMPLEMENTED HAVE THE SAMPLE CODE UP TO THIS STEP.
deliveryDriverAPI.vehicleReporter.locationTrackingEnabled = YES;
}
@end
Per impostazione predefinita, l'intervallo di report è di 10 secondi, ma può
da modificare con locationUpdateInterval
. L'intervallo di aggiornamento minimo supportato
è di 5 secondi. L'intervallo di aggiornamento massimo supportato è di 60 secondi. Più frequente
degli aggiornamenti, le richieste e gli errori potrebbero essere più lenti.
Disattiva gli aggiornamenti sulla posizione e metti offline il veicolo
La tua app può disattivare gli aggiornamenti della posizione per un veicolo. Ad esempio, quando
il turno del conducente termina, la tua app può impostare locationTrackingEnabled
su NO
.
_vehicleReporter.locationTrackingEnabled = NO