處理消費者 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

系統會在 tripModel(_:didFailUpdateTripWithError:) 中回呼 NSError

// 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

系統會在 tripModel:didFailUpdateTripWithError: 中回呼 NSError

// 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;
    ...
  }
}

解讀狀態碼

狀態碼涵蓋兩種錯誤:伺服器和網路相關錯誤,以及用戶端錯誤。

伺服器和網路錯誤

下列狀態碼適用於網路或伺服器錯誤,您不需要採取任何行動來解決這些錯誤。Consumer SDK 會自動從中復原。

狀態碼說明
ABORTED 伺服器已停止傳送回應。這通常是伺服器問題所致。
CANCELLED 伺服器已終止傳出回應。一般來說,如果
應用程式傳送至背景,或
消費者應用程式的狀態變更,就會發生這種情形。
INTERRUPTED
DEADLINE_EXCEEDED 伺服器回應的時間過長。
UNAVAILABLE 伺服器無法使用。這種狀況通常是網路問題所造成。

用戶端錯誤

下列狀態碼適用於用戶端錯誤,您必須採取行動才能解決。Consumer SDK 會持續重試行程,直到分享歷程結束為止,但在您完成分享作業後才會復原。

狀態碼說明
INVALID_ARGUMENT 消費者應用程式指定的行程名稱無效;行程名稱必須採用以下格式:providers/{provider_id}/trips/{trip_id}
NOT_FOUND 這個行程從未建立。
PERMISSION_DENIED 消費者應用程式權限不足。發生以下狀況時會出現這個錯誤:
  • 消費者應用程式沒有權限
  • 專案未啟用 Google Cloud 控制台中的 Consumer SDK。
  • 缺少 JWT 權杖或權杖無效。
  • 簽署 JWT 權杖使用的行程 ID 與要求的行程不符。
RESOURCE_EXHAUSTED 資源配額為零,或流量速率超出速限。
未驗證 JWT 權杖無效,導致要求驗證失敗。如果簽署 JWT 權杖時沒有行程 ID,或是 JWT 權杖已過期,就會發生這個錯誤。