文档开发者中心
我的

易验,APP一键登录的对接文档

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/Lukey123456/article/details/101384746

易验,APP一键登录的对接文档

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中添加依赖。


abiFilters 'armeabi'

}

repositories {

flatDir {

dirs 'libs'

}

}

dependencies {

//okHttp框架

implementation 'com.squareup.okhttp3:okhttp:3.12.0'

//添加易讯云一键登录sdk

//Android 添加

implementation name: 'YxAccountSdk-release-2.0.0', ext: 'aar'

//Androidx 添加

implementation name: 'YxAccountSdkx-release-2.0.0', ext: 'aar'

//移动api

implementation name: 'CMCCSSOSDK-release', ext: 'aar'

//电信api

implementation name: 'CTAccountSdk_HY_v3.7.0_armeabi', ext: 'aar'

}


添加必要的权限

AndroidManifest.xml设置


<uses-permission android:name='android.permission.INTERNET' />

<uses-permission android:name='android.permission.READ_PHONE_STATE' />

<uses-permission android:name='android.permission.ACCESS_WIFI_STATE' />

<uses-permission android:name='android.permission.ACCESS_NETWORK_STATE' />

<uses-permission android:name='android.permission.CHANGE_NETWORK_STATE' />


权限 说明

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实例


方法原型:


1 public static YxAuthHelper getInstance(Context context)


参数说明:


参数 类型 说明

context Context 调用者的上下文环境,其中activity中this即可以代表。

示例代码:


public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

mContext = this;

……

mAuthHelper = YxAuthHelper.getInstance(mContext);

}


2. 初始化 APPID


设置 APPID 和 appSecret


方法原型:


public void init(String appId, String appSecret)

1

参数说明:


参数 类型 说明

appId String 应用appId

appSecret String 应用秘钥

3. 初始化


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


方法原型:


public static void initNet(int connectTimeout, int readTimeout, int writeTimeout )

1

参数说明:


参数 类型 说明

connectTimeout int SDK的http/https请求的链接超时时间。

readTimeout int SDK的http/https请求的读数据超时时间。

writeTimeout int SDK的http/https请求的写数据超时时间。

4. 设置主题


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


方法原型:


YxAuthPageConfig yxAuthPageConfig = new YxAuthPageConfig.Builder(context)

/**

自定义配置

***/

.build()

public void setYxAuthPageConfig(YxAuthPageConfig yxAuthPageConfig)


5.验证码功能


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


public void setSmsLogin(boolean smsLogin)

1

6. 实现回调


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


ResultListener的实现示例代码如下:


mListener = new ResultListener() {

@Override

public void onResult(String result) {

……

}

};


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


smsLoginListener = new SmsLoginListener() {

@Override

public void getCode(String result) {

//获取短信验证码回调

}

@Override

public void getToken(String result) {

//获取token(即登录)回调

}

});


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


字段 类型 含义

status Int 接口返回码,“0”为成功。

message String 返回码说明。

token String 成功时返回:临时凭证,token有效期30s。

expire long Token有效期,时间戳格式。

2.4 一键登录功能

1. 预取号请求


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


取号方法原型:


public void preLogin(ResultListener resultListener)

1

参数说明:


参数 类型 说明

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

响应参数:


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

.


字段 类型 含义

status Int 接口返回码,“0”为成功。

message String 返回码说明。

ispType String 运营商类型。CM:中国移动,CU:中国联通,CT:中国电信。

//创建YxAuthnHelper实例

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

mContext = this;

/***

判断和获取READ_PHONE_STATE权限逻辑

***/

mAuthnHelper = YxAuthnHelper.getInstance(mContext);

//实现取号回调

mListener = new ResultListener() {

@Override

public void onResult(String result) {

……// 应用接收到回调后的处理逻辑

}

};

//调用取号方法

mAuthnHelper.preLogin(mListener);

}


2. 授权请求


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


授权请求方法原型:


//创建YxAuthnHelper实例

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

mContext = this;

