앱 예외
App Services 및 Device Sync 사용과 관련된 모든 예외에 대한 최상위 클래스입니다.
이 클래스의 하위 클래스는 크게 ServiceException 및 SyncException 의 두 가지 범주로 나뉩니다.
HTTP 요청을 통해 App Services와 직접 통신하는 모든 API에서 ServiceException 이 발생합니다. io.realm.kotlin.mongodb.App, io.realm.kotlin.mongodb.User 및 io.realm.kotlin.mongodb.auth.EmailPasswordAuth 클래스는 SDK에 대한 HTTP 요청을 처리합니다.
SyncException 은 Realm Mobile Sync API를 사용할 때 발생하는 오류, 즉 io.realm.kotlin.MongoDB.SyncConfiguration을 사용하여 열린 영역으로 인해 발생합니다. 이러한 오류는 io.realm.kotlin.mongodb.SyncConfiguration.Builder.errorHandler를 통해 전파됩니다.
이러한 각 카테고리는 다음과 같이 더 나뉩니다.
계층 구조의 맨 아래에 있는 예외는 실행 가능 하며, 즉 예외를 해결하기 위해 어떤 조치를 취할 수 있는지 명확해야 합니다.
계층 구조의 상위 단계에 있는 예외는 오류를 분류합니다. 앱의 최종 사용자가 이해할 수 있는 단일 방식으로 대응하기가 더 어려울 수 있지만 나중에 검사를 위해 기록해야 합니다.
대부분의 경우 계층 구조의 맨 아래에 있는 예외만 API 문서에 문서화되며, 주목할 만한 특별한 경우 ConnectionException 이 한 가지 있습니다. 이 예외는 ServiceException 을 언급하고 모든 전송 오류를 다루는 모든 메서드에서 발생하는 것으로 가정합니다. 이러한 오류는 간헐적으로 발생하는 경우가 많으므로 이 예외를 포착하고 다시 시도하는 것은 일반적으로 안전하지만, 자세한 내용은 ConnectionException 설명서에서 확인할 수 있습니다.
위의 예외 계층 구조를 염두에 두고 오류를 처리하는 합리적인 방법은 다음과 같습니다.
val app = App.with("my-app-id")
runCatching {
app.login(Credentials.emailPassword("myemail@mail.com", "mypassword"))
}.onSuccess {
gotoMainScreen()
}.onFailure { ex: Throwable ->
when(ex) {
is InvalidCredentialsException -> {
showWrongPasswordDialog()
}
is ConnectionException -> {
CrashLogger.log(ex.toString())
showRetryLoginDialog()
}
else -> {
CrashLogger.log(ex.toString())
showContactAdministratorDialog()
}
}
}
특정 예외에 대한 자세한 내용은 해당 예외에 대한 설명서를 참조하세요.