一键登录文档

修订历史

日期版本描述作者
2019-03-281.0 Bobo
2019-05-031.1bug修复,运营商sdk升级Bobo
2019-08-081.25bug修复,部分接口调整以及添加短信验证码登录Lance
2019-09-112.00bug修复,增加自定义授权页接口,移动运营商升级Sean

目录

一键登录文档修订历史目录1. 能力申请1.1 接入流程2. Android开发流程2.1 下载SDK及相关文档2.2 搭建开发环境2.3 开始开发2.4 一键登录功能2.5 授权页设计3. iOS开发流程3.1 下载SDK及相关文档3.2 导入 SDK3.3 编译设置3.4 SDK 的使用4. 平台接口4.1获取用户信息接口4.2 相关源码 5. SDK常见错误码定义5.1 SDK错误码定义5.2 移动错误定义5.3 联通错误定义5.4 电信错误定义

1. 能力申请

注意事项:

1.认证取号服务必须打开蜂窝数据流量,并且应用应有蜂窝数据权限;

2.取号请求过程需要消耗用户少量数据流量(国外漫游时可能会产生额外的费用);

3.使用WiFi网络不会影响一键登录功能。

1.1 接入流程

1. 申请appid和appkey

根据《开发者接入流程文档》,联系易讯云商务人员按照文档要求创建开发者账号并申请appid和appkey,并提交应用名称、简介、类型、应用图标(256X256)、公钥1024bit pkcs#8格式)、调用“一键免密登录”能力 IP地址;安卓应用另提交登录页面类名、应用包名、应用签名,iOS应用另提交ios bundle ID。

2. 申请能力

应用创建完成后,联系易讯云商务人员申请开通“一键免密登录”能力。

2. Android开发流程

说明

Android sdk支持版本:Android4.0以上

本文档为一键登录SDK1.1版本开发文档

2.1 下载SDK及相关文档

请在易讯云官网下载最新的SDK集合包

 

2.2 搭建开发环境

1. 建立你的工程。

2. 将 *.aar 拷贝到工程的libs目录下,如没有该目录,可新建。

3. 在build.gradle中添加依赖。

4. 添加必要的权限

AndroidManifest.xml设置

权限说明:

权限说明
INTERNET允许应用程序联网,用于访问网关和认证服务器
READ_PHONE_STATE获取imsi用于判断双卡和换卡
ACCESS_WIFI_STATE允许程序访问WiFi网络状态信息
ACCESS_NETWORK_STATE获取网络状态,判断是否数据、wifi等
CHANGE_NETWORK_STATE允许程序改变网络连接状态

2.3 开始开发

1. 创建一个YxAuthnHelper实例

YxAuthnHelper是SDK的功能入口,所有的接口调用都得通过YxAuthnHelper进行调用。因此,调用SDK,首先需要创建一个YxAuthnHelper实例

方法原型:

参数说明:

参数类型说明
contextContext调用者的上下文环境,其中activity中this即可以代表。

示例代码:

2. 初始化 APPID

设置 APPID 和 appSecret

方法原型:

参数说明:

参数类型说明
appIdString应用appId
appSecretString应用秘钥

3. 初始化

可以通过initNet方法设置SDK的请求超时时间,默认10s,设置以ms为单位。

方法原型:

参数说明:

参数类型说明
connectTimeoutintSDK的http/https请求的链接超时时间。
readTimeoutintSDK的http/https请求的读数据超时时间。
writeTimeoutintSDK的http/https请求的写数据超时时间。

4. 设置主题

开发者可根据开放接口,对授权页进行定制

方法原型:

5.验证码功能

短信验证码功能在特殊网络环境下,当一键登录获取手机号失败时,提供补充登录功能。开发者可选择是否启用短信验证码功能,默认false。

6. 实现回调

所有的SDK接口调用,都会传入一个回调,用于接收SDK返回的调用结果。结果以 Json字符串的形式传递,

ResultListener的实现示例代码如下:

短信验证码登录界面回调:

短信验证码回调 result 参数说明:

字段类型含义
statusInt接口返回码,“0”为成功。
messageString返回码说明。
tokenString成功时返回:临时凭证,token有效期30s。
expirelongToken有效期,时间戳格式。

 

2.4 一键登录功能

1. 预取号请求

使用 SDK 登录前,需要提前调用预登录接口,完成网络判断、蜂窝数据网络切换等操作,获取预登录结果、运营商类型等信息。

取号方法原型:

参数说明:

参数类型说明
resultListenerResultListener回调监听器,是一个java接口,需要调用者自己实现。 onResult是该接口中唯一的抽象方法,即void onResult(String result)。

