OkHttp Authenticator иногда не вызывает аутентификацию по HTTP 401 - PullRequest
0 голосов
/ 16 октября 2018

У меня проблема с тем, что OkHttp Authenticator не вызывает метод authenticate в некоторых случаях ошибок HTTP 401.Перехватчики всегда вызываются, но иногда вызывается аутентификатор, а иногда нет.Если он не вызывает его, он не будет вызывать его в течение нескольких минут, и все сетевые вызовы завершатся неудачно с HTTP 401. Затем через 5-6 минут он "отклеится" и снова вызовет метод authenticate.

Я использую его для обновления токена.Если срок действия токена установлен на один час, проблем нет, но когда мы устанавливаем срок действия на одну минуту (для тестирования), аутентификатор перестает работать.

При быстром пошаговом выполнении кода в отладчике authenticate метод введен, но событие его первая строка не выполняется, он просто выходит из метода.У меня есть журнал как самая первая строка, которая не печатается.Я пробовал как synchronised доступ и не синхронизированы.Аутентификатор написан на Kotlin.

Это продолжение проблемы, описанной в другом SO вопросе .Я обнаружил, что он даже не работает с одним экземпляром Retrofit с одним клиентом OkHttp, поэтому я создал новый вопрос.

Это происходит с OkHttp 3.10.0 / 3.11.0,Модификация 2.4.0, Android-компиляция SDK 27 и инструменты сборки 28.0.1.На реальных устройствах с Android 6 и 8.1 сборка отладки и выпуска, таким образом, выглядит так:

РЕДАКТИРОВАТЬ:

После дополнительной отладки я обнаружил, чтоАутентификатор работает безупречно с OkHttp 3.9.1 + Retrofit 2.3.0.Все, что новее, не будет работать для частых ошибок HTTP 401.Использование OkHttp 3.10.0 или новее с Retrofit 2.3.0 не работает, а также Retrofit 2.4.0 с OkHttp 3.9.1 не работает.Также не работают другие комбинации более новых OkHttp + Retrofit.

Еще одна дополнительная информация - я использую адаптер RxJava2 для Retrofit 2 (com.squareup.retrofit2:adapter-rxjava2), всегда ту же версию, что и библиотека Retrofit.Я использую RxJava2 2.1.9, и я только что попробовал последнюю версию 2.2.2, все еще не работающую, за исключением старой комбинации OkHttp + Retrofit.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...