このセクションでは、車両を運転に備える方法について説明します。バックエンドで車両とルートを照合するには、次の手順をすべて完了する必要があります。
リスナーを設定する
Driver SDK を初期化して GMTDRidesharingDriverAPI
インスタンスを作成したら、イベント リスナーを設定して、Fleet Engine とバックエンドに送信された車両の更新の成功または失敗をモニタリングできます。これらのリスナーは、バックエンドとの通信が失敗した場合にドライバーに通知するなど、ドライバー アプリ内でアクションをトリガーできます。
車両の更新イベントをリッスンする
ドライバーがドライバーアプリで位置情報の更新を有効にすると、Driver SDK は GMTDVehicleReporter
クラスを介して、Fleet Engine とお客様のバックエンドに定期的な車両の更新を送信します。GMTDVehicleReporterListener
プロトコルを設定すると、アプリが更新イベントに応答するようにできます。
GMTDVehicleReporterListener
を使用すると、次のイベントを処理できます。
vehicleReporter:didSucceedVehicleUpdate
バックエンド サービスが車両の位置情報と状態の更新を正常に受信したことをドライバー アプリに通知します。
vehicleReporter:didFailVehicleUpdate:withError
車両の更新に失敗したことをリスナーに通知します。ドライバが位置情報の更新を有効にしている限り、
GMTDVehicleReporter
クラスは最新のデータを Fleet Engine に引き続き送信します。
次の例は、これらのイベントを処理するように GMTDVehicleReporterListener
を設定する方法を示しています。
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
車両の位置情報の更新をリッスンする
Navigation SDK は、GMSRoadSnappedLocationProvider
クラスを介して Driver SDK に位置情報の更新を提供します。これらの更新を受け取るには、GMTDVehicleReporter
をリスナーとして設定する必要があります。
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
位置情報の更新を有効にする
位置情報の更新を有効にするには、ドライバー アプリの GMTDVehicleReporter
で locationTrackingEnabled
を true
に設定します。これにより、GMTDVehicleReporter
クラスが位置情報の更新を Fleet Engine に自動的に送信します。Fleet Engine とお客様のバックエンド サービスが一致し、車両がルートに割り当てられると、GMSNavigator
がナビゲーション モード(setDestinations
で目的地が設定されている場合)になると、GMTDVehicleReporter
クラスがルート更新を自動的に送信します。
Driver SDK は、ドライバーの現在のナビゲーション パスに合わせてルートを設定します。正確な位置情報の更新を確実に行うには、Fleet Engine の目的地と一致するように setDestinations
のウェイポイントを設定します。
次の例は、位置情報の更新を有効にする方法を示しています。
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
更新間隔を設定する
デフォルトでは、locationTrackingEnabled
を true
に設定すると、Driver SDK は 10 秒間隔でルート情報と車両情報を Fleet Engine に送信します。locationUpdateInterval
を使用して更新間隔を変更できます。更新間隔の最小値は 5 秒、最大値は 60 秒です。更新頻度を高めると、リクエストの遅延やエラーが発生する可能性があります。
車両の状態をオンラインに設定する
位置情報の更新を有効にしたら、車両の状態を ONLINE
に設定して、Fleet Engine の検索クエリで車両を使用できるようにします。
次の例は、車両の状態を ONLINE
に設定する方法を示しています。詳細については、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