處理消費者 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 權杖過期時,就會發生這個錯誤。