車両の準備

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

リスナーを設定する

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

位置情報の更新を有効にする

位置情報の更新を有効にするには、ドライバアプリの GMTDVehicleReporterlocationTrackingEnabledtrue に設定します。これにより、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

更新間隔を設定する

デフォルトでは、locationTrackingEnabledtrue に設定すると、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

次のステップ

ルートの詳細を設定する