Android 如何使用 KComponent 完成自动登录验证

218 阅读1分钟

前言

今天我们利用 KComponent 实现一个自动登录验证的功能. 我们很多的页面在进入之前都可能需要前置条件. 而我们常见的就是进入之前需要登录、权限等

今天就带大家实现一个自动完成登录的功能

image-20221213104228859

准备工作

  • 首先你已经有了一个 user/login 为路由地址的登录界面. 在登录成功之后会通过 Activity setResult 返回 RESULT_OK
  • 假设你有一个界面, 他需要登录才能进入. 它的路由地址为: order/detail

实现自动登录的拦截器

class AutoLoginRouterInterceptor: RouterInterceptor {
  override suspend fun intercept(chain: RouterInterceptor.Chain): RouterResult {
    val context = chain.request().rawAliveContext ?: throw NullPointerException("context is null")
    // 如果没有登录, 就跳转去登录, 并且等待 RESULT_OK 的结果, 否则就错误返回
    if(App 没有登录) {
      Router
        .with(context = context)
        .hostAndPath(hostAndPath = "user/login")
        .requestCodeRandom()
        .resultCodeMatchAwait(expectedResultCode = Activity.RESULT_OK)
    }
    return chain.proceed(request = chain.request())
  }
}

声明目标界面的路由, 并且绑定自动登录拦截器

@RouterAnno(
  hostAndPath = "order/detail",
  interceptors = [AutoLoginRouterInterceptor::class],
)
class OrderDetailAct: AppCompatActivity {
  // xxxxxx
}

此时, 所有跳转到 "order/detail" 的路由, 都会保证完成登录的验证