車両の準備

このセクションでは、車両を運転に備える方法について説明します。バックエンドで車両とルートを照合するには、次の手順をすべて完了する必要があります。

リスナーを設定する

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

次のステップ

ルートの詳細を設定する