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