响应参数:

onResult的参数result为json字符串,含义如下。

字段类型含义
statusInt接口返回码,“0”为成功。
messageString返回码说明。
ispTypeString运营商类型。CM:中国移动,CU:中国联通,CT:中国电信。

示例代码:

2. 授权请求

应用调用本方法时,SDK将拉起用户授权页面,用户确认授权后,SDK将返回token给应用客户端。

授权请求方法原型:

请求参数:

字段类型含义
resultListenerResultListener回调监听器,是一个java接口,需要调用者自己实现; onResult是该接口中唯一的抽象方法,即void onResult(String result)。

响应参数:

onResult的参数result为json字符串,含义如下:

字段类型含义
statusInt接口返回码,“0”为成功。
messageString返回码说明。
mobileString成功时返回:用户脱敏手机号,仅联通含此字段,可用于设计登录页。
tokenString成功时返回:临时凭证,token有效期30s。
expirelongToken有效期,时间戳格式。

示例代码:

 

2.5 授权页设计

1. 移动授权页设计

使用new YxAuthPageConfig.Build().setCmXXX()设置移动授权页中对应的元素。

2. 联通授权页设计

使用new YxAuthPageConfig.Build().setCuXXX()设置移动授权页中对应的元素。

3. 电信授权页设计

使用new YxAuthPageConfig.Build().setCtXXX()设置移动授权页中对应的元素。

4.验证码登录页面设计

使用new YxAuthPageConfig.Build().setSmsXXX()设置验证码登录页中对应的元素。

3. iOS开发流程

3.1 下载SDK及相关文档

请在易讯云官网下载最新的SDK集合包

3.2 导入 SDK

按实际情况导入debug 或者 release,以及相应的bundle文件。该 SDK 需要依赖第三方库 AFNetworking,Masonry请自行导入。

 

3.3 编译设置

1. 配置ATS

在 info.plist 文件中添加 App Transport Security Settings 项,并在其中添加 Allow Arbitrary Loads 子项,同时将该子项的值设置为 YES

2. 添加依赖字段

(1)在BuildSetting-Hearder Search Paths 中设置 EAccountHYSDK.framework 文件的路径,并将右边的值设置为 recursive

