W tej sekcji dowiesz się, jak przygotować pojazd do podróży. Zanim backend będzie mógł dopasować pojazd do podróży, musisz wykonać wszystkie te czynności.
Konfigurowanie detektorów
Po zainicjowaniu pakietu Driver SDK i utworzeniu instancji GMTDRidesharingDriverAPI możesz skonfigurować detektory zdarzeń, aby monitorować powodzenie lub niepowodzenie aktualizacji pojazdu wysyłanych do Fleet Engine i backendu. Te detektory mogą wywoływać działania w aplikacji kierowcy, np. powiadamiać kierowcę o niepowodzeniu komunikacji z backendem.
Nasłuchiwanie zdarzeń aktualizacji pojazdu
Gdy kierowca włączy informacje o zmianie lokalizacji w aplikacji kierowcy, pakiet Driver SDK będzie regularnie wysyłać aktualizacje pojazdu do Fleet Engine i backendu klienta za pomocą klasy GMTDVehicleReporter. Możesz skonfigurować aplikację tak, aby reagowała na zdarzenia aktualizacji, konfigurując protokół GMTDVehicleReporterListener.
Za pomocą GMTDVehicleReporterListener możesz obsługiwać te zdarzenia:
vehicleReporter:didSucceedVehicleUpdateInformuje aplikację kierowcy, że usługi backendu otrzymały aktualizację lokalizacji i stanu pojazdu.
vehicleReporter:didFailVehicleUpdate:withErrorInformuje detektor o niepowodzeniu aktualizacji pojazdu. Dopóki kierowca ma włączone informacja o zmianie lokalizacji, klasa
GMTDVehicleReporterbędzie nadal wysyłać najnowsze dane do Fleet Engine.
Poniższe przykłady pokazują, jak skonfigurować GMTDVehicleReporterListener do obsługi tych zdarzeń:
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
Nasłuchiwanie informacji o zmianie lokalizacji pojazdu
Pakiet Navigation SDK udostępnia informacje o zmianie lokalizacji pakietowi Driver SDK za pomocą klasy GMSRoadSnappedLocationProvider. Aby otrzymywać te aktualizacje, musisz skonfigurować GMTDVehicleReporter jako detektor.
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
Włączanie informacji o zmianie lokalizacji
Aby włączyć aktualizacje lokalizacji, ustaw w aplikacji kierowcy wartość locationTrackingEnabled na true w GMTDVehicleReporter. Następnie klasa GMTDVehicleReporter będzie automatycznie wysyłać aktualizacje lokalizacji do Fleet Engine. Gdy usługi Fleet Engine i usługi backendu klienta dopasują i przypiszą pojazd do przejazdu, klasa GMTDVehicleReporter będzie automatycznie wysyłać aktualizacje trasy, gdy GMSNavigator jest w trybie nawigacji, czyli gdy miejsce docelowe jest ustawione za pomocą setDestinations.
Pakiet Driver SDK ustawia trasę tak, aby pasowała do bieżącej ścieżki nawigacji kierowcy. Aby zapewnić dokładne informacje o zmianie lokalizacji, ustaw punkt na trasie w setDestinations tak, aby pasował do miejsca docelowego w Fleet Engine.
Poniższy przykład pokazuje, jak włączyć informację o zmianie lokalizacji:
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
Ustawianie interwału aktualizacji
Domyślnie, gdy ustawisz locationTrackingEnabled na true, pakiet Driver SDK będzie wysyłać aktualizacje podróży i pojazdu do Fleet Engine co 10 sekund. Interwał aktualizacji możesz zmienić za pomocą locationUpdateInterval na minimalny interwał aktualizacji wynoszący 5 sekund lub maksymalny wynoszący 60 sekund. Częstsze aktualizacje mogą powodować wolniejsze żądania i błędy.
Ustawianie stanu pojazdu na „dostępny”
Po włączeniu informacji o zmianie lokalizacji ustaw stan pojazdu na ONLINE, aby pojazd był dostępny w zapytaniach wyszukiwania w Fleet Engine.
Poniższe przykłady pokazują, jak ustawić stan pojazdu na ONLINE. Więcej
informacji znajdziesz w artykule 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