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

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

ステータス コードの抽出

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

Java

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

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

Kotlin

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

// 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 トークンの有効期限が切れている場合に発生します。