本文为您介绍一键登录H5端JSSDK的集成方法及接口的功能示例。
前提条件
集成JSSDK
您需要在H5页面中集成号码认证服务的JSSDK,并在服务端完成API对接。有以下两种集成JSSDK的方法,您可任选一种。
静态资源引入
登录号码认证产品控制台,在控制台右侧API&SDK标签,单击立即使用,进入API&SDK页面,根据页面提示下载H5端JSSDK,将下载的js文件引入项目目录。
<script type="text/javascript" charset="utf-8" src="./xxx/numberAuth-web-sdk.2.0.5.js"></script>
npm引入
下载npm资源:npm资源。
//加载npm资源
npm i aliyun_numberauthsdk_web
功能示例及参数说明
网络类型检查接口(getConnection)
- 此接口会判断当前用户的网络类型: Wi-Fi、移动数据网络(cellular)、unknown。重要 未开启移动数据网络的用户无法通过一键登录完成认证。
- 提前获取用户的网络类型,拦截使用Wi-Fi网络的用户,及时终止认证流程,节约资源并提升用户的认证体验。
- 建议认证前调用此接口,对netType为Wi-Fi的用户-提醒关闭W-iFi或者提供其他认证方式,对于netType为unknown和cellular的用户继续一键登录流程。
调用示例
var netType = phoneNumberServer.getConnection();
// console.log(netType);
// netType的值为 wifi cellular(移动数据网络)unknown(未知)
鉴权接口(checkLoginAvailable)
请求参数
参数名称 | 参数类型 | 是否必填 | 参数说明 |
---|---|---|---|
accessToken | string | 是 | 号码认证业务鉴权Token由阿里云对外的getAuthToken接口生成。 |
jwtToken | string | 是 | API鉴权Token由阿里云对外的getAuthToken接口生成。 |
timeout | number | 否 | 接口请求超时时间,默认值为10s。 |
success | function | 是 | 成功回调。 |
error | function | 是 | 失败回调。 |
返回参数
参数名称 | 参数说明 |
---|---|
code | 返回的状态码。
|
requestId | 请求ID,根据此ID可查询相关日志。 |
content | 运营商SDK的返回结果,方便客户定位问题。 |
msg | 返回结果的描述。 |
调用示例
var phoneNumberServer = new PhoneNumberServer();
// 调用之前先去用户服务端获取accessToken和jwtToken
phoneNumberServer.checkLoginAvailable({
accessToken: 'XXXXXXXXxx',
jwtToken:'******',
success:function(res){
console.log(res);
if(res.code===600000){
// 在此调用getLoginToken接口
}
},
error: function(res){
// 提示用户关闭Wi-Fi或者尝试其他登录方案
}
});
获取登录Token接口(getLoginToken)
在checkLoginAvailable成功的回调中调用此接口。
请求参数
参数名称 | 参数类型 | 是否必填 | 参数说明 |
---|---|---|---|
success | function | 是 | 成功回调。 |
error | function | 是 | 失败回调。 |
watch | function | 否 | 授权页状态监听函数。 |
protocolPageWatch | function | 是 | 预授权页状态监听函数。 |
authPageOption | object | 是 | 配置选项。 |
authPageOption字段说明
参数名称 | 参数类型 | 是否必填 | 参数说明 |
---|---|---|---|
mount | string | 否 | 指定挂载节点的ID,默认挂载到body标签。 |
navText | string | 否 | 导航栏标题文案,默认值:本机号码登录。 |
navBackImg | string | 否 | 导航栏返回按钮图片的src链接。 说明 仅全屏模式有返回按钮,此配置仅全屏模式生效。 |
subtitle | HTMLElement|string | 否 | 副标题导航栏下面的说明文案,不传则不显示。 |
isHideLogo | boolean | 否 | 是否隐藏Logo。取值:
|
logoImg | string | 否 | Logo图片设置,默认值:阿里云Logo。 |
numberLabel | HTMLElement|string | 否 | 手机号码前面的文案或图片,不传则不展示。 |
btnText | string | 否 | 按钮文案,默认值:登录。 |
agreeSymbol | string | 否 | 协议和协议之间链接符号,默认用“和”连接。 |
privacyVenderIndex | number | 否 | 运营商协议的位置,默认为2。
|
vendorPrivacyPrefix | string | 否 | 设置运营商协议前缀符号,仅支持设置如下字符中的任意一个,如<>、()、《》、【】、『』、[]、() |
vendorPrivacySuffix | string | 否 | 设置运营商协议后缀符号,仅支持设置如下字符中的任意一个,如<>、()、《》、【】、『』、[]、() |
privacyBefore | string | 否 | 设置开发者隐私条款前置自定义文案。默认:我已阅读并同意。 |
privacyEnd | string | 否 | 设置开发者隐私条款前置自定义文案。 |
privacyCheckedImg | HTMLImageElement | 否 | 默认为圆形勾选,如需自定义可传入需要的图片。 |
privacyOne | string | 否 | 自定义协议1,格式:['name',url]。 |
privacyTwo | string | 否 | 自定义协议2,格式:['name',url]。 |
showCustomView | boolean | 否 | 是否展示自定义控件。取值:
|
customView | Object | 否 | 添加此属性必须设置showCustomView为true,对象形式{element:'自定义节点',style:'自定义样式',js:'自定义交互'}。 |
isDialog | boolean | 否 | 是否弹窗样式。取值:
|
manualClose | boolean | 否 | 是否手动关闭弹窗/授权页。取值:
|
isPrePageType | boolean | 否 | 协议是否前置。取值:
|
isShowProtocolDesc | boolean | 否 | 预授权模式下,授权页弹窗是否展示协议。取值:
|
prePageTypeOption | Object | 否 | isPrePageType参数为true时,需传入mount。 |
isShowExtraBtn | boolean | 否 | 是否展示其他登录方式的按钮。默认不展示。取值:
|
extraBtn | HTMLElement | 否 | 登录按钮下方的自定义模块,方便用户自定义。 |
prePageTypeOption预授权页面配置
参数名称 | 参数类型 | 是否必填 | 参数说明 |
---|---|---|---|
mount | HTMLElement|string | 是 | 指定挂载节点的ID,此参数不传或者找不到会直接报错。 |
btnText | HTMLElement|string | 否 | 按钮文案,默认值:点击登录。 |
privacyOne | string | 否 | 自定义协议1,格式['name',url]。 |
privacyTwo | string | 否 | 自定义协议2,格式['name',url]。 |
tips | HTMLElement|string | 否 | 在预授权页面的登录按钮模块,可以加自己的小设计,提高可扩展性。 |
privacyVenderIndex | number | 否 | 运营商协议的位置,默认为2。
|
vendorPrivacyPrefix | string | 否 | 设置运营商协议前缀符号,仅支持设置如下字符中的任意一个,如<>、()、《》、【】、『』、[]、() |
vendorPrivacySuffix | string | 否 | 设置运营商协议后缀符号,仅支持设置如下字符中的任意一个,如<>、()、《》、【】、『』、[]、() |
privacyBefore | string | 否 | 设置开发者隐私条款前置自定义文案。默认:我已阅读并同意。 |
privacyEnd | string | 否 | 设置开发者隐私条款前置自定义文案。 |
privacyCheckedImg | HTMLImageElement | 否 | 默认为圆形勾选,如需自定义可传入需要的图片。 |
返回参数
参数名称 | 参数类型 | 参数说明 |
---|---|---|
code | string | 返回的状态码。
|
requestId | string | 请求ID,根据此ID可查询相关日志。 |
spToken | string | 运营商一键登录Token。 |
clearInput | function | 调用清空当前所有输入框,将光标置于第一个输入框。 |
focusOn | function | 入参为:1-4,将光标置于入参对应下标的输入框内。 |
setMessage | function | 设置弹出Toast提示框(有默认样式)。入参:
|
监听回调说明(watch)
参数名称 | 参数说明 |
---|---|
status | 授权页状态。
|
data | 监听函数返回的额外数据。 |
监听回调说明(protocolPageWatch)
参数名称 | 参数说明 |
---|---|
status(number) | 授权页状态。
|
data | 监听函数返回的额外数据。 |
data(watch, protocolPageWatch)参数说明
参数名称 | 参数说明 |
---|---|
requestId | 本地调用的唯一ID,根据此ID可查询相关日志。 |
调用示例
// 调用之前先去用户服务端获取accessToken和jwtToken
phoneNumberServer.getLoginToken({
authPageOption: {
navText: '测试',
subtitle: '', // 副标题
isHideLogo: false, // logo显示隐藏
logoImg: 'XXX',
btnText: '立即登录',
agreeSymbol: '、',
privacyOne: ['《中国移动认证服务条款》',''],
privacyTwo: ['《中国移动认证服务条款》', ''],
showCustomView: true,
customView:{
element: '<div class="btn_box other" onclick="clickEvent()">切换其他登录方式</div>',
style: '.btn_box.other{background: #fff; color: #f00}',
js: 'function clickEvent(){alert(666666)}'
},
privacyBefore: '我已阅读并同意',
privacyEnd: '',
vendorPrivacyPrefix: '《',
vendorPrivacySuffix: '》',
privacyVenderIndex: 2,
isDialog: true, // 是否是弹窗样式
manualClose: true // 是否手动关闭弹窗/授权页
isPrePageType: false,
isShowProtocolDesc: false,
// prePageTypeOption: {
// // mount: '',
// privacyOne: ['条款1', 'https://wap.cmpassport.com/resources/html/contract.html'],
// privacyTwo: ['条款2', 'https://wap.cmpassport.com/resources/html/contract.html'],
// // showCustomView: true,
// agreeSymbol: '及',
// tips: <div style={{ position: 'absolute', top: '10px', right: '10px', borderRadius: '30%', fontSize: '12px', color: '#fff'}}>tips</div>,
// btnText: '',
// }
},
success: res => {
console.log(res);
if(res.code===600000){
// 拿到spToken去服务端发起token验证
phoneNumberServer.closeLoginPage(); // 手动关闭授权页时调用关闭页面
res.clearInput(); // 清空输入框并将光标置于第一个输入框
res.focusOn(2); // 将光标置于第1-4个输入框
res.setMessage({ // 设置弹出toast提示框(有默认样式)
showMessage: true, // 是否弹出Toast提示框
messageContent: 'test content', // 弹出内容
messageStyle: { // 自定义弹窗样式,写入css样式即可
color: '#fff',
borderRadius: '8px',
},
time: 3000 // 弹出时间/ms,默认3000毫秒
});
}
},
error: res => {
// 提示用户关闭wifi或者尝试其他登录方案
},
watch: function(status, data){
// console.log('-----------------status', status, data);
// 当status为2时整个流程结束,比如如果按钮有loading状态此处置为false
},
});
authPageOption传入manualClose控制是否手动关闭弹窗,弹窗/授权页状态下调用phoneNumberServer.closeLoginPage关闭授权页面。
var phoneNumberServer = new PhoneNumberServer();
(弹窗/授权页已弹出后)
phoneNumberServer.closeLoginPage(); // 关闭授权页
样式说明
移动授权页样式说明
// 此处可修改导航栏整体样式:字体大小,字体颜色,背景颜色等
.page-type-container .nav {
}
// 此处可修改导航栏返回按钮的样式: 高度、宽度等
.page-type-container .nav .nav-back-icon-img {
}
// 此处可修改导航栏标题样式: 字体大小,颜色等
.page-type-container .nav .nav-title {
}
// 此处可修改logo容器的样式: 宽度 高度,圆角等
.page-type-container .logo {
}
// 此处修改电话号码的样式: 颜色、字体大小等
.page-type-container .number-con {
}
// 此处修改电话号码掩码的样式:宽度、高度、字体颜、色间距等
.page-type-container .number-con input {
}
// 此处修改协议勾选、选中时的颜色
.page-type-container .agreement .checke-1 svg g {
fill: blue;
}
// 此处修改协议区域的样式: 字体颜色,大小等
.page-type-container .agreement .agree-content {
}
// 此处修改协议名称的样式:颜色大小等
.page-type-container .agreement a {
}
// 此处修改登录按钮的样式:颜色大小背景色等
.page-type-container .submit-btn{
}
授权弹窗样式说明
// 此处可修改标题栏整体样式:字体大小、字体颜色、背景颜色等
.dialog-type-container .nav {
}
// 此处可修改标题样式: 字体大小,颜色等
.dialog-type-container .nav .nav-title {
}
// 此处可修改logo容器的样式: 宽度、高度、圆角等
.dialog-type-container .logo {
}
// 此处修改电话号码的样式: 字体颜色、字体大小等
.dialog-type-container .number-con {
}
// 此处修改电话号码掩码的样式:宽度、高度、字体颜、色间距等
.dialog-type-container .number-con input {
}
// 此处修改协议勾选、选中时的颜色
.dialog-type-container .agreement .checke-1 svg g {
fill: blue;
}
// 此处修改协议区域的样式: 字体颜色、大小等
.dialog-type-container .agreement .agree-content {
}
// 此处修改协议名称的样式:字体颜色、大小等
.dialog-type-container .agreement a {
}
// 此处修改登录按钮的样式:颜色大小背景色等
.dialog-type-container .submit-btn{
}
预授权模式样式说明
// 按钮样式
div.number-auth-demo .protocol-front-page-container .number-auth-btn-wrap {
// border-radius: 30px;
// width: 300px;
// height: 80px;
// color: #666;
}
返回码说明
返回码 | 说明 |
---|---|
600000 | 成功返回code。 |
600004 | 方案号不存在。 |
600009 | 无法判断运营商。 |
600010 | 未知异常。 |
600011 | 获取Token失败。 |
600013 | 运营商维护升级,该功能不可用。 |
600014 | 运营商维护升级,该功能调用次数已达上限。 |
600015 | 调用接口超时。 |
600025 | 接入方身份信息校验失败。 |
600028 | 入参错误(accessToken,jwtToken)。 |