clSDKShanYanSDKModule 封装了创蓝闪验sdk。本模块带有界面,打开后为一个具有完整功能授权页面。支持国内三大运营商 |
创建应用
应用的创建流程及APPID的获取,请查看「账号创建」文档 注意:如果应用有多个包名或签名不同的马甲包,须创建多个对应包名和签名的应用,否则马甲包将报包名或签名校验不通过。
快速体验示例Demo注:需运行真机到真机,安装SIM卡,打开手机流量开关,允许网络权限 - 到闪验官网申请创建应用,提供包名包签名/bundleID,得到对应的appID/appKey
- 搜索初始化方法shanyan.init,将appID换成自己的appid(appid安卓/iOS不同,分别与包名包签名/bundleID绑定)
- 在模块管理中导入闪验离线插件或云插件
- 在APP设置中上传对应包名包签名/bundleID的安卓iOS证书
- 分别云打包安卓iOS自定义Loader
- 手机安装自定义Loader,运行,设置自定义Loader的IP和端口,连接到APICloudStudio2示例工程
- WIFI同步APICloudStudio2项目到自定义Loader
引用方式(Android&iOS)var shanyan = api.require('clSDKShanYanSDKModule')
Android部分
一、免密登录API使用说明1.初始化
使用一键登录功能前,必须先进行初始化操作。
调用示例
shanyan = api.require('CLSDKShanYanSDKModule')shanyan.init({appid:'loXN4jDs'},function(ret, err){ alert(JSON.stringify(ret)); console.log("callback---button--shanyanSdkInit========"+ret.code+"result===="+ret.result); });
参数描述
返回参数含义如下:
2.预取号
- 建议在判断当前用户属于未登录状态时使用,已登录状态用户请不要调用该方法
- 建议在执行拉取授权登录页的方法前,提前一段时间调用预取号方法,中间最好有2-3秒的缓冲(因为预取号方法需要1~3s的时间取得临时凭证)
- 请勿频繁的多次调用、请勿与拉起授权登录页同时和之后调用。
- 避免大量资源下载时调用,例如游戏中加载资源或者更新补丁的时候要顺序执行
调用示例:
shanyan.preLogin(function(ret, err){ alert(JSON.stringify(ret)); console.log("callback---button--shanyanSdkGetPhoneInfo========"+ret.code+"result===="+ret.result); });
返回参数含义如下:
3.拉起授权页- 调用拉起授权页方法后将会调起运营商授权页面。已登录状态请勿调用 。
- 每次调用拉起授权页方法前均需先调用授权页配置方法,否则授权页可能会展示异常。
- 对应两个回调,一个是拉起授权页的回调,一个是点击一键登录的回调(包含返回键)
调用示例: var param = {isFinish:true}; shanyan.openActivity(param,function(ret, err){ //alert(JSON.stringify(ret)); console.log("fff"+JSON.stringify(ret)); });
参数描述 | | | | | 点击授权页一键登录按钮有回调时是否自动销毁授权页: true:自动销毁 false:不自动销毁,开发者需主动调用销毁授权页方法进行授权页销毁操作 |
当type=0时是拉起授权页回调(ret.type):
当type=1时是一键登录回调(ret.type): | | | | | code为1011:点击返回按钮(包括物理返回键) code为1000:点击一键登录获取token成功 其他:点击一键登录获取token失败 | | | |
当第二个回调外层code为1000时,result的返回为
{"token": ""}
含义如下:
4.销毁授权页A.授权页面自动销毁 1.在授权登录页面,当用户主动点击左左上角返回按钮时,返回码为1011,SDK将自动销毁授权页; 2.安卓 SDK,当用户点击手机的硬件返回键(相当于取消登录),返回码为1011,SDK将自动销毁授权页 3.当用户设置一键登录或者其他自定义控件为自动销毁时,得到回调后,授权页面会自动销毁
B.授权页手动销毁 1.当设置一键登录为手动销毁时,点击授权页一键登录按钮成功获取token不会自动销毁授权页,请务必在回调中处理完自己的逻辑后手动调用销毁授权页方法。 2.当设置自定义控件为手动销毁时,请务必在回调中处理完自己的逻辑后手动调用销毁授权页方法。
调用示例
shanyan.finishAuthActivity();
5.置换手机号当一键登录外层code为1000时,您将获取到返回的参数,请将这些参数传递给后端开发人员,并参考「服务端」文档来实现获取手机号码的步骤。
6.授权页界面配置
调用该方法可实现对三网运营商授权页面个性化设计,每次调用拉起授权页方法前必须先调用该方法,否则授权界面会展示异常。(三网界面配置内部实现逻辑不同,请务必使用移动、联通、电信卡分别测试三网界面)
二、本机认证API使用说明
注:本机认证、免密登录可共用初始化,两个功能同时使用时,只需调用一次初始化即可。 1.初始化
同免密登录初始化
2.本机号校验
在初始化执行之后调用,本机号校验界面需自行实现,可以在多个需要校验的页面中调用。
调用示例:
shanyan.startAuthentication(function(ret,err){ console.log("fff"+JSON.stringify(ret)); });
返回参数含义如下:
当外层code为2000时,result的返回为
{ "token":""}
含义如下:
3.校验手机号
当本机号校验外层code为2000时,您将获取到返回的参数,请将这些参数传递给后端开发人员,并参考「服务端」文档来实现校验本机号的步骤
iOS部分
前置条件- 闪验SDK支持Xcode 9.4.1,iOS8.0+及以上版本。
- 闪验SDK支持中国移动、联通、电信4G的取号能力。
- 闪验SDK支持网络环境为
a.纯数据网络 b.数据网络与wifi网络双开 一、免密登录API使用说明1.初始化
<script type="text/javascript" src="../script/api.js"></script>//模块加载let shanyan = api.require('CLSDKShanYanSDKModule')/**初始化*/shanyan.init(option: callBack
参数描述 [td]
| 参数 | 是否必填 | 类型 | 说明 | option | appId | 必填 | String | 闪验appID | callBack | ret,err | 选填 | function | 初始化回调 |
所有回调统一形式:
function(ret, err) { //iOS回调 if (err != null) { //失败 } else { //成功 }});
[td] | 字段 | 类型 | 说明 | code | Number | 外层code | message | String | 外层描述(概要) | data | Object | 数据 | errorCode | Number | 内层code | errorDomain | String | 外层描述 | errorUserInfo | Object | 错误详情 |
[td] | 字段 | 类型 | 说明 | errorCode | Number | 内层code | errorDomain | String | 外层描述 | errorUserInfo | Object | 错误详情 |
接口作用 初始化SDK :传入用户的appID,获取本机运营商,读取缓存,获取运营商配置,初始化SDK
使用场景 - 建议在app启动时调用
- 必须在一键登录前至少调用一次
- 只需调用一次,多次调用不会多次初始化,与一次调用效果一致
2.预取号
/** * 预取号(获取临时凭证) * 建议在判断当前用户属于未登录状态时使用,已登录状态用户请不要调用该方法 */func preGetPhonenumber(callBack:function);
接口作用 电信、联通、移动预取号 :初始化成功后,如果当前为电信/联通/移动,将调用预取号,可以提前获知当前用户的手机网络环境是否符合一键登录的使用条件,成功后将得到用于一键登录使用的临时凭证,默认的凭证有效期10min(电信)/30min(联通)/60min(移动)。 使用场景 - 建议在执行一键登录的方法前,提前一段时间调用此方法,比如调一键登录的vc的onLoad中,或者rootVC的rootVC中,或者app启动后,此调用将有助于提高闪验拉起授权页的速度和成功率
- 不建议调用后立即调用拉起授权页方法(此方法是异步)
- 此方法需要1~2s的时间取得临时凭证,因此也不建议和拉起授权页方法一起串行调用
- 不建议频繁的多次调用和在拉起授权页后调用
- 建议在判断当前用户属于未登录状态时使用,已登录状态用户请不要调用该方法
3.拉起授权页
//openLoginAuthListener:调起授权页回调shanyan.openLoginAuthListener(option:Object,callBack:function()) //oneKeyLoginListener:调起授权页成功,后续回调 shanyan.oneKeyLoginListener(option:Object,callBack:function());//调起授权页shanYanSDKModule.quickAuthLoginWithConfigure(clUIConfigure;
参数描述 [td]参数 | 类型 | 说明 | clUIConfigure 必填 | CLUIConfigure | 授权页控件属性配置对象 | openLoginAuthListener选填 | function | 拉起授权页的回调,拉起页面成功失败均触发 | oneKeyLoginListener 必填 | | 一键登录回调,用于接收一键登录的结果,点一键登录成功失败均触发,点自带的返回按钮也触发 |
使用场景 - 用户进行一键登录操作时,调用一键登录方法,如果初始化成功,SDK将会拉起授权页面,用户授权后,SDK将返回取号 token给到应用客户端。
- 可以在多处调用
- 需在调用预初始化方法之后调用
一键登录逻辑说明 - 存在调用预初始化时获取的临时凭证,调用一键登录方法将立即拉起授权页面
- openLoginAuthListener 拉起授权页监听回调,拉起成功或失败均触发
- 不存在临时凭证或临时凭证过期时(临时凭证有效期电信10min、联通30min、移动60min),调用一键登录方法,将有一个很短的时延,待取号成功后拉起授权页面
- 取号失败时,返回失败
一键登录 oneKeyLoginListenerResult:正确返回示例
{ "message":"获取联通token成功", "data": { "token":"A2-7NA_jWQuN0XsJsZQOY8BtvdKtrhNK9QStebzzyzgh7ElebpB8xGy3rapp4yyxX8-VEVgMhiB3wO4P0PnCZNjtPAZO9KfeODdYxhgn5Qn8vnxOvgk4_Ov_39d56-v1p87-IcFHKlji4nhvCd1VmrxOSHx6KB6i6lZqFYqGgcbKfpG-yaGL6pcY4T9mbrtsOpbUhrdamE7eA1KaruyOdkL1SThGJZt_-8imf91EyrXckg=" }, "code":1000}
4.销毁授权页A.授权页面自动销毁 1.在授权登录页面,当用户主动点击左左上角返回按钮时,返回码为1011,SDK将自动销毁授权页; 2.当用户设置一键登录或者其他自定义控件为自动销毁时,得到回调后,授权页面会自动销毁
B.授权页手动销毁 1.当设置一键登录为手动销毁时,点击授权页一键登录按钮成功获取token不会自动销毁授权页,请务必在回调中处理完自己的逻辑后手动调用销毁授权页方法。 2.当设置自定义控件为手动销毁时,请务必在回调中处理完自己的逻辑后手动调用销毁授权页方法。
调用示例
shanyan.finishAuthControllerCompletion();
5.置换手机号当一键登录oneKeyLoginListenerResult 回调err为null时,您将获取到返回的参数,请将这些参数传递给后端开发人员,并参考「服务端」文档来实现获取手机号码的步骤。
6.授权页界面配置
调用该方法可实现对三网运营商授权页面个性化设计。(三网界面配置内部实现逻辑不同,请务必使用移动、联通、电信卡分别测试三网界面)
配置字段名 | 类型 | 类型说明 | 描述 | clBackgroundImg | String | 图片路径 | 授权页-背景图片 |
| clNavigationBarHidden | Bool | true/false | 导航栏 是否隐藏 | clNavigationBackgroundClear | Bool | true/false | 导航栏 背景透明 | clNavigationBackBtnImage | String | 图片路径 | 导航栏左侧返回按钮图片 | clNavigationBackBtnHidden | Bool | true/false | 导航栏自带返回按钮隐藏 | clNavBackBtnAlimentRight | Bool | true/false | 自带返回(关闭)按钮位置居右 | clNavigationBottomLineHidden | Bool | true/false | 导航栏分割线 是否隐藏 | clNavigationTintColor | Array | [r,g,b,a] | 导航栏 文字颜色 | clNavigationBarTintColor | Array | [r,g,b,a] | 导航栏 背景色 | clNavigationBackgroundImage | String | 图片路径 | 导航栏 背景图片 | clNavigationShadowImage | String | 图片路径 | 导航栏 导航栏底部分割线(图片 | clNavigationBarStyle | Number | 枚举值 | UIBarStyleBlack |
| clLogoImage | String | 图片路径 | LOGO图片 | clLogoCornerRadius | Number | float | LOGO图片 | clLogoHiden | Bool | true/false | LOGO显隐 | | clPhoneNumberColor | Array | [r,g,b,a] | 手机号颜色 | clPhoneNumberFont | Number | float | 手机号字体 | clPhoneNumberTextAlignment | Number | 枚举值 | 手机号对齐方式 | | clLoginBtnText | String | text | 按一键登录钮文字 | clLoginBtnTextColor | Array | [r,g,b,a] | 一键登录按钮文字颜色 | clLoginBtnBgColor | Array | [r,g,b,a] | 一键登录按钮背景颜色 | clLoginBtnTextFont | Number | float | 一键登录按钮文字字体 | clLoginBtnNormalBgImage | String | 图片路径 | 一键登录按钮背景图片 | clLoginBtnHightLightBgImage | String | 图片路径 | 一键登录按钮背景高亮图片 | clLoginBtnBorderColor | Array | [r,g,b,a] | 一键登录按钮边框颜色 | clLoginBtnCornerRadius | Number | float | 一键登录按钮圆角 | clLoginBtnBorderWidth | Number | float | 一键登录按钮边框 | | clAppPrivacyColor | Array | [[r,g,b,a],[r,g,b,a]] | 隐私条款名称颜色:[基础文字颜色rgba,款颜色rgba] eg.[[1,0,1,1],[1,0.8,0.8,1]] | clAppPrivacyTextFont | Number | float | 隐私条款文字字体 | clAppPrivacyTextAlignment | Number | 枚举值 | 隐私条款文字对齐方式 | clAppPrivacyPunctuationMarks | Bool | true/false | 运营商隐私条款书名号 | clAppPrivacyLineSpacing | Number | float | 多行时行距 | clAppPrivacyNeedSizeToFit | Bool | true/false | 是否需要sizeToFit,设置后与宽高约束的冲突请自行考虑 | clAppPrivacyAbbreviatedName | String | text | 隐私条款--APP名称简写 默认取CFBundledisplayname 设置描述文本四后此属性无效 | clAppPrivacyFirst | Array | [name,url] | 隐私条款一:需同时设置Name和UrlString | clAppPrivacySecond | Array | [name,url] | 隐私条款二:需同时设置Name和UrlString | clAppPrivacyNormalDesTextFirst | String | text | 描述文本一 default:"同意" | clAppPrivacyNormalDesTextSecond | String | text | 描述文本二 default:"和" | clAppPrivacyNormalDesTextThird | String | text | 描述文本三 default:"、" | clAppPrivacyNormalDesTextFourth | String | text | 描述文本四 default: "并授权AppName使用认证服务" | clAppPrivacyWebBackBtnImage | String | 图片路径 | 隐私协议WEB页面导航返回按钮图片 | | clSloganTextFont | Number | float | 运营商品牌标签文字字体 | clSloganTextColor | Array | [r,g,b,a] | 运营商品牌标签文字颜色 | clSlogaTextAlignment | Number | 枚举值 | 运营商品牌标签文字对齐方式 | | clCheckBoxHidden | Bool | true/false | 协议勾选框 | clCheckBoxValue | Bool | true/false | 协议勾选框默认值(默认不选中 | clCheckBoxSize | Array | [width,height] | 协议勾选框 尺寸 | clCheckBoxImageEdgeInsets | Array | [top,left,bottom,right] | 协议勾选框 UIButton.image图片缩进 | clCheckBoxVerticalAlignmentToAppPrivacyTop | Bool | true/false | 协议勾选框 设置CheckBox顶部与隐私协议控件顶部对齐 | clCheckBoxVerticalAlignmentToAppPrivacyCenterY | Bool | true/false | 协议勾选框 设置CheckBox顶部与隐私协议控件竖向中心对齐 | clCheckBoxUncheckedImage | String | 图片路径 | 协议勾选框 非选中状态图片 | clCheckBoxCheckedImage | String | 图片路径 | 协议勾选框 选中状态图片 | | clLoadingSize | Array | [width,height] | Loading 大小 | clLoadingCornerRadius | Number | float | Loading 圆角 | clLoadingBackgroundColor | Array | [r,g,b,a] | Loading 背景色 | clLoadingTintColor | Array | [r,g,b,a] | Loading Indicator渲染色 | | shouldAutorotate | Bool | true/false | 是否支持自动旋转 | supportedInterfaceOrientations | Number | 枚举值 | 支持方向 | preferredInterfaceOrientationForPresentation | Number | 枚举值 | 默认方向 | | clAuthTypeUseWindow | Bool | true/false | 以窗口方式显示 default is NO | clAuthWindowCornerRadius | Number | float | 窗口圆角 | clAuthWindowModalTransitionStyle | Number | 枚举值 | 弹出方式 | | clOrientationLayOutPortrait | Object | CLOrientationLayOut | 布局类(竖屏) | clOrientationLayOutLandscape | Object | CLOrientationLayOut | 布局类(横屏) |
布局类:CLOrientationLayOut: 配置字段名 | 类型 | LOGO图片 | clLayoutLogoLeft | Number | clLayoutLogoTop | Number | clLayoutLogoRight | Number | clLayoutLogoBottom | Number | clLayoutLogoWidth | Number | clLayoutLogoHeight | Number | clLayoutLogoCenterX | Number | clLayoutLogoCenterY | Number | | 手机号显示控件 | clLayoutPhoneLeft | Number | clLayoutPhoneTop | Number | clLayoutPhoneRight | Number | clLayoutPhoneBottom | Number | clLayoutPhoneWidth | Number | clLayoutPhoneHeight | Number | clLayoutPhoneCenterX | Number | clLayoutPhoneCenterY | Number | | 一键登录授权按钮 【不得隐藏】 | clLayoutLoginBtnLeft | Number | clLayoutLoginBtnTop | Number | clLayoutLoginBtnRight | Number | clLayoutLoginBtnBottom | Number | clLayoutLoginBtnWidth | Number | clLayoutLoginBtnHeight | Number | clLayoutLoginBtnCenterX | Number | clLayoutLoginBtnCenterY | Number | | 隐私条款Privacy【运营商隐私条款 不得隐藏, 用户条款不限制】 | clLayoutAppPrivacyLeft | Number | clLayoutAppPrivacyTop | Number | clLayoutAppPrivacyRight | Number | clLayoutAppPrivacyBottom | Number | clLayoutAppPrivacyWidth | Number | clLayoutAppPrivacyHeight | Number | clLayoutAppPrivacyCenterX | Number | clLayoutAppPrivacyCenterY | Number | | 运营商品牌标签:"认证服务由中国移动/联通/电信提供 | clLayoutSloganLeft | Number | clLayoutSloganTop | Number | clLayoutSloganRight | Number | clLayoutSloganBottom | Number | clLayoutSloganWidth | Number | clLayoutSloganHeight | Number | clLayoutSloganCenterX | Number | clLayoutSloganCenterY | Number | | 窗口模式 | 窗口中心 | | clAuthWindowOrientationCenter | Number | 窗口左上角 | | clAuthWindowOrientationOrigin | Number | 窗口大小:宽 | | clAuthWindowOrientationWidth | Number | 窗口大小:高 | | clAuthWindowOrientationHeight | Number |
自定义控件 widgets:自定义控件允许自定义导航栏左侧和右侧按钮,将替换sdk自带的返回按钮。允许添加控件到授权页上。
| 控件通用属性 | widgetId | String | 字符标记 | type | String | 自定义控件类型:Button:按钮,ImageView:图片 TextView:文本 | backgroundColor | Array | 控件背景色[r,g,b,a] | cornerRadius | Number | 圆角,设置圆角时请设置masksToBounds:true | masksToBounds | Bool | 圆角相关,设置圆角时请设置true |
| 布局相关属性 通用 (相对授权页,全屏,从左至右,从上至下距离为正值,反之为负值) | clLayoutLeft | Number | 控件与授权页左侧距离 | clLayoutTop | Number | 控件与授权页顶部距离 | clLayoutRight | Number | 控件与授权页右侧距离,一般为负值 | clLayoutBottom | Number | 控件与授权页底部距离,一般为负值 | clLayoutWidth | Number | 控件宽度 | clLayoutHeight | Number | 控件高度 | clLayoutCenterX | Number | 控件与授权页水平中心偏移量,0:水平居中,正值:中心向右偏移,负值:中心向左偏移 | clLayoutCenterY | Number | 控件与授权页垂直中心偏移量,0:垂直居中,正值:中心向下偏移,负值:中心向上偏移 |
| Button独有属性 | navPosition | String | 按钮位置,navleft:添加到导航栏左侧 ,navright:添加到导航栏右侧,不设置默认添加到授权页上,当设置为导航栏控件时,仅宽高可设置,位置固定在导航栏左右标准位置 | textContent | String | 文字 String | textFont | Number | 字体大小 | textColor | Array | 文字颜色[r,g,b,a] | image | String | 按钮左侧图片,非背景图,传图片路径 | isFinish | Bool | 点击后自动关闭授权页 |
| TextView独有属性 | textContent | String | 文字 String | textFont | Number | 字体大小 | textColor | Array | 文字颜色[r,g,b,a] | numberOfLines | Number | 行数:默认单行, 0:无限,自动换行,其他:指定行数 | textAlignment | Number | 对齐方式,默认居左, 0: center 1: left 2: right |
| ImageView独有属性 | image | String | 背景图,传图片路径 |
二、本机认证API使用说明
注:本机认证、免密登录可共用初始化,两个功能同时使用时,只需调用一次初始化即可。 1.初始化
同免密登录初始化
2.本机号校验
在初始化执行之后调用,本机号校验界面需自行实现,可以在多个需要校验的页面中调用。
调用示例:
function startAuthentication() { api.showProgress(); setTimeout(function() { api.hideProgress(); }, 5000); shanyan.startAuthentication(function(ret, err) { api.hideProgress(); let platform = api.systemType; if (platform == 'android') { if (ret.code == 1000) { //成功 api.alert({ title: 'SDK获取Token成功', msg: JSON.stringify(ret.result.token), }); } else { //失败 } } else if (platform == 'ios') { if (err != null) { //iOS error存在即为失败 } else { //成功 api.alert({ title: 'SDK获取Token成功', msg: JSON.stringify(ret.data.token), }); } } api.toast({ msg: JSON.stringify(ret), location: 'middle' }); console.log(JSON.stringify(ret)); });}
返回参数含义如下:
字段 | 类型 | 含义 | result | CLComplete | 返回信息 |
当result.errorCode不为空时,返回为
{ "message":"本机号校验获取联通token成功", "data": { "token":"A2-7NA_jWQuN0XsJsZQOY8BtvdKtrhNK9QStebzzyzgh7ElebpB8xGy3rapp4yyxX8-VEVgMhiB3wO4P0PnCZNjtPAZO9KfeODdYxhgn5Qn8vnxOvgk4_Ov_39d56-v1p87-IcFHKlji4nhvCd1VmrxOSHx6KB6i6lZqFYqGgcbKfpG-yaGL6pcY4T9mbrtsOpbUhrdamE7eA1KaruyOdkL1SThGJZt_-8imf91EyrXckg=" }, "code":1000}
含义如下:
字段 | 类型 | 含义 | token | String | 用来和后台校验手机号。一次有效。 |
3.校验手机号
当本机号校验获取到token时,请将token传递给后端开发人员,并参考「服务端」文档来实现校验本机号的步骤 三、返回码
外层返回码 | 返回码描述 | 1000 | 一键登录成功,解析result,可得到网络请求参数 | 1011 | 用户取消免密登录(点击返回按钮) | 1001 | SDK初始化失败 | 1023 | 预取号/取号失败 | 1003 | 拉起授权页失败/一键登录失败/获取token失败 | 1008 | 未开启移动网络 | 1009 | 未检测/识别到sim卡 | 其他 | 其他错误 |
该返回码为闪验SDK自身的返回码,iOS返回码仅供参考,不建议用于代码逻辑判断,请注意1003及1023错误内均含有运营商返回码,具体错误在碰到之后查阅「返回码」
Demo示例包:
|