(2)在BuildSetting-Other Linker Flags 中添加“-ObjC”、“-lstdc++”和“-force_load”加上EAccountHYSDK.framework/EAccountHYSDK 所在的路径(路径注意带双引号,比如""$(SRCROOT)/EAccountHYSDK.framework/EAccountHYSDK")。

3. 添加依赖库

在项目设置 target -> Build Phases->Link Binary with Libraries 下添加 libc++.1.tbd 和 libz.1.2.8.tbd。

 

3.4 SDK 的使用

1.在 APPDelegate 引入头文件

2、初始化

在 didfinsh 方法中,传入申请的 appid 和 appsecret 调用接口进行初始化及预登录。

方法原型:

成功响应:

响应参数为 NSDictionary *result,包含内容如下:

字段类型含义
statusString接口返回码,“0”为成功。
descString返回码说明。
operatorTypeString运营商标识:移动CM,联通CU,电信CT

失败响应:

响应参数为 NSError *error

3、获取token

在开发需要的地方调用以下接口获取 SIM 卡运营商返回的 Token,需要传入当前的controller。

短信验证码能在特殊网路环境下,一键登录失败时,提供补充登录功能。使用 SMSmode 设置是否选择短信验证码登录功能。

方法原型:

响应参数:

响应参数为 NSDictionary *tokenResponse,包含内容如下:

字段类型含义
statusString接口返回码,“0”为成功。
messageString返回码说明。
mobileString成功时返回:用户脱敏手机号,仅联通含此字段,可用于设计登录页。
tokenString成功时返回:取号凭证,token 有效期 30s。
expireStringToken 有效期,时间

失败响应:

失败响应参数为:NSError *error

4、自定义授权页

使用YxAuthHelper 的 customUAModelBlock 和 cuAuthVCBlock 以及修改nib的方法来实现自定义授权页。

移动和联通的授权页使用block来设置;电信的通过修改EAccountOpenPageResource中的EAccountAuthVC.xib,然后用生成的EAccountAuthVC.nib文件将原来的EAccountAuthVC.nib替换,生成方法可以参考开发包中的“生成nib文件的方法.doc”

 

4. 平台接口

4.1获取用户信息接口

1.接口说明

请求地址:

协议:

HTTPS

请求方法:

POST

注意:开发者需到正确填报服务端出口IP地址后才能正常使用

2.参数说明

请求参数:

字段类型含义
appIdString平台申请的appId。
tokenString授权请求返回的token。
timeStampString生成请求时的时间戳。
signString签名校验,sign=RSAUtil.sign(appId+ timeStamp+ token, privateKey),”+”表示字符串连接,连接顺序不可变化。privateKey为申请appId和appSecret时填写的公钥对应的私钥,用于验证请求者身份。

响应参数:

字段类型含义
statusInt接口返回码,“0”为成功。
messageString返回码说明。
mobileString成功时返回:用户手机号。

4.2 相关源码

相关源码请在易讯云官网下载。

 

5. SDK常见错误码定义

5.1 SDK错误码定义

错误码含义
0请求成功
-100appId错误
-101appSecret错误
-110签名错误
-111公钥配置错误
-112token无效
-120该appId没有有效订单
-121账户暂停
-131验证码失效 (短信验证码登录页)
-132验证码错误 (短信验证码登录页)
-10002该appId暂不支持的运营商
-10003系统内部数据解析错误
-10004未调用预登陆接口
-10005系统忙
-10006无运营商网络
-10008网络错误
-10009权限错误

 

5.2 移动错误定义

错误码含义
102507登录超时(授权页点登录按钮时)
103101请求签名错误
103102包签名/Bundle ID错误
103108短信验证码错误
103109短信验证码校验超时
103111网关IP错误
103119appid不存在
103211其他错误,(如有需要请联系qq群609994083内的移动认证开发)
103901短验下发次数已达上限(5次/min,30次/day)
103902scrip失效
103911token请求过于频繁,10分钟内获取token且未使用的数量不超过30个
105002移动取号失败
105021已达当天取号限额
105302appid不在白名单
105313非法请求
200005用户未授权(READ_PHONE_STATE)
200020用户取消登录
200021数据解析异常
200022无网络
200023请求超时
200024数据网络切换失败
200025未知错误一般出现在线程捕获异常,请配合异常打印分析
200026输入参数错误
200027未开启数据网络
200028网络请求出错
200038异网取号网络请求失败
200039异网取号网关取号失败
200040UI资源加载异常
200048用户未安装sim卡
200050EOF异常
200060切换账号(未使用SDK短验时返回)
200072CA根证书校验失败
200080本机号码校验仅支持移动手机号
200082服务器繁忙

5.3 联通错误定义

错误码含义
100应用未授权
101应用秘钥错误
102应用无效
103应用未授权该 IP 访问
104应用访问次数丌足
105应用包名丌正确
200tokenId 无效
201token 已失效
202token 未授权该应用访问
203登录鉴权级别不满足接口鉴权要求
300接口未开放
302IP 未授权码访问该接口
303应用访问接口次数超日限额
400请求参数为空
401请求参数不完整
402请求参数非法
600请求非法
1000请求解析错误
1001请求已失效
1002验签失败
1003授权码已过期
1004加密方式不支持
1005RSA 加密错误
1010服务间访问失败
1011服务间访问错误
2004用户不存在
3001unikey 无效
3002跳转异网取号
3003本网执行取号失败,丌需要重定向
3004NET 取号失败
3005上网方式为 WIFI,无法取号
3006urlencode 编码失败
3007请求认证接口异常
3008imsi 取号失败
3009非联通号码
3010网关取号错误
3011源 IP 鉴权失败
3012网关取号失败
3015获取 accessCode 请求参数失败

5.4 电信错误定义

错误码含义
-64permission-denied(无权限访问)
-65API-request-rates-Exceed-Limitations(调用接口超限)
-10001取号失败
-10002参数错误
-10003解密失败
-10004ip 受限
-10005异网取号回调参数异常
-10006Mdn 取号失败,且属于电信网络
-10007重定向到异网取号
-10008超过预设取号阈值
-10009时间戳过期
-20005sign-invalid(签名错误)
-20006应用不存在
-20007公钥数据不存在
-20100内部解析错误
-20102加密参数解析失败
-30001时间戳非法
-30003topClass 失效, 请查看 5.3+5.4 常见问题。
51002参数为空
51114无法获取手机号数据

Android 自定义错误码

错误码含义
-8100网络无连接
-8001请求网络异常
-8002请求参数异常
-8003请求超时
-8004移动网络未开启
-8005请先初始化 SDK
-8005请先初始化 SDK
-8101响应码错误
-8102Socket 超时异常(读取超时、连接超时)
-8103域名解析异常
-8104IO 异常
-720001切换异常
-720002切换异常超时

iOS 自定义错误码

错误码含义
-8001请求网络异常
-8201响应码错误
-8005请先初始化 SDK