提问人:Bingotop 提问时间:11/8/2023 更新时间:11/8/2023 访问量:22
在 Android Kotlin 中处理并发 API 调用的刷新令牌同步(Retrofit,AsyncHttpClient)
Handling Refresh Token Synchronization for Concurrent API Calls in Android Kotlin(Retrofit,AsyncHttpClient)
问:
我正在使用同时使用 Retrofit 和 AsyncHttpClient 库的 Android 应用程序。我遇到的情况是,即使从服务器收到 200 OK 响应,我也需要处理令牌过期情况。我的目标是在不使用 Retrofit 的 Interceptor 或 Authenticator 的情况下将相同的令牌管理逻辑应用于两个库。
挑战在于,即使令牌已过期,服务器也会以 HTTP 状态代码 200 进行响应,我需要将其视为错误。目前,我已经为 Retrofit 和 AsyncHttpClient 实现了单独的令牌过期处理逻辑,但我想使用一个通用逻辑来管理它。
我的问题如下:
如何在 AsyncHttpClient 的 onSuccess 中检测令牌过期情况?(当令牌过期时,服务器返回包含 “error_code”: “TOKEN_EXPIRED” 的 JSON 响应。 如何实现一个通用逻辑,在每次请求 Retrofit 和 AsyncHttpClient 之前检查令牌过期,并在必要时刷新令牌?
其他信息: 服务器响应示例:{“error_code”: “TOKEN_EXPIRED”, “message”: “令牌已过期。 状态代码为 200(不是 401 或 407)
此外,我的应用程序中还面临着一个挑战,即几乎同时发出多个 API 请求。当访问令牌过期时,会出现此问题,我需要集中管理所有这些并发请求的令牌刷新逻辑。
如何检测令牌过期、暂停所有并发请求、使用刷新令牌刷新令牌,然后继续暂停请求? 是否有一种模式或方法允许暂停的请求在刷新令牌后自动恢复? 如果所有重试都失败,您能否提供使用 EventBus 通知 UI 的示例? 我正在寻找一个可以有效管理此过程的通用逻辑或类。我将不胜感激有关可以帮助解决此方案的最佳实践、模式或库的任何建议。
我已经在我的应用程序中实现了重试逻辑;但是,在刷新和更新令牌后,我遇到了其他 API 调用仍尝试使用以前过期的访问令牌的情况,从而导致令牌过期问题反复出现。我将不胜感激在解决这个问题方面的任何帮助。
答: 暂无答案
评论