OkHttp Authenticator иногда не вызывает аутентификацию с несколькими экземплярами Retrofit

У меня два разных Retrofit экземпляры для двух разных API. У меня тоже есть два разных OkHttp3 клиенты, но они разделяют одно и то же Authenticator потому что токен аутентификации одинаков для обоих API.

Проблема в том, что когда срок действия токена истекает, иногда (но почти всегда) один из Retrofit/OkHttpClient объекты не будут вызывать Authenticator"s authenticate метод по HTTP 401. Он с радостью выполнит вызовы API, и все закончится 401, а аутентификатор полностью игнорируется. В этом случае, когда второй Retrofit делает вызов API, он получит 401 и authenticate вызывается, токен обновляется, и все возвращается в нормальное состояние. В том числе второй Retrofit API, который сбивал все вызовы с 401.

Более серьезная проблема заключается в том, что такое поведение является случайным, но сбой составляет более половины срока действия токенов. Мы попробовали два Retrofit экземпляры с одним общим OkHttp3 клиент, то два OkHttp3 клиенты с общими перехватчиками и аутентификаторами и, наконец, также не разделяемые перехватчики и аутентификаторы. И даже в последнем случае, когда все имеет собственный экземпляр, аутентификация не вызывается при некоторых ошибках 401.

InterceptorS, они вводят старый токен в заголовки, просто Authenticator"s authenticate метод вызывается не при каждой ошибке HTTP 401.

При прохождении через отладчик этого никогда не происходит, и аутентификация всегда вызывается. Это похоже на многопоточность для меня. Мгновенный запуск отключен в Android Studio. Работает на реальном устройстве с Android 6.

РЕДАКТИРОВАТЬ: OkHttp 3.10.0, Retrofit 2.4.0, Android компилировать SDK 27 и инструменты сборки 28.0.1

0 ответов

Другие вопросы по тегам