This section shows how to get the vehicle ready for trips. You must complete each of the following steps before your backend can match a vehicle to a trip.
Set up listeners
After initializing the Driver SDK and creating a GMTDRidesharingDriverAPI
instance, you can set up event listeners to monitor the success or failure of
vehicle updates sent to Fleet Engine and your backend. These listeners can
trigger actions within your driver app, such as notifying the driver if
communication with your backend fails.
Listen for vehicle update events
When the driver enables location updates in the driver app, the Driver SDK
sends regular vehicle updates to Fleet Engine and the customer
backend through the GMTDVehicleReporter
class. You can have the app respond
to update events by setting up the GMTDVehicleReporterListener
protocol.
With GMTDVehicleReporterListener
, you can handle the following events:
-
vehicleReporter:didSucceedVehicleUpdate
Informs the Driver app that the backend services successfully received the vehicle location and state update.
-
vehicleReporter:didFailVehicleUpdate:withError
Informs the listener that a vehicle update failed. As long as the driver has location updates enabled, the
GMTDVehicleReporter
class continues to send the latest data to Fleet Engine.
The following examples show how to set up GMTDVehicleReporterListener
to
handle these events:
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
Listen for vehicle location updates
The Navigation SDK provides location updates to the Driver SDK through the GMSRoadSnappedLocationProvider
class. To receive those updates, you must set
up the GMTDVehicleReporter
as a listener.
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
Enable location updates
To enable location updates, set locationTrackingEnabled
to true
on GMTDVehicleReporter
in the driver app. Then the GMTDVehicleReporter
class
automatically sends location updates to Fleet Engine. After the Fleet Engine and
customer backend services match and assign the vehicle to a trip, the GMTDVehicleReporter
class sends route updates automatically when the GMSNavigator
is in navigation mode, which is when a destination is set through setDestinations
.
The Driver SDK sets the route to match the driver's current navigation path. To
ensure accurate location updates, set the waypoint in setDestinations
to match
the destination in Fleet Engine.
The following example shows how to enable location updates:
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
Set the update interval
By default, when you set locationTrackingEnabled
to true
, the Driver SDK
sends trip and vehicle updates to Fleet Engine at a 10-second interval. You can
change the update interval with locationUpdateInterval
to a minimum update
interval of 5 seconds or a maximum of 60 seconds. More frequent updates may
result in slower requests and errors.
Set the vehicle state to online
After you enable location updates, set the vehicle state to ONLINE
to make the
vehicle available for search queries in Fleet Engine.
The following examples show how to set the vehicle state to ONLINE
. For
details, see 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