Driver SDK for Android のスタートガイド

最小システム要件

モバイル デバイスに Android 6.0 が搭載されている必要があります。 (API レベル 23)以降が必要です。

ビルドと依存関係の構成

Driver SDK バージョン 4.99 以降は、Google Maven リポジトリから入手できます。

Gradle

次のコードを build.gradle ファイルに追加します。

repositories {
    ...
    google()
}

Maven

次のコードを pom.xml ファイルに追加します。

<project>
  ...
  <repositories>
    <repository>
      <id>google-maven-repository</id>
      <url>https://maven.google.com</url>
    </repository>
  </repositories>
  ...
</project>

プロジェクト構成

Driver SDK を使用するには、アプリで minSdkVersion をターゲットにする必要があります 23 以上。詳細については、次をご覧ください: リリースノート

Driver SDK でビルドしたアプリを実行するには、Android デバイスに以下が必要です。 Google Play 開発者サービス インストールされています。

開発プロジェクトを設定する

開発プロジェクトをセットアップして API キーを取得する方法 Google Cloud コンソールでプロジェクトに対して次の操作を行います。

  1. 新しい Google Cloud コンソールを作成する 既存のプロジェクトを選択して Driver SDK を使用します通知が届くまで数分 新しいプロジェクトが Google Cloud コンソールに表示されます。

  2. デモアプリを実行するには、プロジェクトに Maps SDK へのアクセス権が必要です 説明します。Google Cloud コンソールで、[ API とサービス >Library に移動し、Maps SDK for Android。

  3. [API キーを取得] を選択して、プロジェクトの API キーを取得します。 API とサービス >クルデンシャル >認証情報を作成 >API キー。 API キーの取得について詳しくは、以下をご覧ください。 API キーを取得します

Driver SDK をアプリに追加する

Driver SDK は Google Maven リポジトリから入手できます。「 リポジトリには、SDK のプロジェクト オブジェクト モデル(.pom)ファイルと Javadocs が含まれています。 Driver SDK をアプリに追加するには:

  1. Gradle または Maven の構成に次の依存関係を追加します。 VERSION_NUMBER プレースホルダを、選択したバージョンの Driver SDK を使用します

    Gradle

    build.gradle に次の行を追加します。

    dependencies {
      ...
      implementation 'com.google.android.libraries.mapsplatform.transportation:transportation-driver:[VERSION_NUMBER]'
    }
    

    Maven

    pom.xml に次の行を追加します。

    <dependencies>
      ...
      <dependency>
        <groupId>com.google.android.libraries.mapsplatform.transportation.driver</groupId>
        <artifactId>transportation-driver</artifactId>
        <version>[VERSION_NUMBER]</version>
      </dependency>
    </dependencies>
    
  2. Driver SDK は Navigation SDK に依存しているため、この依存関係は 特定のバージョンの Navigation SDK が必要な場合は、それを 次のようにビルド構成ファイルに明示的に定義する。 このコードブロックを省略すると、プロジェクトは常に メジャー リリース バージョンに含まれる Navigation SDK の最新バージョン。 Driver SDK の最新バージョンと他のバージョンには、 Navigation SDK のリリース前に厳しいテストが行われています。

    開発とリリースの依存関係構成を調整する 環境に応じて変わります。

    Gradle

    build.gradle に次の行を追加します。

    dependencies {
      ...
      implementation 'com.google.android.libraries.navigation:navigation:5.0.0'
    }
    

    Maven

    pom.xml に次の行を追加します。

    <dependencies>
      ...
      <dependency>
        <groupId>com.google.android.libraries.navigation</groupId>
        <artifactId>navigation</artifactId>
        <version>5.0.0</version>
      </dependency>
    </dependencies>
    

アプリに API キーを追加する

Driver SDK をアプリに追加したら、API キーをアプリに追加します。マイページ プロジェクト API キーを使用する必要があります。 開発プロジェクトを設定します。

このセクションでは、API キーを安全に保管する方法について説明します。 自動的に参照されます。API キーをバージョンにチェックインしないでください 制御システムです。これは local.properties ファイルに保存する必要があります。 このファイルは、プロジェクトのルート ディレクトリにあります。詳細については、 local.properties ファイルについては、以下をご覧ください。 Gradle プロパティ ファイル

このタスクを効率化するには、 Android 用 Secrets Gradle プラグイン。 以下の手順に沿って、Secrets Gradle プラグインをインストールし、 取得します。

  1. ルートレベルの build.gradle ファイルを開き、次のコードを buildscript の下にある dependencies 要素。

    Groovy

    buildscript {
        dependencies {
            // ...
            classpath "com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:2.0.0"
        }
    }
    

    Kotlin

    buildscript {
        dependencies {
            // ...
            classpath("com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:2.0.0")
        }
    }
    
  2. アプリレベルの build.gradle ファイルを開き、次のコードを plugins 要素。

    Groovy

    id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
    

    Kotlin

    id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin")
    
  3. プロジェクトを Gradle と同期します

  4. プロジェクト レベルのディレクトリで local.properties を開き、 使用します。YOUR_API_KEY は実際の API キーに置き換えてください。

    MAPS_API_KEY=YOUR_API_KEY
    
  5. AndroidManifest.xml ファイルで com.google.android.geo.API_KEY に移動します。 android:value 属性を次のように更新します。

    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="${MAPS_API_KEY}" />
    

次の例は、サンプルアプリの完全なマニフェストを示しています。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.driverapidemo" >
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/_AppTheme" >

        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="${MAPS_API_KEY}" />

        <activity android:name=".MainActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

必要な帰属情報をアプリに含める

アプリで Driver SDK を使用する場合は、以下を含める必要があります。 (アプリの法的通知の一部として含めることができる、帰属表示テキストおよびオープンソース ライセンス) できます。帰属情報は、独立したメニュー項目として、または [About] メニュー項目の一部。

ライセンス情報は「third_party_licenses.txt」にあります。ファイル - アーカイブ解除された AAR ファイル

https://developers.google.com/android/guides/opensource をご覧ください。 記載する方法をご覧ください。

依存関係

Driver SDK では、 gRPC から Fleet Engine サーバーと通信します。gRPC をまだ導入していない場合は 次の依存関係を宣言する必要がある場合があります。

dependencies {
    implementation 'io.grpc:grpc-android:1.12.0'
    implementation 'io.grpc:grpc-okhttp:1.12.0'
}

これらの依存関係がないと、Driver SDK は 実行時にエラーが発生する Fleet Engine サーバーとの通信を試行します。

ProGuard を使用して行う場合 ビルドを最適化するには、ProGuard に次の行を追加する必要があります。 使用します。

-dontwarn com.google.**
-dontwarn io.grpc.**
-dontwarn okio.**

サポートされる最小 API レベルは 23 です。

SDK の初期化

プロバイダ ID(通常は Google Cloud プロジェクト ID)が必要です。 DriverContext オブジェクトを初期化します。「新規顧客の獲得」目標の設定について詳しくは、 詳細については、以下をご覧ください。 認証と認可

Driver SDK を使用する前に、まずドライバの 説明しますSDK を初期化するには:

  1. NavigationApi から Navigator オブジェクトを取得します。

    NavigationApi.getNavigator(
        this, // Activity
        new NavigationApi.NavigatorListener() {
          @Override
          public void onNavigatorReady(Navigator navigator) {
            // Keep a reference to the Navigator (used to configure and start nav)
            this.navigator = navigator;
          }
        }
    );
    
  2. DriverContext オブジェクトを作成し、必須フィールドに値を入力します。

    DriverContext driverContext = DriverContext.builder(application)
        .setProviderId(providerId)
        .setVehicleId(vehicleId)
        .setAuthTokenFactory(authTokenFactory)
        .setNavigator(navigator)
        .setRoadSnappedLocationProvider(
            NavigationApi.getRoadSnappedLocationProvider(application))
        .build();
    
  3. DriverContext オブジェクトを使用して *DriverApi を初期化します。

    DeliveryDriverApi driverApi = DeliveryDriverApi.createInstance(driverContext);
    
  4. API オブジェクトから DeliveryVehicleReporter を取得します。 (DeliveryVehicleReporterNavigationVehicleReporter を拡張します)。

    DeliveryVehicleReporter vehicleReporter = driverApi.getDeliveryVehicleReporter();
    

AuthTokenFactory による認証

Driver SDK が位置情報の更新データを生成すると、 これらのアップデートを Fleet Engine サーバーと通信しますこれらのリクエストを認証するために、 Driver SDK が呼び出し元が提供する AuthTokenFactory のインスタンス。 ファクトリがロケーションで認証トークンを生成する 指定することもできます。

トークンが正確に生成される方法は、開発者ごとに異なります。 ただし、多くの場合、実装には以下が必要になります。

  • HTTPS サーバーから認証トークン(JSON 形式など)を取得する
  • トークンを解析してキャッシュに保存する
  • トークンが期限切れになったら更新

Fleet Engine サーバーによって予期されるトークンの詳細については、以下をご覧ください。 認可用の JSON Web Token(JWT)を作成する

AuthTokenFactory のスケルトン実装は次のとおりです。

class JsonAuthTokenFactory implements AuthTokenFactory {
  private String vehicleServiceToken;  // initially null
  private long expiryTimeMs = 0;
  private String vehicleId;

  // This method is called on a thread whose only responsibility is to send
  // location updates. Blocking is OK, but just know that no location updates
  // can occur until this method returns.
  @Override
  public String getToken(AuthTokenContext authTokenContext) {
    String vehicleId = requireNonNull(context.getVehicleId());

    if (System.currentTimeMillis() > expiryTimeMs || !vehicleId.equals(this.vehicleId)) {
      // The token has expired, go get a new one.
      fetchNewToken(vehicleId);
    }

    return vehicleServiceToken;
  }

  private void fetchNewToken(String vehicleId) {
    String url = "https://yourauthserver.example/token/" + vehicleId;

    try (Reader r = new InputStreamReader(new URL(url).openStream())) {
      com.google.gson.JsonObject obj
          = com.google.gson.JsonParser.parseReader(r).getAsJsonObject();
      vehicleServiceToken = obj.get("VehicleServiceToken").getAsString();
      expiryTimeMs = obj.get("TokenExpiryMs").getAsLong();

      // The expiry time could be an hour from now, but just to try and avoid
      // passing expired tokens, we subtract 10 minutes from that time.
      expiryTimeMs -= 10 * 60 * 1000;
      this.vehicleId = vehicleId;
    } catch (IOException e) {
      // It's OK to throw exceptions here. The StatusListener you passed to
      // create the DriverContext class will be notified and passed along the failed
      // update warning.
      throw new RuntimeException("Could not get auth token", e);
    }
  }
}

この実装では、組み込みの Java HTTP クライアントを使用して、 JSON 形式のトークンをデベロッパーの認証サーバーから受け取ります。トークンは、 再利用できます。古いトークンが 10 分以内に再取得される 表示されます。

実装によって、バックグラウンド スレッドの使用など、異なる処理が行われる場合があります。 トークンを更新します。

AuthTokenFactory の例外は、発生しない限り一時的なものとして扱われます 繰り返します。何度か試行した後、Driver SDK が エラーが永続的なものと見なされ、アップデートの送信が停止されます。

StatusListener を使用した Status と Error Reporting

Driver SDK は実行時にアクションを実行するため、 特定の状況で通知をトリガーするには、StatusListener を使用します。 発生したイベント(エラー、警告、デバッグ メッセージなど)です。エラーの可能性: 一時的なもの(BACKEND_CONNECTIVITY_ERROR など)であるか、 位置情報の更新が永久に停止する(VEHICLE_NOT_FOUND、 (構成エラーを示します)。

次のように、オプションの StatusListener 実装を指定します。

class MyStatusListener implements StatusListener {
  /** Called when background status is updated, during actions such as location reporting. */
  @Override
  public void updateStatus(
      StatusLevel statusLevel, StatusCode statusCode, String statusMsg) {
    // Status handling stuff goes here.
    // StatusLevel may be DEBUG, INFO, WARNING, or ERROR.
    // StatusCode may be DEFAULT, UNKNOWN_ERROR, VEHICLE_NOT_FOUND,
    // BACKEND_CONNECTIVITY_ERROR, or PERMISSION_DENIED.
  }
}

SSL/TLS に関する注意事項

Driver SDK の実装では、内部的に SSL/TLS を使用して Fleet Engine サーバーと安全に通信します。以前のバージョン (API バージョン 23 または (以前に起動したバージョンなど)と通信するために SecurityProvider パッチが必要になる場合があります。 あります。Android での SSL の使用について詳しくは、以下をご覧ください。 セキュリティ GMS プロバイダ。 この記事には、セキュリティ プロバイダにパッチを適用するためのコードサンプルも掲載されています。

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

*VehicleReporter インスタンスを取得したら、位置情報の更新を有効にします。 明白:

DeliveryVehicleReporter reporter = ...;

reporter.enableLocationTracking();

位置情報の更新データは定期的に送信されます(可能な場合)。各ロケーション [更新] は、車両がオンラインであることも示します。

デフォルトのレポート間隔は 10 秒です。レポートは reporter.setLocationReportingInterval(long, TimeUnit) で間隔を設定します。「 サポートされる最小更新間隔は 5 秒です。より頻繁なアップデートにより、 リクエストとエラーが遅くなります

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

運転手のシフトが終了したら、次の呼び出しによって位置情報の更新を停止できます。 DeliveryVehicleReporter.disableLocationTracking

信頼できるモデルのユースケース

このセクションでは、Driver SDK を使用して一般的なユースケースを実装する方法について説明します。 信頼できるモデルを使用する場合。

車両を作成する

Driver SDK から車両を作成できます。

車両を作成する前に Delivery Driver API を初期化します。 車両 ID は、使用する車両とプロバイダ ID で作成する必要があります Driver SDK の初期化中に行われます。次に、以下の図のように車両を作成します。 使用します。

DeliveryDriverApi api = DeliveryDriverApi.getInstance();
DeliveryVehicleManager vehicleManager = api.getDeliveryVehicleManager();
try {
  DeliveryVehicle vehicle = vehicleManager.createVehicle().get();
  // Handle CreateVehicleRequest DeliveryVehicle response.
} catch (Exception e) {
  // Handle CreateVehicleRequest error.
}

配送集荷タスクを作成する

Driver SDK から配送集荷タスクを作成できます。

タスクを作成する前に、 Delivery Driver API を初期化します。 Driver SDK で指定したプロバイダ ID を使用してタスクを作成する必要があります 初期化します。次に、以下に示すように配送集荷タスクを作成します。 例です。タスク ID の詳細については、タスク ID の例をご覧ください。

static final String TASK_ID = "task-8241890"; // Avoid auto-incrementing IDs.

DeliveryDriverApi api = DeliveryDriverApi.getInstance();
DeliveryTaskManager taskManager = api.getDeliveryTaskManager();
CreateDeliveryTaskRequest request = CreateDeliveryTaskRequest.builder(TASK_ID)
   .setPlannedWaypoint(Waypoint.builder().setLatLng(-6.195139, 106.820826).build())
   .setTaskDurationSeconds(2 * 60)
   .setParentId("my-tracking-id")
   .setTaskType(TaskType.DELIVERY_PICKUP)
   .build();

try {
   DeliveryTask task = taskManager.createTask(request).get();
   // Handle CreateTaskRequest DeliveryTask response.
} catch (Exception e)  {
   // Handle CreateTaskRequest error.
}

配送タスクを作成する

Driver SDK から配送タスクを作成できます。

タスクを作成する前に、 Delivery Driver API を初期化します。 次に、次の例に示すように配送タスクを作成します。 タスク ID の詳細については、以下をご覧ください。 タスク ID の例

static final String TASK_ID = "task-8241890"; // Avoid auto-incrementing IDs.

DeliveryDriverApi api = DeliveryDriverApi.getInstance();
DeliveryTaskManager taskManager = api.getDeliveryTaskManager();
CreateDeliveryTaskRequest request = CreateDeliveryTaskRequest.builder(TASK_ID)
   .setPlannedWaypoint(Waypoint.builder().setLatLng(-6.195139, 106.820826).build())
   .setTaskDurationSeconds(2 * 60)
   .setParentId("my-tracking-id")
   .setTaskType(TaskType.DELIVERY_DELIVERY)
   .build();
try {
   DeliveryTask task = taskManager.createTask(request).get();
   // Handle CreateTaskRequest DeliveryTask response.
} catch (Exception e)  {
   // Handle CreateTaskRequest error.
}

スケジュール設定された利用停止

使用不能であることを示すタスクを作成できます(例: ドライバ 車両の給油など)を Driver SDK から取得します。スケジュール設定された利用停止 タスクにトラッキング ID を含めてはいけません。必要に応じて場所を指定できます。

タスクを作成する前に、 Delivery Driver API を初期化します。 次に、次の例に示すように利用不可タスクを作成します。 タスク ID の詳細については、以下をご覧ください。 タスク ID の例

static final String TASK_ID = "task-8241890"; // Avoid auto-incrementing IDs.

DeliveryDriverApi api = DeliveryDriverApi.getInstance();
DeliveryTaskManager taskManager = api.getDeliveryTaskManager();
CreateDeliveryTaskRequest request = CreateDeliveryTaskRequest.builder(TASK_ID)
   .setTaskDurationSeconds(2 * 60) // Duration or location (or both) must be provided for a BREAK task.
   .setTaskType(TaskType.UNAVAILABLE)
   .build();
try {
   DeliveryTask task = taskManager.createTask(request).get();
   // Handle CreateTaskRequest DeliveryTask response.
} catch (Exception e)  {
   // Handle CreateTaskRequest error.
}

スケジュール設定された停車地

Driver SDK からスケジュール設定された停止タスクを作成できます。スケジュール設定された 追跡 ID が含まれない場合があります。

タスクを作成する前に、 Delivery Driver API を初期化します。 次に、次の例のようにスケジュール設定された停止タスクを作成します。 タスク ID の詳細については、以下をご覧ください。 タスク ID の例

    static final String TASK_ID = "task-8241890"; //  Avoid auto-incrementing IDs.

    DeliveryDriverApi api = DeliveryDriverApi.getInstance();
    DeliveryTaskManager taskManager = api.getDeliveryTaskManager();
    CreateDeliveryTaskRequest request = CreateDeliveryTaskRequest.builder(TASK_ID)
       .setPlannedWaypoint(Waypoint.builder().setLatLng(-6.195139, 106.820826).build())
       .setTaskDurationSeconds(2 * 60)
       .setTaskType(TaskType.DELIVERY_SCHEDULED_STOP)
       .build();
    try {
       DeliveryTask task = taskManager.createTask(request).get();
       // Handle CreateTaskRequest DeliveryTask response.
    } catch (Exception e)  {
       // Handle CreateTaskRequest error.
    }

タスクの順序を更新

車両に割り当てられたタスクの実行順序は、 Driver SDK

タスクの順序を更新すると、割り当てられていなかったタスクも車両に割り当てられます 割り当てられていますまた、以前のタスクに 割り当てられており、更新された順序から除外されます。割り当て 以前に別の車両に割り当てられている場合は、別の車両にタスクを割り当てる エラーが生成されます。新しい車両にタスクを割り当てる前に、 新しいタスクを作成します。

タスクの順序はいつでも変更できます。

車両のタスク注文を更新する前に、車両と Fleet Engine ですでに作成済みです。次に、タスクの順序を更新します。 車両のゾーンを指定します

    DeliveryDriverApi api = DeliveryDriverApi.getInstance();
    DeliveryVehicleReporter reporter = api.getDeliveryVehicleReporter();
    try {
       List<VehicleStop> stops = reporter.setVehicleStops(
         ImmutableList.of(
             VehicleStop.builder()
                 .setVehicleStopState(VehicleStopState.ARRIVED)
                 .setWaypoint(Waypoint.builder().setLatLng(37.1749, 122.412).build())
                 .setTasks(ImmutableList.of(task1)) // Previously created DeliveryTask in Fleet Engine.
                 .build(),
             VehicleStop.builder()
                 .setVehicleStopState(VehicleStopState.NEW) // The current vehicle stop.
                 .setWaypoint(Waypoint.builder().setLatLng(37.7749, 122.4194).build())
                 .setTasks(ImmutableList.of(task2)) // Previously created DeliveryTask in Fleet Engine.
                 .build(),
             VehicleStop.builder()
                 .setVehicleStopState(VehicleStopState.NEW)
                 .setWaypoint(Waypoint.builder().setLatLng(37.3382, 121.8863).build())
                 .setTasks(ImmutableList.of(task3, task4)) // Previously created DeliveryTasks in Fleet Engine.
                 .build())).get();
       // Successfully updated vehicle stops in Fleet Engine. Returns the successfully set VehicleStops.
    } catch (Exception e)  {
       // Failed to update vehicle stops in Fleet Engine. Setting VehicleStops must be attempted again after resolving
       // errors.
    }

例外が発生して、更新の妨げとなる可能性があります。 Driver SDK の内部状態に渡します。その場合は、問題を解決して 呼び出しが成功するまで、setVehicleStops を再度呼び出します。

考えられる問題には次のようなものがあります。

  • 指定された VehicleStops が有効なパターンに従っていない。最初のメッセージのみ VehicleStop は VehicleStopStates の NEW、ENROUTE、ARRRIVED のいずれかの値になる。 現在の停車地より後の VehicleStops は、新しい VehicleStopState でなければなりません。

  • タスクが存在しないか、別の車両のタスクです。

  • 車両が存在しない。

車両は次の駅に向かっています

Fleet Engine は、車両が停車地から出発したときと、 ナビが開始します。Driver SDK から Fleet Engine に通知できます。

車両が停車地から出発したことを Fleet Engine に通知する前に、次の点を確認してください。 作成と設定が完了しました。そのうえで、Fleet Engine に 車両の出発点を返すことができます。

    DeliveryDriverApi api = DeliveryDriverApi.getInstance();
    DeliveryVehicleReporter reporter = api.getDeliveryVehicleReporter();
    reporter.enableLocationTracking(); // Location tracking must be enabled.

    // Create Vehicle, VehicleStops, and DeliveryTasks.
    // Set VehicleStops on Vehicle.

    navigator.setDestination(vehicleStop.getWaypoint());
    try {
       List<VehicleStop> updatedStops = reporter.enrouteToNextStop().get();
       // Successfully updated vehicle stops in Fleet Engine. Returns the set VehicleStops, with the first
       // VehicleStop updated to ENROUTE state.
    } catch (Exception e)  {
       // Failed to update vehicle stops in Fleet Engine. Updating VehicleStops must be attempted again
       // after resolving errors.
    }

Driver SDK のアップデートの妨げとなる可能性のある例外が発生する可能性があります。 内部状態を維持できます。その場合は、問題を解決してから電話で連絡してください。 成功するまで enrouteToNextStop を繰り返します。

考えられる問題には次のようなものがあります。

  • Driver SDK で残りの VehicleStops は設定されません。

車両が停車地に到着する

車両が停車地に到着したときに Fleet Engine に通知する必要があります。Google Chat では Driver SDK から Fleet Engine に通知します。

車両が停車地に到着したことを Fleet Engine に通知する前に、 設定されていることを示します。車両の到着を Fleet Engine に通知する 駅の停留所で停留所で停車する例を以下に示します。

DeliveryDriverApi api = DeliveryDriverApi.getInstance();
DeliveryVehicleReporter reporter = api.getDeliveryVehicleReporter();
reporter.enableLocationTracking(); // Location tracking must be enabled.

// Create Vehicle, VehicleStops, and DeliveryTasks.
// Set VehicleStops on Vehicle.
// Mark ENROUTE to VehicleStop and start guidance using Navigator.

try {
   List<VehicleStop> updatedStopsArrived = reporter.arrivedAtStop().get();
   // Successfully updated vehicle stops in Fleet Engine. Returns the set VehicleStops, with the first
   // VehicleStop updated to ARRIVED state.
   navigator.clearDestinations();
} catch (Exception e)  {
   // Failed to update vehicle stops in Fleet Engine. Updating VehicleStops must be attempted again
   // after resolving errors.
}

Driver SDK の内部のアップデートを妨げる可能性がある例外が発生する state.その場合は、問題を解決してから arrivedAtStop を再度呼び出してください 成功するまで継続します。

次のような問題が考えられます。

  • Driver SDK で残りの VehicleStops は設定されません。

車両が停車を完了

車両の停止が完了したら、Fleet Engine に通知する必要があります。この通知 停止に関連するすべてのタスクが CLOSED 状態になります。Google Chat では Driver SDK から Fleet Engine に通知します。

以下に示すように、車両が VehicleStop を完了したことを Fleet Engine に通知する 見てみましょう。

    DeliveryDriverApi api = DeliveryDriverApi.getInstance();
    DeliveryVehicleReporter reporter = api.getDeliveryVehicleReporter();
    reporter.enableLocationTracking(); // Location tracking must be enabled.

    // After completing the tasks at the VehicleStop, remove it from the
    // the current list of VehicleStops.

    try {
       List<VehicleStop> updatedStopsCompleted = reporter.completedStop().get();
       // Successfully updated vehicle stops in Fleet Engine. All tasks on the completed stop are set to CLOSED.
       // Returns the set VehicleStops, with the completed VehicleStop removed from the remaining list.
    } catch (Exception e)  {
       // Failed to update vehicle stops in Fleet Engine. Updating VehicleStops must be attempted again
       // after resolving errors.
    }

Driver SDK の内部のアップデートを妨げる可能性がある例外が発生する state.その場合は、問題を解決してから completedStop を再度呼び出してください 成功するまで継続します。

考えられる問題には次のようなものがあります。

  • Driver SDK で残りの VehicleStops は設定されません。

タスクを閉じる

車両に割り当てられているタスクを閉じるには、Fleet Engine に通知してください タスクが行われる場所の停車地を完了したかどうか または停車地のリストから削除することもできます。これを行うには、 残りの車両は 車両のタスクの順序を更新する

タスクにまだ車両が割り当てられておらず、終了する必要がある場合は、 終了状態にします。ただし、CLOSED タスクを再度開くことはできません。

タスクを閉じても、成功または失敗を意味するわけではありません。タスクが 処理中とは見なされなくなります配送状況を追跡するには、 タスクの実際の結果を示し、デリバリーの結果を示すことができます。

Driver SDK を使用するには、タスクを車両に割り当てる必要があります タスクを閉じます。車両に割り当てられているタスクを終了するには、 Fleet Engine: タスクが行われる場所で車両が停車を完了したこと。

または、車両のタスクの順序を更新してください タスクの割り当て先を確認し、リストから 停止します。

タスクの結果と結果のロケーションを設定する

タスクを閉じても、成功か失敗かはわかりません。タスクが 処理中とは見なされなくなります配送状況を追跡するには タスクの実際の結果を示し、デリバリーの結果を示すことができるため、 サービスに対する適切な請求が行われていることを 確認します一度設定すると、 決定できます。ただし、タスクの結果の時間とタスクの結果の場所は変更できます 有効にする必要があります

「終了」状態のタスクでは、結果を次のいずれかに設定できます。 SUCCEEDED または FAILED です。Fleet Engine は、ステータスが 成功。

タスクの結果をマークすると、Fleet Engine は自動的に 最後に認識された車両の位置情報を使用して、タスクの結果の場所を指定します。オーバーライドできます できます。

次の例は、Driver SDK を使用してタスクの結果を設定する方法を示しています。 タイムスタンプが含まれます。Driver SDK を使用してタスクの結果の場所を設定することはできません。

    static final String TASK_ID = "task-8241890";

    DeliveryDriverApi api = DeliveryDriverApi.getInstance();
    DeliveryTaskManager taskManager = api.getDeliveryTaskManager();

    // Updating an existing DeliveryTask which is already CLOSED. Manually
    // setting TaskOutcomeLocation with Driver SDK is not supported at this time.
    UpdateDeliveryTaskRequest req = UpdateDeliveryTaskRequest.builder(TASK_ID)
        .setTaskOutcome(TaskOutcome.SUCCEEDED)
        .setTaskOutcomeTimestamp(now()) // Timestamp in milliseconds.
        .build();

    try {
       DeliveryTask updatedTask = taskManager.updateTask(req);
       // Handle UpdateTaskRequest DeliveryTask response.
    } catch (Exception e)  {
       // Handle UpdateTaskRequest error.
    }

車両を検索する

Driver SDK から車両を検索できます。車を調べる前に 必ず、 Delivery Driver API を初期化します。 次の例のように、車両を検索できます。

    DeliveryDriverApi api = DeliveryDriverApi.getInstance();
    DeliveryVehicleManager vehicleManager = api.getDeliveryVehicleManager();
    try {
       DeliveryVehicle vehicle = vehicleManager.getVehicle().get();
       // Handle GetVehicleRequest DeliveryVehicle response.
    } catch (Exception e)  {
       // Handle GetVehicleRequest error.
    }

DeliveryVehicleManagerDeliveryVehicle のみを参照できます。 (Delivery Driver API の初期化時に指定された車両 ID のみ)。