/***

判断和获取READ_PHONE_STATE权限逻辑

***/

mAuthnHelper = YxAuthnHelper.getInstance(mContext);

//实现回调

mListener = new ResultListener() {

@Override

public void onResult(String result) {

……// 应用接收到回调后的处理逻辑

}

};

//

mAuthnHelper.login(mListener);

}


请求参数:


字段 类型 含义

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

响应参数:


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


字段 类型 含义

status Int 接口返回码,“0”为成功。

message String 返回码说明。

mobile String 成功时返回:用户脱敏手机号,仅联通含此字段,可用于设计登录页。

token String 成功时返回:临时凭证,token有效期30s。

expire long Token有效期,时间戳格式。

//创建YxAuthnHelper实例

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

mContext = this;

/***

判断和获取READ_PHONE_STATE权限逻辑

***/

mAuthnHelper = YxAuthnHelper.getInstance(mContext);

//实现回调

mListener = new ResultListener() {

@Override

public void onResult(String result) {

……// 应用接收到回调后的处理逻辑

}

};

mAuthnHelper.login(mListener);

}


2.5 授权页设计

移动授权页设计

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


联通授权页设计

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


电信授权页设计

使用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 引入头文件


#import <YxAuthHelperSDK/YxAuthHelper.h>

1

2、初始化


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


方法原型:


-(void)requestPreLogInWithAppIdServer:(NSString *)appId appSecretServer:(NSString *)appSecret completion:(TypeCompletionSucess)typeCompletionSucess failure:(TypeCompletionFailure)typeCompletionFaiure;


成功响应:


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


字段 类型 含义

status String 接口返回码,“0”为成功。

desc String 返回码说明。

operatorType String 运营商标识:移动CM,联通CU,电信CT

失败响应:


响应参数为 NSError *error


3、获取token


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


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


方法原型:



-(void)getLogInTokenWithController:(id)viewController SMSmode:(BOOL)mode Completion:( TokenCompletionSucess)tokenCompletionSucess failure:(TokenCompletionFailure)tokenCompletionFailure;


响应参数:


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


字段 类型 含义

status String 接口返回码,“0”为成功。

message String 返回码说明。

mobile String 成功时返回:用户脱敏手机号,仅联通含此字段,可用于设计登录页。

token String 成功时返回:取号凭证,token 有效期 30s。

expire String Token 有效期,时间

失败响应:


失败响应参数为:NSError *error


4、自定义授权页


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


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


4. 平台接口

4.1获取用户信息接口

1.接口说明


请求地址:


https:///ip:port/auth/getUserInfo


协议:


HTTPS


请求方法:


POST


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


2.参数说明


请求参数:


字段 类型 含义

appId String 平台申请的appId。

token String 授权请求返回的token。

timeStamp String 生成请求时的时间戳。

sign String 签名校验,sign=RSAUtil.sign(appId+ timeStamp+ token, privateKey),”+”表示字符串连接,连接顺序不可变化。privateKey为申请appId和appSecret时填写的公钥对应的私钥,用于验证请求者身份。

响应参数:


字段 类型 含义

status Int 接口返回码,“0”为成功。

message String 返回码说明。

mobile String 成功时返回:用户手机号。

4.2 相关源码

源码请在相关官网下载。


5. SDK常见错误码定义

5.1 SDK错误码定义

错误码 含义

0 请求成功

-100 appId错误

-101 appSecret错误

-110 签名错误

-111 公钥配置错误

-112 token无效

-120 该appId没有有效订单

-121 账户暂停

-131 验证码失效 (短信验证码登录页)

-132 验证码错误 (短信验证码登录页)

-10002 该appId暂不支持的运营商

-10003 系统内部数据解析错误

-10004 未调用预登陆接口

-10005 系统忙

-10006 无运营商网络

-10008 网络错误

-10009 权限错误

5.2 移动错误定义

错误码 含义

102507 登录超时(授权页点登录按钮时)

103101 请求签名错误

103102 包签名/Bundle ID错误

103108 短信验证码错误

