Я делал подобные вещи на работе. По сути, мы отобразили исключение SDK в наш внутренний класс AuthenticationException, каждый тип будет иметь свое собственное сообщение. Ниже приведен пример кода в котлине.
private fun toAuthError(exception: Exception): AuthenticationError {
return when(exception) {
is UserNotFoundException -> AuthenticationError.UserNotFound()
is InvalidParameterException -> AuthenticationError.InvalidParameter()
is NotAuthorizedException -> AuthenticationError.UserNotFound()
is InvalidPasswordException -> AuthenticationError.InvalidPassword()
is InvalidLambdaResponseException -> AuthenticationError.InvalidResponse()
is LimitExceededException -> AuthenticationError.LimitExceeded()
is UsernameExistsException -> AuthenticationError.UsernameExists()
is UserNotConfirmedException -> AuthenticationError.UserNotConfirmed()
is CodeMismatchException -> AuthenticationError.VerificationCodeMismatch()
is ExpiredCodeException -> AuthenticationError.VerificationCodeExpired()
else -> AuthenticationError.UnknownError()
}
}
Обратите внимание, что указанный выше метод вызывается во время onFailure
в познании AuthenticationHandler
обратного вызова.
val authenticationHandler = object : AuthenticationHandler {
...
override fun onFailure(exception: Exception) {
Timber.e("login Failure $exception")
subscriber.onError(toAuthError(exception))
}
}