最快捷的⼿机号码实现⼀键登录
⼀键登录了解⼀下?
登录⽅式
我们先来看⼀下⽬前的⼀些登录⽅式。
账号 + 密码
使⽤账号加密码是最传统的登录⽅式,可以说是简单粗暴的,⼀般也不会出现什么问题。
缺点
但这种⽅式要求⽤户要记住⾃⼰的账号和密码,也就是有⼀个记忆成本。⽤户为了降低记忆成本,很可能会在不同平台使⽤同⼀套账号密码。从安全⾓度考虑,⼀旦某个平台的账号密码泄露了,会连累到该⽤户使⽤的其他平台。
另外,由于账号和个⼈⾝份⽆关,意味着同⼀个⽤户可以注册多个不同的账号,也就是可能会有恶意注册的情况发⽣。
为解决这两个问题,理想的情况就是使⽤⼀个和⽤户⾝份强关联的东西来作为账号。但⽤什么呢?总不能拿⾝份证做账号吧。
这个问题⼀直没有⼀个好的回答,直到⼿机卡强制实名制。
⼿机号 + 验证码
手机号码一键查询快递
从⼿机卡实名制开始,⼿机号已经成为我们的另⼀个⾝份证明。
使⽤⼿机号加验证码的登录⽅式⽬前已经成为主流,和输⼊账号密码相⽐,它可以更好的验证⽤户⾝份,可以防⽌恶意注册,⽤户不⽤再去记⾃⼰的账号密码,增加了安全性。现在⽤户也习惯并接受了这种登录⽅式。
现在很多产品还把登录和注册的流程进⾏了结合,如果登录时服务器发现⼿机号还未注册,会直接⽤这个⼿机号注册好再进⾏登录,注册过程对⽤户是⽆感的,极⼤简化了注册流程。
缺点
这种登录⽅式需要进⾏⼀系列的操作:输⼊⼿机号、等待验证码短信、输⼊验证码、点击登录。这整个流程⾛完可能需要 20 秒以上,操作也⽐较繁琐。并且它是依赖短信⽹络的,因为如果收不到短信,也就登录不了了。这些问题可能造成⼀部分⽤户在注册阶段就流失了。
从安全⾓度考虑,还存在验证码泄漏的风险。如果有⼈知道了你的⼿机号,并且窃取到了验证码,那他也能登录你的账号了。
但回过头来想⼀下,为什么我们需要验证码?验证码的作⽤就是确定这个⼿机号是你的,那除了使⽤短信,是否还有别的⽅式对⼿机号进⾏认证?
本机号码认证
如果能获取到当前使⽤的⼿机号,就能对⽤户输⼊的号码进⾏验证了。但出于安全考虑,客户端是⽆法直接获取到⼿机号的,运营商则可以通过 sim 卡数据查询到。
现在运营商已经开放了相关的能⼒,现在我们可以在⽤户输⼊⼿机号后,通过调⽤运营商的接⼝,判断⽤户输⼊的⼿机号是否和本地号码⼀致。这样⼀来,⽤户就省去了等待验证码短信、输⼊验证码的过程,也不受短信⽹络的限制,简化了登录流程。
但再进⼀步想,如果运营商可以把当前的号码直接返回给我们,⽽不只是⽤于验证,那⽤户连⼿机号都不需要填了。
于是,就有了今天的主⾓⼀键登录。
⼀键登录
获取到当前⼿机使⽤的⼿机卡号,直接使⽤这个号码进⾏登录,这就是⼀键登录。
这种登录⽅式的好处是显⽽易见的。它可以更⽅便、快捷地完成注册、登录流程,将原本可能需要 20 秒的流程,缩短到了 2 秒左右,很⼤程度上降低了登录环节的⽤户流失。
⼀键登录能不能做,取决于运营商是否开放相关服务,这也是为什么过去没有⼀键登录,直到最近三⼤运营商都有了⾃⼰的开放平台:
移动 - 互联⽹能⼒开放平台
电信 - 天翼账号开放平台
联通 - WO+ 开放平台
取号流程
要使⽤⼀键登录,需要接⼊运营商的 SDK,三⼤运营商使⽤了同⼀套授权流程:
主要步骤如下:
SDK 初始化
调⽤ SDK 的初始化⽅法,传⼊项⽬在平台上的 AppKey 和 AppSecret。
唤起授权页
调⽤ SDK 唤起授权接⼝。SDK 会先向运营商发起获取⼿机号掩码的请求,请求成功后跳转到授权页。授权页会显⽰⼿机号掩码以及运营商协议给⽤户确认。
同意授权并登录
⽤户同意相关协议,点击授权页⾯的登录按钮,SDK 会请求本次取号的 token,请求成功后将token 返回给客户端。
取号
将获取到的 token 发送到我们⾃⼰的服务器,由服务器携带 token 调⽤运营商⼀键登录的接⼝,调⽤成功就返回⼿机号码了。服务器⽤⼿机号进⾏登录或注册操作,返回操作结果给客户端,完成⼀键登录。
授权页
这⾥需要把授权页拎出来讲⼀下,它⼀般长这样:
授权页是 SDK ⾥定义的页⾯,以安卓为例,接⼊ SDK 后我们需要在 AndroidManifest ⾥注册好这个页⾯。我们不能也不应该跳过授权页⾯,未经⽤户允许就获取⽤户⼿机号。
由于授权页是第三⽅的页⾯,我们⽆法⾃由修改页⾯样式,但 SDK ⾥提供了⾜够丰富的接⼝给我们⾃定义样式。
前⾯说到,在授权页显⽰之前需要先请求到⼿机号掩码,⽤于在授权页展⽰。为了增加授权页的跳转速度,减少⽤户等待的时间,通常 SDK 会提供⼀个预取号的接⼝给我们,这个接⼝取的就是⼿机号掩码。我们可以在打开 APP 的时候就调⽤这个接⼝,在已经取得掩码的情况下,⽤
户点击跳转授权页⾯就不需要再等待了。算是对⽤户体验的⼀个⼩优化。