具有多个异步 API 调用的 Okhttp 验证器

ant*_*icg 6 authentication android token retrofit okhttp

我面临着一个实施了令牌刷新系统的 API。我正在使用RetrofitAPI 请求,并设置了一个Authenticator来检测何时Error 401给出一个并发出新请求来刷新令牌。

问题是,如果应用程序同时有多个请求(例如,在用户使用应用程序时填充一个ViewPager或一个 API 请求中的 多个页面Service并导致另一个 API 请求),则 API 会响应 401多次,因此,应用程序会Authenticator多次请求。

你如何解决这个问题?我正在考虑使用 aSingletonboolean检测应用程序是否正在执行令牌刷新调用,但在我看来这并不是实现它的最佳方法。

Krz*_*cki 0

我想说Singleton这是一个好主意,但Singleton我的意思是在 api 客户端对象内有一个凭证对象 - 它将是对象范围内的单例,而不是整个应用程序范围。你建议做类似于这个答案的事情

我会引入新对象用作 semafore - 每次“刷新凭据”时它都会被阻止。为了确保您只进行一次“刷新凭据”调用,您需要在与对象同步的代码块中调用它。