首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有一种方法可以使用改进的计时器来刷新令牌?

有没有一种方法可以使用改进的计时器来刷新令牌?
EN

Stack Overflow用户
提问于 2020-12-10 00:28:23
回答 1查看 273关注 0票数 1

我正在尝试使用retrofit从api中检索数据。我要使用的请求需要一个访问令牌来传递报头。问题是令牌在10分钟后过期,刷新令牌请求需要一个未过期的令牌来创建一个新的令牌!那么我应该怎么做才能让令牌在超过10分钟之前自己刷新呢?我已经尝试过Interceptor,但它不能处理这种类型的问题,因为我需要一个有效的令牌来获取新的令牌

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-10 00:38:27

您可以使用Worker并将其设置为每30分钟左右运行一次,然后将其设置为在SharedPreference中保存更新后的令牌

下面是Worker的一个示例

代码语言:javascript
运行
复制
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
        )
    }
}

要使用此组件,您需要以下依赖项

代码语言:javascript
运行
复制
implementation "androidx.work:work-runtime-ktx:2.4.0"

还要注意,LoginHandler是应该负责处理登录、刷新和注销场景的类。

不要忘了在登录Activity之后的第一个函数中添加这一行,例如:如果您登录到SplashActivity,并且在成功验证之后重定向到MainActivity,那么这一行应该在MainActivity's onCreate Activity

代码语言:javascript
运行
复制
UpdateTokenWorkManger.renewToken()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65220833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档