小言_互联网的博客

关于APP一键登录的对接流程介绍(上海财焱网络科技有限公司)

433人阅读  评论(0)

关于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集合包

www.51yixun.com

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'
}
  1. 添加必要的权限

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

方法原型:

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) 

参数说明:

参数 类型 说明
appId String 应用appId
appSecret String 应用秘钥

3. 初始化

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

方法原型:

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

参数说明:

参数 类型 说明
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)

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)

参数说明:

参数 类型 说明
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 授权页设计

  1. 移动授权页设计

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

  1. 联通授权页设计

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

  1. 电信授权页设计

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

4.验证码登录页面设计

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

3. iOS开发流程

3.1 下载SDK及相关文档

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

www.51yixun.com

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>

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://x.91yixun.com/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 相关源码

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

www.51yixun.com

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

转载:https://blog.csdn.net/Lukey123456/article/details/101384746
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场