В основном у меня есть приложение, которое подключается к REST API.API предоставляет токен обновления при аутентификации (токен обновления доступен 1 месяц).После аутентификации вы можете запросить токен доступа, действительный около 1 часа.
Приложение для Android использует компонент архитектуры Navigation (в основном у меня одно действие на хосте, и все представления являются фрагментами) и модернизация 2.
Чтобы обновить токен доступа, я реализовал собственный Authenticator, предоставленный okhttp3,Вот как это выглядит:
override fun authenticate(route: Route?, response: Response): Request? {
if( response.code() == 401) {
val userData = UserData(context)
val userService = UserService(context)
val exchangeCall = userService.exchangeToken(Token(userData.refreshToken)).execute()
if (exchangeCall.code() == 201) {
return response.request().newBuilder()
.addHeader("Authorization", exchangeCall.body()!!.token)
.build()
} else {
// user should authenticate again
return null
}
} else {
return null
}
}
Вопрос теперь в том, как мне поступить, когда токен обновления истекает глобально?Я хотел бы избежать использования сильных ссылок и обработки индивидуальных ответов в каждом запросе.