处理使用方 SDK 错误

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

解读状态代码

状态代码涵盖两种错误:与服务器和网络相关的错误,以及客户端错误。

服务器和网络错误

以下状态代码表示网络或服务器错误,您无需采取任何措施来解决这些错误。Consumer SDK 会自动从这些映像进行恢复。

状态代码说明
ABORTED 服务器停止发送响应。这通常是由服务器问题导致的。
CANCELLED 服务器终止了传出响应。这通常发生在
应用被发送到后台,或
Consumer 应用状态发生变化时。
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 资源配额为零,或者流量速率超过速度限制。
UNAUTHENTICATED 由于 JWT 令牌无效,请求的身份验证失败。如果对 JWT 令牌签名时没有行程 ID,或者 JWT 令牌已过期,就会出现此错误。