我正在尝试使用retrofit从api中检索数据。我要使用的请求需要一个访问令牌来传递报头。问题是令牌在10分钟后过期,刷新令牌请求需要一个未过期的令牌来创建一个新的令牌!那么我应该怎么做才能让令牌在超过10分钟之前自己刷新呢?我已经尝试过Interceptor,但它不能处理这种类型的问题,因为我需要一个有效的令牌来获取新的令牌
发布于 2020-12-10 00:38:27
您可以使用Worker
并将其设置为每30分钟左右运行一次,然后将其设置为在SharedPreference
中保存更新后的令牌
下面是Worker
的一个示例
class UpdateTokenWorkManger(
val context: Context,
params: WorkerParameters) : Worker(context, params) {
override fun doWork(): Result {
LoginHandler.refreshTokenSilently()
// Indicate whether the work finished successfully with the Result
return Result.success()
}
companion object {
private const val TAG = "Token Refresh "
const val TOKEN_REFRESH_WORK_MANGER_ID = "automatic_renew_token_work_manger"
fun renewToken() {
val periodicRefreshRequest = PeriodicWorkRequest.Builder(
UpdateTokenWorkManger::class.java, // Your worker class
30, // repeating interval
TimeUnit.MINUTES
)
val periodicWorkRequest: PeriodicWorkRequest = periodicRefreshRequest
.build()
WorkManager.getInstance(App.getApplication()).enqueueUniquePeriodicWork(
TOKEN_REFRESH_WORK_MANGER_ID,
ExistingPeriodicWorkPolicy.REPLACE,
periodicWorkRequest
)
}
}
要使用此组件,您需要以下依赖项
implementation "androidx.work:work-runtime-ktx:2.4.0"
还要注意,LoginHandler
是应该负责处理登录、刷新和注销场景的类。
不要忘了在登录Activity
之后的第一个函数中添加这一行,例如:如果您登录到SplashActivity
,并且在成功验证之后重定向到MainActivity
,那么这一行应该在MainActivity's
onCreate
Activity
中
UpdateTokenWorkManger.renewToken()
https://stackoverflow.com/questions/65220833
复制相似问题