iOS 手机号一键登录

什么是一键登录

iOS 无法直接获取当前设备手机号码(不包含使用私有 API),但电信服务运营商(移动/联通/电信等)是知道流量哪张手机卡消耗的,结合运营商的网关认证能力,就可以识别出当前使用的手机卡号码。通常说的场景是指一键登录本机号码认证两个不同的功能,使用场景不一样,无需一起使用。

一键登录使用场景:用户无需输入手机号码,SDK 会拉起授权页,用户确认授权后,SDK 会获取 token,服务端携带 token 到运营商网关获取用户当前上网使用的号码(eg. 服务端调用 GetMobile 接口),并返回给 App 服务端,服务端可将当前用户置为登录状态,并把手机号返回客户端。

本机号码认证使用场景:用户输入手机号码,通过 SDK 获取 token,服务端携带输入的手机号码和 token 去运营商网关进行校验(eg. 服务端调用 VerifyMobile 接口),返回的结果是用户当前上网使用的号码与输入的号码是否一致。

注意

  • token 由集成的 SDK 生成,例如集成的是移动认证 SDK,则调用对应 API 返回 token;
  • 用户必须开启 4G 流量,如果是多卡手机,则只能认证当前使用的流量的手机卡,2G/3G 影响识别效果;
  • 手机号一键登录功能不支持任意应用,待使用的 APP 必须在管理平台配置对应的 APP 包名和唯一标识(Android为签名,iOS 为 Bundle ID)。

运营商

电信运营商都公布自己的开放平台和 SDK:

  • 移动 - 互联网能力开放平台(http://dev.10086.cn/numIdentific?from=index)
  • 电信 - 天翼账号开放平台(http://id.189.cn/banner/unPassword)
  • 联通 - WO+ 开放平台(http://www.open.wo.com.cn/aep/index.html)

三方运营商:

三方运营商一般会整合了三大运营商的网关认证能力,其实就是在三大运营商 SDK 基础上进行了封装。

  • 极光认证(https://www.jiguang.cn/identify)
  • 友盟认证(https://market.aliyun.com/products/57124001/cmapi00036707.html)
  • 网易认证(https://dun.163.com/product/phone-verification)

集成测试对比,移动、极光和友盟,文档较齐全,移动 SDK 与项目冲突概率较小,极光和友盟可能需要项目已集成的对应 SDK 基础库版本,友盟还可能会与其他阿里组件冲突。

一键登录流程

一键登录与本机号码认证流程很类似,用户使用体验的区别,可简单归纳为是否输入手机号码。一键登录流程如下:

  1. SDK 初始化:调用 SDK 的初始化方法,传入项目在平台上的 AppKey 和 AppSecret;
  2. 唤起授权页:调用 SDK 唤起授权接口。SDK 会先向运营商发起获取手机号掩码的请求,请求成功后跳转到授权页。授权页会显示手机号掩码以及运营商协议给用户确认;
  3. 同意授权并登录:用户同意相关协议,点击授权页面的登录按钮,SDK 会请求本次取号的 token,请求成功后将 token 返回给客户端;
  4. 取号:将获取到的 token 发送到我们自己的服务器,由服务器携带 token 调用运营商一键登录的接口,调用成功就返回手机号码了。服务器用手机号进行登录或注册操作,返回操作结果给客户端,完成一键登录。

流程图如下:

一键登录流程

一键登录授权页面大致如下:

一键登录授权