103109 短信验证码校验超时

103111 网关IP错误

103119 appid不存在

103211 其他错误,(如有需要请联系qq群609994083内的移动认证开发)

103901 短验下发次数已达上限(5次/min,30次/day)

103902 scrip失效

103911 token请求过于频繁,10分钟内获取token且未使用的数量不超过30个

105002 移动取号失败

105021 已达当天取号限额

105302 appid不在白名单

105313 非法请求

200005 用户未授权(READ_PHONE_STATE)

200020 用户取消登录

200021 数据解析异常

200022 无网络

200023 请求超时

200024 数据网络切换失败

200025 未知错误一般出现在线程捕获异常,请配合异常打印分析

200026 输入参数错误

200027 未开启数据网络

200028 网络请求出错

200038 异网取号网络请求失败

200039 异网取号网关取号失败

200040 UI资源加载异常

200048 用户未安装sim卡

200050 EOF异常

200060 切换账号(未使用SDK短验时返回)

200072 CA根证书校验失败

200080 本机号码校验仅支持移动手机号

200082 服务器繁忙

5.3 联通错误定义

错误码 含义

100 应用未授权

101 应用秘钥错误

102 应用无效

103 应用未授权该 IP 访问

104 应用访问次数丌足

105 应用包名丌正确

200 tokenId 无效

201 token 已失效

202 token 未授权该应用访问

203 登录鉴权级别不满足接口鉴权要求

300 接口未开放

302 IP 未授权码访问该接口

303 应用访问接口次数超日限额

400 请求参数为空

401 请求参数不完整

402 请求参数非法

600 请求非法

1000 请求解析错误

1001 请求已失效

1002 验签失败

1003 授权码已过期

1004 加密方式不支持

1005 RSA 加密错误

1010 服务间访问失败

1011 服务间访问错误

2004 用户不存在

3001 unikey 无效

3002 跳转异网取号

3003 本网执行取号失败,丌需要重定向

3004 NET 取号失败

3005 上网方式为 WIFI,无法取号

3006 urlencode 编码失败

3007 请求认证接口异常

3008 imsi 取号失败

3009 非联通号码

3010 网关取号错误

3011 源 IP 鉴权失败

3012 网关取号失败

3015 获取 accessCode 请求参数失败

5.4 电信错误定义

错误码 含义

-64 permission-denied(无权限访问)

-65 API-request-rates-Exceed-Limitations(调用接口超限)

-10001 取号失败

-10002 参数错误

-10003 解密失败

-10004 ip 受限

-10005 异网取号回调参数异常

-10006 Mdn 取号失败,且属于电信网络

-10007 重定向到异网取号

-10008 超过预设取号阈值

-10009 时间戳过期

-20005 sign-invalid(签名错误)

-20006 应用不存在

-20007 公钥数据不存在

-20100 内部解析错误

-20102 加密参数解析失败

-30001 时间戳非法

-30003 vtopClass 失效, 请查看 5.3+5.4 常见问题。

51002 参数为空

51114 无法获取手机号数据

Android 自定义错误码


错误码 含义

-8100 网络无连接

-8001 请求网络异常

-8002 请求参数异常

-8003 请求超时

-8004 移动网络未开启

-8005 请先初始化 SDK

-8005 请先初始化 SDK

-8101 响应码错误

-8102 Socket 超时异常(读取超时、连接超时)

-8103 域名解析异常

-8104 IO 异常

-720001 切换异常

-720002 切换异常超时

iOS 自定义错误码


错误码 含义

-8001 请求网络异常

-8201 响应码错误

-8005 请先初始化 SDK


————————————————

版权声明:本文为CSDN博主「Lukey123456」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/Lukey123456/article/details/101384746


点赞
收藏
回复
分享
举报
浏览898 发布于2019-11-03 04:05未知归属地
全部评论
最多点赞
最新发布
最早发布
暂无评论
暂无评论
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。

我要发帖子

了解社区公约,与您携手共创和谐专业的开发者社区。