携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第 6 天,点击查看活动详情
前言
在支持多端登录的体系下,提供快捷的登录方式,无疑是加强用户体验的一种途径。常见的快捷方式有:一键登录],第三方登录,扫码登录等。
一键登录,可以看我之前的 【Android】一键登录 - 三大运营商 一文。而本文主要介绍扫码登录。而且是“被扫端”,即生成二维码,等待其他 Android 设备扫描的设备端。例如:平板,电视,车机等等。
流程图
首先,让我们看一下这整个流程是怎么进行的。
通过上面的流程图,我们可以得出,涉及的技术主要有
- 生成二维码
- 轮询方案-查询二维码的状态
生成二维码
这里采用的是 zxing 大佬的二维码库。不过,这里只涉及到二维码的生成,不涉及到扫码。所以我仅仅把有关生成二维码的代码挪了出来。主要是以下几个包和类
轮询方案
轮询,听着比较高大上。不过我理解就是,重复访问一个接口,获取数据。
我这里通过 Handler 机制。当然,还有别的方案,可以自行实践。
private val mHandler = Handler(Looper.getMainLooper())
private val mTimeCounterRunnable = object : Runnable {
override fun run() {
//轮询二维码状态
requestQRCodeStatus(qrcode)
mHandler.postDelayed(this, 2 * 1000)
}
}
private var qrcode: String = ""
fun checkQRCodeStatus(qr: String) {
qrcode = qr
mTimeCounterRunnable.run()
}
fun stopCheckQRStatus() {
mHandler.removeCallbacks(mTimeCounterRunnable)
}
创建一个 runnable,其中的任务就是查询二维码状态。同时将当前 runnable,重新添加到 handler 机制中,等待下一次被处理。
停止轮询的话,就把这个 runnable remove 掉就可以了。mHandler.removeCallbacks(mTimeCounterRunnable)
结语
这里主要是提供一种实现思路给大家。欢迎大家在评论区交流!码农的工作,不全都是敲代码,还需要画流程图,方案选择。