【Android】扫码登录 - 被扫端

671 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第 6 天,点击查看活动详情

前言

在支持多端登录的体系下,提供快捷的登录方式,无疑是加强用户体验的一种途径。常见的快捷方式有:一键登录],第三方登录,扫码登录等。

一键登录,可以看我之前的 【Android】一键登录 - 三大运营商 一文。而本文主要介绍扫码登录。而且是“被扫端”,即生成二维码,等待其他 Android 设备扫描的设备端。例如:平板,电视,车机等等。

流程图

首先,让我们看一下这整个流程是怎么进行的。

1660809861943.png

通过上面的流程图,我们可以得出,涉及的技术主要有

  • 生成二维码
  • 轮询方案-查询二维码的状态

生成二维码

这里采用的是 zxing 大佬的二维码库。不过,这里只涉及到二维码的生成,不涉及到扫码。所以我仅仅把有关生成二维码的代码挪了出来。主要是以下几个包和类

1660811465960.png

轮询方案

轮询,听着比较高大上。不过我理解就是,重复访问一个接口,获取数据。

我这里通过 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)

结语

这里主要是提供一种实现思路给大家。欢迎大家在评论区交流!码农的工作,不全都是敲代码,还需要画流程图,方案选择。