Docs 菜单
Docs 主页
/ /
Atlas Device SDKs
/ /

处理应用错误 - Kotlin SDK

在此页面上

  • 服务错误
  • 连接错误
  • 错误请求错误
  • 身份验证错误
  • 例子

应用错误分为两大类:

  • 当Atlas App Services请求在HTTP级别失败时,会出现服务错误。 这些错误会生成 ServiceException

  • Device Sync失败时会出现同步错误。 这些错误会生成SyncException 。 有关同步异常的更多信息,请参阅处理同步错误。

但是,有些错误是短暂的:发生这些错误的原因是客户端或 SDK 无法控制。 例如,由于网络错误而导致登录尝试失败。

其他错误需要逻辑修复。 例如,由于凭证不正确而导致登录尝试失败。

发生暂时错误时,应重试导致错误的操作。 如果重试时操作仍然失败,请调查逻辑修复。

当 Atlas App Services 请求在 HTTP 级别失败(即 HTTP 请求返回,但 HTTP 状态代码不是200 (正常))时,会出现ServiceException

当 SDK 和App Services后端之间的HTTP通信失败时,会发生ConnectionException 。 HTTP请求无法接收状态代码。

由于这些错误源自 SDK 控制之外的网络层,因此您应将这些错误视为暂时错误。 重试该操作,如果重试失败,请调查错误。 如果操作因客户端设备离线而失败,您可以要求应用用户在重新连接到互联网时重试操作。

BadRequestException是由格式错误的App Services requests引发的。

当收到错误请求错误时:

  • 检查操作的输入。

  • 检查应用日志以获取有关Go的更多信息。

当用户帐户操作(例如登录、注销或注册)失败时,会发生AuthException 。 通常,您会得到更具体的子类型,帮助您识别解决方案。

当您尝试 确认 已确认的用户时,会出现 UserAlreadyConfirmedException 。

当收到用户已确认错误时,最好不要中断应用程序流程。 由于用户已确认,您可以安全地继续登录。 无需重试确认。

当App Services后端找不到具有所提供用户名的用户时,会发生UserNotFoundException 。 这通常是由电子邮件/密码用户名中的错别字引起的。

遇到此错误时,请提示用户重新输入用户名,然后重试。

当客户端尝试使用已在该应用程序中使用的用户名注册用户时,会发生UserAlreadyExistsException

遇到此错误时,请提示用户:

  • 使用不同的用户名

  • 如果已有帐户,请使用现有用户名登录

当JSON web token 、电子邮件/密码或API 密钥用户登录由于凭证无效而失败时,会发生 InvalidCredentialsException 。其他身份验证提供程序会抛出身份验证错误

您可以使用 Kotlin 的内置 runCatching 来处理SDK 中的错误 API。使用返回 结果 的onSuccess 和 回调onFailure 处理成功的 SDK API调用和错误情况。以下示例将匿名用户登录到应用程序中。如果登录尝试成功,我们将日志成功的身份验证尝试并将用户转换到另一个屏幕。如果登录尝试失败,我们将单独处理每个潜在的错误情况:

  • 如果用户提供的凭证无效,我们会记录该尝试并显示一个弹出式 Toast,鼓励用户检查其凭证。

  • 如果网络连接出现问题,我们会将问题记录到错误日志中,并显示一个弹出式 Toast,鼓励用户检查网络连接并重试。

  • 对于所有其他错误,我们会将问题记录到错误日志中,并显示一个弹出式 Toast,通知用户登录尝试失败。

val app = App.create(YOUR_APP_ID)
runCatching {
app.login(Credentials.emailPassword(email, password))
}.onSuccess {
Log.v("Successfully logged in")
// transition to another activity, load a fragment, to display logged-in user information here
}.onFailure { ex: Throwable ->
when (ex) {
is InvalidCredentialsException -> {
Log.v("Failed to login due to invalid credentials: ${ex.message}")
Toast.makeText(baseContext,
"Invalid username or password. Please try again.", Toast.LENGTH_LONG).show()
}
is ConnectionException -> {
Log.e("Failed to login due to a connection error: ${ex.message}")
Toast.makeText(baseContext,
"Login failed due to a connection error. Check your network connection and try again.", Toast.LENGTH_LONG).show()
}
else -> {
Log.e("Failed to login: ${ex.message}")
// generic error message for niche and unknown fail cases
Toast.makeText(baseContext,
"Login failed. Please try again.", Toast.LENGTH_LONG).show()
}
}
}

后退

调用 Atlas Function