コンシューマ SDK エラーの処理

Consumer SDK がコールバック メカニズムを使用して、ルートの更新エラーをユーザーアプリに送信します。コールバック パラメータは、プラットフォーム固有の戻り値の型(Android では TripUpdateError、iOS では NSError)です。

ステータス コードを抽出する

通常、コールバックに渡されるエラーは gRPC エラーであり、ステータス コードの形式で追加情報を抽出することもできます。ステータス コードの完全なリストについては、gRPC でのステータス コードとその使用をご覧ください。

Java

エラーの詳細を示す gRPC ステータス コードは、onTripUpdateError() から返された TripUpdateError から抽出できます。

// Called when there is a trip update error.
@Override
public void onTripUpdateError(TripInfo tripInfo, TripUpdateError error) {
  Status.Code code = error.getStatusCode();
}

Kotlin

エラーの詳細を示す gRPC ステータス コードは、onTripUpdateError() から返された TripUpdateError から抽出できます。

// Called when there is a trip update error.
override fun onTripUpdateError(tripInfo: TripInfo, error: TripUpdateError) {
  val code = error.getStatusCode()
}

Swift

NSErrortripModel(_:didFailUpdateTripWithError:) でコールバックされます。

// Called when there is a trip update error.
func tripModel(_ tripModel: GMTCTripModel, didFailUpdateTripWithError error: Error?) {
  // Check to see if the error comes from gRPC.
  if let error = error as NSError?, error.domain == "io.grpc" {
    let gRPCErrorCode = error.code
    ...
  }
}

Objective-C

NSErrortripModel:didFailUpdateTripWithError: でコールバックされます。

// Called when there is a trip update error.
- (void)tripModel:(GMTCTripModel *)tripModel didFailUpdateTripWithError:(NSError *)error {
  // Check to see if the error comes from gRPC.
  if ([error.domain isEqualToString:@"io.grpc"]) {
    NSInteger gRPCErrorCode = error.code;
    ...
  }
}

ステータス コードを解釈する

ステータス コードは、サーバーおよびネットワーク関連のエラーとクライアントサイドのエラーの 2 種類のエラーに対応します。

サーバー エラーとネットワーク エラー

次のステータス コードは、ネットワーク エラーまたはサーバー エラーを示すものであり、解決のために何もする必要はありません。Consumer SDK はそこから自動的に復元します。

Status Code説明
ABORTED サーバーがレスポンスの送信を停止しました。通常、この問題はサーバーの問題が原因で発生します。
CANCELLED サーバーが送信レスポンスを終了しました。これは通常、
アプリがバックグラウンドに送信されたとき、または
コンシューマ アプリに状態が変化したときに発生します。
INTERRUPTED
DEADLINE_EXCEEDED サーバーの応答に時間がかかりすぎました。
UNAVAILABLE サーバーにアクセスできませんでした。これは通常、ネットワークの問題が原因です。

クライアントエラー

次のステータス コードはクライアント エラーを示します。解決するにはアクションを実行する必要があります。Consumer SDK は経路の共有を終了するまでルートの更新の再試行を繰り返しますが、ユーザーが対処しない限り復元はされません。

Status Code説明
INVALID_ARGUMENT ユーザー アプリで指定したルート名が無効です。ルート名は providers/{provider_id}/trips/{trip_id} の形式で指定してください。
NOT_FOUND ルートが作成されない。
PERMISSION_DENIED ユーザー アプリに十分な権限がありません。このエラーは、次の場合に発生します。
  • ユーザー アプリに権限がない
  • Google Cloud コンソールでプロジェクトに対して Consumer SDK が有効になっていない。
  • JWT トークンがないか、無効です。
  • JWT トークンが、リクエストされたルートと一致しないルート ID で署名されています。
RESOURCE_EXHAUSTED リソースの割り当てがゼロであるか、トラフィック フローのレートが速度制限を超えています。
UNAUTHENTICATED JWT トークンが無効なため、リクエストが認証に失敗しました。このエラーは、JWT トークンが旅行 ID なしで署名されている場合、または JWT トークンの有効期限が切れている場合に発生します。