Я создаю приложение с помощью Retrofit, Dagger и т. Д. И использую Authenticator для обновления токена. Я установил время истечения токена на 1 минуту, чтобы посмотреть, запущен ли Аутентификатор и нет.
Ниже моя реализация Authenticator
public class TokenAuthenticator implements Authenticator {
private ServiceManagerHolder serviceHolder;
@Inject
public TokenAuthenticator(@NonNull ServiceManagerHolder serviceHolder) {
this.serviceHolder=serviceHolder;
}
@Nullable
@Override
public Request authenticate(Route route, Response response) throws IOException {
if(serviceHolder.serviceManager() ==null)
{
return null;
}
if(response.code()==401) {
Request request = response.request();
serviceHolder.serviceManager().refreshAccessToken(GRANT_TYPE_REFRESH,
KikoConstants.AUTH_TOKEN_TIMEOUT, ANDROID_CLIENT_ID,
CLIENT_SECRET,
REFRESH_TOKEN)
.enqueue(new Callback<GetTokenResponse>() {
@Override
public void onResponse(Call<GetTokenResponse> call, retrofit2.Response<GetTokenResponse> response) {
Log.e("Authenticator refreshing token :::", "In progress");
//code to save the token
request.newBuilder().header("Authorization", "Bearer " + newAccessToken);
}
@Override
public void onFailure(Call<GetTokenResponse> call, Throwable t) {
Log.e("Error refreshing token",t.getMessage());
}
});
return response.request();
}else
{
return response.request();
}
}
}
Владелец сервиса - это ссылка на класс реализации веб-сервисов
Есть идеи, что я делаю не так?