处理使用方 SDK 错误
使用方 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
系统会在 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;
...
}
}
解释状态代码
状态代码涵盖两种错误:服务器和网络相关错误,以及客户端错误。
服务器和网络连接错误
以下状态代码针对的是网络错误或服务器错误,您无需采取任何措施来解决这些问题。使用方 SDK 会自动从中恢复。
状态代码 | 说明 |
---|---|
ABORTED | 服务器已停止发送响应。这通常是由服务器问题导致的。 |
CANCELLED | 服务器终止了外发响应。这通常在以下情况下发生: 应用被发送到后台,或消费者应用的 状态发生变化。 |
INTERRUPTED | |
DEADLINE_EXCEEDED | 服务器响应时间过长。 |
UNAVAILABLE | 服务器不可用。这通常是由网络问题导致的。 |
客户端错误
以下状态代码针对的是客户端错误,您必须采取措施来解决这些问题。消费者 SDK 会继续重新尝试刷新行程,直到您结束行程分享,但只有在您采取行动后才会恢复。
状态代码 | 说明 |
---|---|
INVALID_ARGUMENT | 消费者应用指定的行程名称无效;行程名称必须遵循格式 providers/{provider_id}/trips/{trip_id} 。
|
NOT_FOUND | 此行程从未创建。 |
PERMISSION_DENIED | 消费者应用的权限不足。出现此错误的情况包括:
|
RESOURCE_EXHAUSTED | 资源配额为零,或者流量速率超过速度限制。 |
UNAUTHENTICATED | 由于 JWT 令牌无效,请求未通过身份验证。如果 JWT 令牌签名时没有行程 ID,或者 JWT 令牌已过期,就会发生此错误。 |