有没有一种方法可以使用改造来使用计时器刷新令牌?
Is there a method to refresh token with timer using retrofit?
我正在尝试使用改装从 api 中检索数据。将要使用的请求需要一个访问令牌才能传入 header。问题是令牌在 10 分钟后过期,刷新令牌请求需要一个未过期的令牌来创建一个新令牌!
那么我应该怎么做才能在 10 分钟之前让令牌自行刷新?
我已经尝试过拦截器,但它无法解决此类问题,因为我需要一个有效的令牌才能获得新的令牌
您可以使用 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
是 class,它应该负责处理您的登录、刷新和注销场景。
并且不要忘记在登录 Activity
后将此行添加到您的第一个 Activity
,例如:如果您登录 SplashActivity
并在成功验证后重定向到MainActivity
,那么这一行应该在MainActivity's
onCreate
function
UpdateTokenWorkManger.renewToken()
我正在尝试使用改装从 api 中检索数据。将要使用的请求需要一个访问令牌才能传入 header。问题是令牌在 10 分钟后过期,刷新令牌请求需要一个未过期的令牌来创建一个新令牌! 那么我应该怎么做才能在 10 分钟之前让令牌自行刷新? 我已经尝试过拦截器,但它无法解决此类问题,因为我需要一个有效的令牌才能获得新的令牌
您可以使用 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
是 class,它应该负责处理您的登录、刷新和注销场景。
并且不要忘记在登录 Activity
后将此行添加到您的第一个 Activity
,例如:如果您登录 SplashActivity
并在成功验证后重定向到MainActivity
,那么这一行应该在MainActivity's
onCreate
function
UpdateTokenWorkManger.renewToken()