處理消費者 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 | 消費者應用程式權限不足。發生以下狀況時會出現這個錯誤:
|
RESOURCE_EXHAUSTED | 資源配額為零,或流量速率超出速限。 |
未驗證 | JWT 權杖無效,導致要求驗證失敗。如果簽署 JWT 權杖時沒有行程 ID,或是 JWT 權杖已過期,就會發生這個錯誤。 |