iOS获取手机号

网上常见的方案是使用CoreTelephony的私有API

extern NSString*CTSettingCopyMyPhoneNumber();

@implementation

+(NSString *)myNumber{
    return CTSettingCopyMyPhoneNumber();
}

不过这方案并没有什么卵用,私有API是不会通过苹果的AppStore审核的。

后来发现爱奇艺和bilibili的App都是可以获取到用户手机号的,还可以一键登录。

查了一下,发现原来是运营商提供的功能,运营商提供SDK,可以让开发者获取到当前手机使用的手机卡号,直接使用这个号码进行登录,这就是一键登录。

三大运营商的开放平台

移动 - 互联网能力开放平台(http://dev.10086.cn)

电信 - 天翼账号开放平台(https://id.189.cn)

联通 - WO+ 开放平台(http://open.wo.com.cn)

 

授权流程大致如下

(1)SDK初始化

调用 SDK 的初始化方法,传入项目在平台上的 AppKey 和 AppSecret。

(2)唤起授权页

调用 SDK 唤起授权接口。SDK 会先向运营商发起获取手机号掩码的请求,请求成功后跳转到授权页。授权页会显示手机号掩码以及运营商协议给用户确认。

(3)同意授权并登录

用户同意相关协议,点击授权页面的登录按钮,SDK 会请求本次取号的 token,请求成功后将 token 返回给客户端。

(4)取号

将获取到的 token 发送到我们自己的服务器,由服务器携带 token 调用运营商一键登录的接口,调用成功就返回手机号码了。服务器用手机号进行登录或注册操作,返回操作结果给客户端,完成一键登录。

 

如果没有插电话卡,或者在关闭移动蜂窝网络的情况下,是无法完成认证的,这时需要兼容传统的登录方式,允许用户在认证失败的情况下手动输入手机号登录。

三大运营商都有自己的SDK,如果要兼容三大运营商,就需要分别接入三个SDK,也可以接入整合了三大运营商认证能力的第三方SDK:

阿里云(https://help.aliyun.com/product/75010.html)

极光(https://www.jiguang.cn/identify)

你可能感兴趣的:(iOS)