このセクションでは、車両を運転に備える方法について説明します。バックエンドで車両をルートに一致させるには、以下の各ステップを完了する必要があります。
リスナーを設定する
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