更新记录

2.8.5(2023-11-06)

兼容 Android/iOS 在高版本 HBuilderX 自定义基座调试时,图片资源无法访问的问题

2.8.4(2023-09-04)

  1. 更新 iOS 原生SDK 为 2.8.4 版本
    2. iOS 新增授权弹窗相关属性及自定义授权弹窗功能

2.7.4(2022-04-11)

  1. iOS 优化原生调用 JS 方式
  2. Android 新增支持隐藏 Slogan 和定制 Slogan 文本
  3. 更新原生与运营商 SDK
  4. 增加服务条款抖动动画、多语言配置、gif 背景、背景视频等 UI 配置属性
  5. 增加授权按钮点击监听、自定义未勾选授权页面隐私协议前勾选框时,点击授权页面登录按钮时提示
查看更多

平台兼容性

Android Android CPU类型 iOS
适用版本区间:5.0 - 11.0 armeabi-v7a:支持,arm64-v8a:支持,x86:支持 适用版本区间:11 - 16

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios

注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择


DCloud 插件集成文档

创建应用

登录极验后台创建应用获取 appId 和 key,具体步骤可参照 账号创建

引用方式

var gtSDKModule = uni.requireNativePlugin("Geetest-GTOneLoginSDKModule");

Android

前置条件

  • 极验 SDK 支持 Android Studio 2.1.3 及以上版本,Android 5.0及以上版本
  • 极验 SDK uni-app 插件支持 HBuildX 3.3.13 及以上版本
  • 极验 SDK 支持中国移动 5G/4G/3G/2G、联通 5G/4G/3G、电信5G/4G(2G/3G 网络下时延相对较高,成功率相对较低) 的取号能力
  • 极验 SDK 支持网络环境为:
  1. 纯数据网络
  2. 数据网络与 Wifi 网络同时开启
  • 对于双卡手机,极验 SDK 取当前流量卡号

一键登录 API 使用说明

初始化

方法描述

SDK 初始化并预取号。

代码示例

gtSDKModule.register({
        `appid`: "您在极验后台创建应用时生成的 appid"
    }, result => {
        //初始化回调
        this.gt_code = JSON.stringify(result.jscode);
        this.gt_result = JSON.stringify(result.jsresult);
    });

参数说明

  • 接口参数说明:
参数 类型 说明
appid String 极验后台配置唯一产品 APPID,请在官网申请
  • 返回参数描述:
字段 类型 含义
jscode Number 200:成功;其他:失败
jsresult String 返回信息

拉起授权页

  • 拉起授权页requestToken

方法描述

在需要登录的地方调用requestToken接口拉起一键登录授权页,待用户点一键登录授权后获取运营商token,获取成功后即可请求服务端换取本机手机号码。(调用该方法前可以调用isPreGetTokenResultValidate判断预取号是否成功)建议在调用该方法前,提前一段时间进行预取号。请勿频繁的多次调用。

代码示例

gtSDKModule.requestToken({'ThemeConfig':themeConfig, 'CustomView':widgetConfig}, (result) => {
    //拉起授权页与一键登录取号回调
    switch(result.jscode) {
        case 100:// onResult
            let status = result.status;
            // status 取值说明参考一键登录官方文档返回码说明:
            // https://docs.geetest.com/onelogin/deploy/android#1%E3%80%81OneLogin%EF%BC%88%E4%B8%80%E9%94%AE%E7%99%BB%E5%BD%95%EF%BC%89
            if(status == 200) { // 获取 token 成功
                let processId = result.process_id;
                let token = result.token;
                let authcode = result.authcode;
            } else {
                uni.showToast({
                    icon: "none",
                    title: "授权失败" + JSON.stringify(result),
                    duration: 2000
                });
            }
            this.gt_code = status
            this.gt_result = JSON.stringify(result);
            gtSDKModule.dismissAuthActivity();
            break;
        case 101:// onPrivacyClick
            let name = result.name;
            let url = result.url;
            console.log("=========== requestToken name =============== " + name);
            console.log("=========== requestToken url ================ " + url);
            break;
        case 102:// onPrivacyCheckBoxClick
            let isChecked = result.isChecked;
            console.log("=========== requestToken isChecked =============== " + isChecked);
            break;
        case 103:// onLoginButtonClick
            break;
        case 104:// onLoginLoading
            break;
        case 105:// onAuthActivityCreate
            break;
        case 106:// onAuthWebActivityCreate
            break;
        case 107:// onRequestTokenSecurityPhone
            let phone = result.phone;
            console.log("=========== requestToken phone =================== " + phone);
            break;
        case 120:// 自定义控件点击事件回调
            let viewId = result.jsresult;
            switch(viewId) {
                case "weixin_login":
                    console.log("=========== requestToken =================== " + "点击微信");
                    break;
                case "qq_login":
                    console.log("=========== requestToken =================== " + "点击 QQ");
                    break;
                case "weibo_login":
                    console.log("=========== requestToken =================== " + "点击微博");
                    break;
            }
    }
});

参数说明

  • 接口参数说明:

授权页 UI 配置 ThemeConfig 与自定义 UI 配置 CustomView,详细配置说明请参考「授权页 UI 配置」章节。

  • 返回参数描述:
字段 类型 含义
jscode Number 外层返回码
jsresult String 返回信息
status Number jscode=100 时的内层返回码
  • jscode 返回码说明
取值 回调 含义 可用参数
100 onResult 一键登录成功、失败、拉起授权页失败、授权页返回、切换账号等回调 status 内层返回码
101 onPrivacyClick 隐私条款点击 name: 隐私条款名称
url: 隐私条款地址
102 onPrivacyCheckBoxClick 授权页选择框 CheckBox 点击回调 isChecked:CheckBox 是否勾选
103 onLoginButtonClick 登录按钮点击回调
104 onLoginLoading 点一键登录时弹出自定义对话框式 loading 时机
105 onAuthActivityCreate 授权页面拉起回调
106 onAuthWebActivityCreate 隐私条款页面拉起回调
107 onRequestTokenSecurityPhone 获取用于界面展示的脱敏手机号 phone:脱敏手机号
120 自定义控件回调 自定义 UI 控件点击事件回调 viewId:自定义控件 Id
  • status 返回码说明

当外层返回码为 100 时,返回信息包含一键登录成功、失败、拉起授权页失败、授权页返回、切换账号等回调信息,具体请参考官网一键登录返回码说明文档。当返回码为 200 时,返回信息包含一键登录的 token 信息,请将这些参数传递给后端开发人员,并参考「服务端」文档来实现获取手机号码的步骤。

销毁授权页

  • 关闭授权页dismissAuthActivity

方法描述

用户主动关闭授权页。原生 SDK 除了返回按钮触发关闭以外,默认是不 finsih 授权页的,需要开发者在回调结束后自行实现关闭授权页

代码示例

gtSDKModule.dismissAuthActivity();

授权页 UI 配置

  1. 授权页 UI 配置 ThemeConfig

配置该参数可实现对一键登录授权页进行个性化配置,每次调用拉起授权页方法时都需要传入该参数,否则授权页界面将按照默认配置进行展示。详细配置说明请参考「授权页 UI 配置」章节。

代码示例

/**
* 授权页主题样式
* 0:浮窗式
* 1:弹窗式
* 2:沉浸式
* 3:横屏
*/
let themeStyle = 2;
let themeConfig = {};
let widgetConfig = {};
switch(themeStyle) {
    case 0: // 底部浮窗
        themeConfig = {
            isDialogTheme:true, dialogWidth:width, dialogHeight:500, dialogX:0, dialogY:0, isDialogBottom:true, isWebViewDialogTheme:true,
            authBGImgPath:'gt_one_login_bg',
            navColor:0xFF3973FF, authNavHeight:49, authNavTransparent:true, authNavGone:false,
            navText:'一键登录', navTextColor:0xFFFFFFFF, navTextSize:17, navTextMargin:48,
            navWebTextNormal:false, navWebText:'服务条款', navWebTextColor:0xFF000000, navWebTextSize:17,
            returnImgPath:'gt_one_login_ic_chevron_left_black', returnImgWidth:40, returnImgHeight:40, returnImgHidden:false, returnImgOffsetX:8,
            logoImgPath:'gt_one_login_logo', logoWidth:71, logoHeight:71, logoHidden:false, logoOffsetY:120, logoOffsetY_B:0, logoOffsetX:0,
            sloganColor:0xFFA8A8A8, sloganSize:10, sloganOffsetY:350, sloganOffsetY_B:0, sloganOffsetX:0,
            numberColor:0xFF3D424C, numberSize:24, numberOffsetY:180, numberOffsetY_B:0, numberOffsetX:0,
            switchText:'切换账号', switchColor:0xFF3973FF, switchSize:14, switchHidden:false, switchOffsetY:230, switchOffsetY_B:0, switchOffsetX:0,                                
            logBtnImgPath:'gt_one_login_btn', logBtnUncheckedImgPath:'gt_one_login_btn_unchecked',
            logBtnWidth:290, logBtnHeight:45, logBtnOffsetY:290, logBtnOffsetY_B:0, logBtnOffsetX:0,
            logBtnText:'一键登录', logBtnColor:0xFFFFFFFF, logBtnTextSize:18,
            loadingView:'umcsdk_load_dot_white', loadingViewWidth:20, loadingViewHeight:20, loadingViewOffsetRight:12,
            unCheckedImgPath:'gt_one_login_unchecked', checkedImgPath:'gt_one_login_checked', privacyState: false, privacyCheckBoxWidth:12, privacyCheckBoxHeight:12,
            privacyLayoutWidth:256, privacyOffsetY:0, privacyOffsetY_B:18, privacyOffsetX:0, isUseNormalWebActivity:true,
            baseClauseColor:0xFFA8A8A8, clauseColor:0xFF3973FF, privacyClauseTextSize:10, 
            privacyTextViewTv1:'登录即同意', privacyTextViewTv2:'和', privacyTextViewTv3:'、', privacyTextViewTv4:'并使用本机号码登录',
            clauseNameOne:'应用自定义服务条款一', clauseUrlOne:'https://docs.geetest.com/onelogin/deploy/android' // 使用此方式自定义服务条款的,最多只能自定义两个,留空的一个native SDK会自动填充对应运营商的服务条款
        }
        break;
    case 1: // 居中弹窗
        themeConfig = {
            isDialogTheme:true, dialogWidth:popWidth, dialogHeight:popHeight, dialogX:0, dialogY:0, isDialogBottom:false, isWebViewDialogTheme:true,
            returnImgPath:'gt_one_login_ic_chevron_left_black', returnImgWidth:40, returnImgHeight:40, returnImgHidden:false, returnImgOffsetX:8,
            logoImgPath:'gt_one_login_logo', logoWidth:71, logoHeight:71, logoHidden:false, logoOffsetY:60, logoOffsetY_B:0, logoOffsetX:0,
            sloganColor:0xFFA8A8A8, sloganSize:10, sloganOffsetY:270, sloganOffsetY_B:0, sloganOffsetX:0,
            numberColor:0xFF3D424C, numberSize:24, numberOffsetY:125, numberOffsetY_B:0, numberOffsetX:0,
            switchText:'切换账号', switchColor:0xFF3973FF, switchSize:14, switchHidden:false, switchOffsetY:165, switchOffsetY_B:0, switchOffsetX:0,                                
            logBtnImgPath:'gt_one_login_btn', logBtnUncheckedImgPath:'gt_one_login_btn_unchecked',
            logBtnWidth:268, logBtnHeight:45, logBtnOffsetY:220, logBtnOffsetY_B:0, logBtnOffsetX:0,
            logBtnText:'一键登录', logBtnColor:0xFFFFFFFF, logBtnTextSize:18,
            loadingView:'umcsdk_load_dot_white', loadingViewWidth:20, loadingViewHeight:20, loadingViewOffsetRight:12,
            unCheckedImgPath:'gt_one_login_unchecked', checkedImgPath:'gt_one_login_checked', privacyState: false, privacyCheckBoxWidth:12, privacyCheckBoxHeight:12,
            privacyLayoutWidth:256, privacyOffsetY:0, privacyOffsetY_B:1, privacyOffsetX:0, isUseNormalWebActivity:true,
        }
        break;
    case 2: // 全屏模式
        themeConfig = {
            statusBarColor:0xffffffff, navigationBarColor:0xffffffff, isLightColor:true,
            returnImgPath:'gt_one_login_ic_chevron_left_black', returnImgWidth:40, returnImgHeight:40, returnImgHidden:false, returnImgOffsetX:0,
            logBtnImgPath:'gt_one_login_btn', logBtnUncheckedImgPath:'gt_one_login_btn_unchecked',
            logBtnWidth:290, logBtnHeight:45, logBtnOffsetY:310, logBtnOffsetY_B:0, logBtnOffsetX:0,
            logBtnText:'登录', logBtnColor:0xFFFFFFFF, logBtnTextSize:18,
            loadingView:'umcsdk_load_dot_white', loadingViewWidth:20, loadingViewHeight:20, loadingViewOffsetRight:12,
            privacyClauseTextStrings:["登录即同意", "应用自定义服务条款一", "https://docs.geetest.com/onelogin/deploy/android", "",
                "和", "应用自定义服务条款二", "https://docs.geetest.com/onelogin/changelog/android", "",
                "和", "应用自定义服务条款三", "https://docs.geetest.com/onelogin/help/tech", "",
                "和", "", "", ""], // 一组留空,native SDK会自动填充对应运营商的服务条款
            protocolShakeStyle:1, languageType:0
        }
        break;
    case 3: // 横屏模式
        //需要先设置当前页面为横屏
        themeConfig = {
            authBGImgPath:'gt_one_login_bg',
            isDialogTheme:false, dialogWidth:300, dialogHeight:500, dialogX:0, dialogY:0, isDialogBottom:false, isWebViewDialogTheme:false,
            statusBarColor:0xffffffff, navigationBarColor:0xffffffff, isLightColor:true,
            navColor:0xFF3973FF, authNavHeight:49, authNavTransparent:true, authNavGone:false,
            navText:'一键登录', navTextColor:0xFFFFFFFF, navTextSize:17, navWebTextNormal:false, navWebText:'服务条款', navWebTextColor:0xFF000000, navWebTextSize:17,
            returnImgPath:'gt_one_login_ic_chevron_left_black', returnImgWidth:45, returnImgHeight:45, returnImgHidden:false, returnImgOffsetX:8,
            logoImgPath:'gt_one_login_logo', logoWidth:71, logoHeight:71, logoHidden:false, logoOffsetY:55, logoOffsetY_B:0, logoOffsetX:0,
            sloganColor:0xFFA8A8A8, sloganSize:10, sloganOffsetY:226, sloganOffsetY_B:0, sloganOffsetX:0,
            numberColor:0xFF3D424C, numberSize:24, numberOffsetY:84, numberOffsetY_B:0, numberOffsetX:0,
            switchText:'切换账号', switchColor:0xFF3973FF, switchSize:14, switchHidden:false, switchOffsetY:128, switchOffsetY_B:0, switchOffsetX:0,                                
            logBtnImgPath:'gt_one_login_btn', logBtnUncheckedImgPath:'gt_one_login_btn_unchecked',
            logBtnWidth:268, logBtnHeight:36, logBtnOffsetY:169, logBtnOffsetY_B:0, logBtnOffsetX:0,
            logBtnText:'一键登录', logBtnColor:0xFFFFFFFF, logBtnTextSize:15,
            loadingView:'umcsdk_load_dot_white', loadingViewWidth:20, loadingViewHeight:20, loadingViewOffsetRight:12,
            unCheckedImgPath:'gt_one_login_unchecked', checkedImgPath:'gt_one_login_checked', privacyState: false, privacyCheckBoxWidth:9, privacyCheckBoxHeight:9,
            privacyLayoutWidth:-2, privacyOffsetY:0, privacyOffsetY_B:1, privacyOffsetX:0, isUseNormalWebActivity:true,
            baseClauseColor:0xFFA8A8A8, clauseColor:0xFF3973FF, privacyClauseTextSize:10, 
            privacyTextViewTv1:'登录即同意', privacyTextViewTv2:'和', privacyTextViewTv3:'、', privacyTextViewTv4:'并使用本机号码登录'
        }
        break;
}

授权页所有 UI 配置与插件内的 OneLoginBean.java 类关联,该类所有字段说明:

/**
 * 状态栏颜色
 */
public int statusBarColor = 0;
/**
 * 状态栏字体颜色 true为黑 false为白
 */
public boolean isLightColor = false;
/**
 * 底部导航栏颜色
 */
public int navigationBarColor = 0;

/**
 * 标题栏高度
 */
public int authNavHeight = 49;
/**
 * 标题栏是否去掉
 */
public boolean authNavGone = false;
/**
 * 设置标题栏是否透明
 */
public boolean authNavTransparent = true;

/**
 * 标题栏颜色
 */
public int navColor = 0xFF3973FF;
/**
 * 标题栏标题文字
 */
public String navText = "";
/**
 * 授权页标题栏文字颜色
 */
public int navTextColor = 0xFFFFFFFF;
/**
 * 授权页标题栏文字字体大小
 */
public int navTextSize = 17;
/**
 * 授权页标题栏文字字体样式
 */
public String navTextTypefaceName = "";
/**
 * 授权页标题栏文字字体是否加粗
 */
public boolean navTextTypefaceBold = false;
/**
 * 授权页标题栏文字字体是否倾斜
 */
public boolean navTextTypefaceItalic = false;

/**
 * 是否使用默认隐私条款页,默认是,否则需要用户自定义隐私条款页
 */
public boolean isUseNormalWebActivity = true;
/**
 * 隐私条款页是否使用自定义标题
 */
public boolean navWebTextNormal = false;
/**
 * 隐私条款页自定义标题
 */
public String navWebText = "";
/**
 * 隐私条款页标题栏文字颜色
 */
public int navWebTextColor = 0xFF000000;
/**
 * 隐私条款页标题栏文字大小
 */
public int navWebTextSize = 17;
/**
 * 隐私条款页标题栏文字字体样式
 */
public String navWebTextTypefaceName = "";
/**
 * 隐私条款页标题栏文字字体是否加粗
 */
public boolean navWebTextTypefaceBold = false;
/**
 * 隐私条款页标题栏文字字体是否倾斜
 */
public boolean navWebTextTypefaceItalic = false;

/**
 * 标题栏标题文本的左右边距,默认不碰到返回按钮
 */
public int navTextMargin = 36;

/**
 * 标题栏返回图标
 */
public String returnImgPath = "gt_one_login_ic_chevron_left_black";
/**
 * 导航返回图片的宽度
 */
public int returnImgWidth = 24;

/**
 * 导航返回图片的高度
 */
public int returnImgHeight = 24;
/**
 * 返回按钮相对于x轴的偏移
 */
public int returnImgOffsetX = 12;

/**
 * 返回按钮是否垂直居中显示
 */
public boolean returnImgCenterInVertical = true;

/**
 * 返回按钮相对于y轴的偏移
 */
public int returnImgOffsetY = 0;
/**
 * 设置返回图片是否隐藏
 */
public boolean returnImgHidden = false;

/**
 * 授权页背景
 */
public String authBGImgPath = "gt_one_login_bg";
/**
 * 授权页视频背景
 */
public String authBgVideoUri = null;

/**
 * 是否使用弹窗模式
 */
public boolean isDialogTheme = false;
/**
 * 设置协议条款页面是否开启弹窗
 */
public boolean isWebViewDialogTheme = false;

/**
 * 授权页弹窗宽度
 */
public int dialogWidth = 300;

/**
 * 授权页弹窗高度
 */
public int dialogHeight = 500;

/**
 * 授权页弹窗X偏移量(以屏幕中心为原点)
 */
public int dialogX = 0;

/**
 * 授权页弹窗Y偏移量(以屏幕中心为原点)
 */
public int dialogY = 0;

/**
 * 授权页弹窗是否贴于屏幕底部: true:显示到屏幕底部, dialogY参数设置将⽆效 false:不显示到屏幕底部,以 dialogY参数为准
 */
public boolean isDialogBottom = false;

/**
 * logo图片
 */
public String logoImgPath = "gt_one_login_logo";
/**
 * logo宽度
 */
public int logoWidth = 71;
/**
 * logo高度
 */
public int logoHeight = 71;
/**
 * 是否隐藏logo
 */
public boolean logoHidden = false;
/**
 * logo x轴偏移量
 */
public int logoOffsetX = 0;
/**
 * 设置logo相对于标题栏下边缘y偏移
 */
public int logoOffsetY = 125;
/**
 * 设置logo相对于底部y偏移
 */
public int logoOffsetY_B = 0;

/**
 * 设置号码字体颜色
 */
public int numberColor = 0xFF3D424C;
/**
 * 号码栏字体大小
 */
public int numberSize = 24;
/**
 * 号码栏字体样式
 */
public String numberTypefaceName = "";
/**
 * 号码栏字体是否加粗
 */
public boolean numberTypefaceBold = false;
/**
 * 号码栏字体是否倾斜
 */
public boolean numberTypefaceItalic = false;

/**
 * 号码栏偏移量
 */
public int numberOffsetX = 0;
/**
 * 号码栏相对于标题栏下边缘y偏移
 */
public int numberOffsetY = 200;
/**
 * 号码栏相对于底部y偏移
 */
public int numberOffsetY_B = 0;

/**
 *  slogan 是否显示,默认显示
 */
public boolean sloganVisible = true;

/**
 * slogan文字颜色
 */
public int sloganColor = 0xFFA8A8A8;
/**
 * slogan的字体大小
 */
public int sloganSize = 10;
/**
 * slogan的字体样式
 */
public String sloganTypefaceName = "";
/**
 * slogan的字体是否加粗
 */
public boolean sloganTypefaceBold = false;
/**
 * slogan的字体是否倾斜
 */
public boolean sloganTypefaceItalic = false;

/**
 * slogin的x轴偏移
 */
public int sloganOffsetX = 0;
/**
 * slogan相对于标题栏下边缘y偏移
 */
public int sloganOffsetY = 382;

/**
 * slogan相对于底部y偏移
 */
public int sloganOffsetY_B = 0;
/**
 * 运营商品牌栏
 */
public String sloganText = "";
/**
 * Slogan 宽度,默认自适应
 */
public int sloganWidth = ViewGroup.LayoutParams.WRAP_CONTENT;
/**
 * Slogan 高度,默认自适应
 */
public int sloganHeight = ViewGroup.LayoutParams.WRAP_CONTENT;

/**
 * 登录按钮文字
 */
public String logBtnText = "";
/**
 * 登录按钮宽度
 */
public int logBtnWidth = 268;

/**
 * 登录按钮高度
 */
public int logBtnHeight = 36;
/**
 * 登录按钮文字颜色
 */
public int logBtnColor = 0xFFFFFFFF;
/**
 * 登录按钮字体大小
 */
public int logBtnTextSize = 15;
/**
 * 登录按钮字体样式
 */
public String logBtnTextTypefaceName = "";
/**
 * 登录按钮字体是否加粗
 */
public boolean logBtnTextTypefaceBold = false;
/**
 * 登录按钮字体是否倾斜
 */
public boolean logBtnTextTypefaceItalic = false;

/**
 * 登录按钮背景图片
 */
public String logBtnImgPath = "gt_one_login_btn";
/**
 * 隐私条款未勾选同意时登录按钮的背景图片
 */
public String logBtnUncheckedImgPath = "gt_one_login_btn_unchecked";
/**
 * 登录按钮X轴偏移
 */
public int logBtnOffsetX = 0;
/**
 * 登录按钮相对于标题栏下边缘y偏移
 */
public int logBtnOffsetY = 324;
/**
 * 登录按钮相对于底部y偏移
 */
public int logBtnOffsetY_B = 0;
/**
 * 未勾选复选框时登录按钮是否可用
 */
public boolean disableBtnIfUnChecked = false;

/**
 * loading图片地址
 */
public String loadingView = "umcsdk_load_dot_white";
/**
 * loading图片宽度
 */
public int loadingViewWidth = 20;
/**
 * loading图片高度
 */
public int loadingViewHeight = 20;
/**
 * loading对右边的偏移
 */
public int loadingViewOffsetRight = 12;
/**
 * loading默认居中
 */
public boolean loadingViewCenterInVertical = true;
/**
 * loading Y轴偏移
 */
public int loadingViewOffsetY = 0;

/**
 * 切换账号文字
 */
public String switchText = "";
/**
 * 切换账号大小
 */
public int switchSize = 14;
/**
 * 切换账号字体颜色
 */
public int switchColor = 0xFF3973FF;
/**
 * 切换账号字体样式
 */
public String switchTypefaceName = "";
/**
 * 切换账号字体是否加粗
 */
public boolean switchTypefaceBold = false;
/**
 * 切换账号字体是否倾斜
 */
public boolean switchTypefaceItalic = false;

/**
 * 切换账号是否隐藏
 */
public boolean switchHidden = false;

/**
 * 切换账号x轴偏移
 */
public int switchOffsetX = 0;

/**
 * 切换账号相对于标题栏下边缘y偏移
 */
public int switchOffsetY = 249;

/**
 * 切换账号相对于底部y偏移
 */
public int switchOffsetY_B = 0;

/**
 * 切换帐号背景图片路径
 */
public String switchImgPath = "";

/**
 * 切换帐号背景宽
 */
public int switchWidth = ViewGroup.LayoutParams.WRAP_CONTENT;

/**
 * 切换帐号背景高
 */
public int switchHeight = ViewGroup.LayoutParams.WRAP_CONTENT;

/**
 * 隐私协议X轴
 */
public int privacyOffsetX = 0;
/**
 * 隐私条款相对于标题栏下边缘y偏移
 */
public int privacyOffsetY = 0;

/**
 * 隐私条款相对于底部y偏移
 */
public int privacyOffsetY_B = 18;
/**
 * 隐私协议宽度
 */
public int privacyLayoutWidth = 256;

/**
 * 隐私条款连接字符1
 */
public String privacyTextViewTv1 = "";
/**
 * 隐私条款连接字符2
 */
public String privacyTextViewTv2 = "";
/**
 * 隐私条款连接字符3
 */
public String privacyTextViewTv3 = "";
/**
 * 隐私条款连接字符4
 */
public String privacyTextViewTv4 = "";

/**
 * 多个开发者隐私条款
 * 按顺序设置,长度为 4 的倍数,配置后优先使用该接口的配置
 */
public String[] privacyClauseTextStrings;
/**
 * 开发者隐私条款1
 */
public String clauseNameOne = "";
/**
 * 开发者隐私URL1
 */
public String clauseUrlOne = "";
/**
 * 开发者隐私条款2
 */
public String clauseNameTwo = "";
/**
 * 开发者隐私URL2
 */
public String clauseUrlTwo = "";
/**
 * 开发者隐私条款3
 */
public String clauseNameThree = "";
/**
 * 开发者隐私URL3
 */
public String clauseUrlThree = "";

/**
 * 基础协议颜色
 */
public int baseClauseColor = 0xFFA8A8A8;
/**
 * 协议颜色
 */
public int clauseColor = 0xFF3973FF;
/**
 * 协议字体大小
 */
public int privacyClauseTextSize = 10;
/**
 * 协议栏基础文字字体样式
 */
public String privacyClauseBaseTypefaceName = "";
/**
 * 协议栏基础文字字体是否加粗
 */
public boolean privacyClauseBaseTypefaceBold = false;
/**
 * 协议栏基础文字字体是否倾斜
 */
public boolean privacyClauseBaseTypefaceItalic = false;
/**
 * 协议栏条款文字字体样式
 */
public String privacyClauseTypefaceName = "";
/**
 * 协议栏条款文字字体是否加粗
 */
public boolean privacyClauseTypefaceBold = false;
/**
 * 协议栏条款文字字体是否倾斜
 */
public boolean privacyClauseTypefaceItalic = false;

/**
 * 复选框选中图片
 */
public String checkedImgPath = "gt_one_login_checked";
/**
 * 复选框未选中图片
 */
public String unCheckedImgPath = "gt_one_login_unchecked";
/**
 * 隐私条款check框默认状态
 */
public boolean privacyState = false;
/**
 * 隐私条款check框未选择时点击一键登录按钮提示文字
 */
public String privacyUnCheckedToastText = "";
/**
 * 复选框宽度
 */
public int privacyCheckBoxWidth = 9;
/**
 * 复选框高度
 */
public int privacyCheckBoxHeight = 9;
/**
 * 复选框Y轴偏移
 */
public int privacyCheckBoxOffsetY = 0;
/**
 * 复选框与隐私文本之间的间距
 */
public int privacyCheckBoxMarginRight = 5;

/**
 * 隐私条款是否增加书名号显示
 */
public boolean privacyAddFrenchQuotes = false;
/**
 * 隐私协议文字对齐方式
 */
public int privacyTextGravity = Gravity.TOP | Gravity.START;

/**
 * 服务条款未勾选时点击一键登录服务条款执行的动画样式,默认无动画
 * 0:无动画 1:水平振动 2:垂直振动
 */
public int protocolShakeStyle = 0;

/**
 * 语言设置,默认中文简体
 * 0:中文简体 1:中文繁体 2:英文
 */
public int languageType = 0;
  1. 授权页自定义 UI 配置 CustomView

授权页自定义 UI 配置,配置该参数可通过动态添加 View 的形式给授权页添加更多 UI 控件。详细配置说明请参考「授权页 UI 配置」章节。

代码示例

widgetConfig = {
    widget1: {
        viewId: "view_line1",
        type: "View",
        left: "84",
        top: "510",
        right: "",
        bottom: "",
        width: "51",
        height: "1",
        clickable: false,
        backgroundColor: "#D8D8D8",
    },
    widget2: {
        viewId: "view_tips",
        type: "TextView",
        left: "152",
        top: "500",
        right: "",
        bottom: "",
        width: "",
        height: "",
        clickable: false,
        text: "其他方式登录",
        font: "16",
        textColor: "#797894",
    },
    widget3: {
        viewId: "view_line2",
        type: "View",
        left: "258",
        top: "510",
        right: "",
        bottom: "",
        width: "51",
        height: "1",
        clickable: false,
        backgroundColor: "#D8D8D8",
    },
    widget4: {
        viewId: "weixin_login",
        type: "ImageView",
        left: "113",
        top: "535",
        right: "",
        bottom: "",
        width: "35",
        height: "35",
        backgroundImgPath: "static/weixin.png"
    },
    widget5: {
        viewId: "qq_login",
        type: "ImageView",
        left: "178",
        top: "535",
        right: "",
        bottom: "",
        width: "35",
        height: "35",
        backgroundImgPath: "static/qq.png"
    },
    widget6: {
        viewId: "weibo_login",
        type: "ImageView",
        left: "243",
        top: "535",
        right: "",
        bottom: "",
        width: "35",
        height: "35",
        backgroundImgPath: "static/weibo.png"
    }
},

参数说明:

String viewId;              //自定义控件 ID
String type;                //自定义控件类型,当前只支持 View, ImageView, TextView
int left;                   //控件局屏幕左边缘偏移量,单位 dp
int top;                    //控件局标题栏下边缘偏移量,单位 dp
int right;                  //控件局屏幕右边缘偏移量,单位 dp
int bottom;                 //控件局屏幕底部偏移量,单位 dp
int width;                  //控件宽度,单位 dp
int height;                 //控件高度,单位 dp
boolean clickable;          //控件是否可以点击,默认为可点击
String text;                //type 为 TextView 时控件文本内容
int font;                   //type 为 TextView 时控件文本字体大小,单位:sp
String textColor;           //type 为 TextView 时控件文本颜色
String backgroundImgPath;   //控件背景图片
String backgroundColor;     //type 为 TextView 时控件背景颜色

本机号码认证 API 使用说明

初始化

方法描述

SDK 初始化

代码示例

gtSDKModule.initWithCustomID(appid, 5000, (result)=>{
    this.gt_code = JSON.stringify(result.jscode);
    this.gt_result = JSON.stringify(result.jsresult);
    console.log(JSON.stringify(result));
});

参数说明

  • 接口参数说明:
参数 类型 说明
appid String 极验后台配置唯一产品 APPID,请在官网申请
timeout Number 超时时间,单位:ms,取值范围:1000~15000,默认5000
  • 返回参数描述:
字段 类型 含义
jscode Number 200:成功;其他:失败
jsresult String 返回信息

本机号码认证

在初始化执行之后调用,本机号码认证界面需自行实现,可以在多个需要认证的地方调用。

调用示例:

gtSDKModule.verifyPhoneNumber({'phone':'13888888888', 'encryptPhone':false}, (result) => {
    switch(result.jscode) {
        case 200:
            uni.showToast({
                icon: "none",
                title: JSON.stringify(result),
                duration: 2000
            });
            break;
        case 500:
            uni.showToast({
                icon: "none",
                title: "校验失败:"+JSON.stringify(result),
                duration: 2000
            });
            break;
    }
    this.gt_code = JSON.stringify(result.jscode);
    this.gt_result = JSON.stringify(result.jsresult);
    console.log(JSON.stringify(result));
});

参数说明

  • 接口参数说明:
参数 类型 说明
phone String 需要校验的手机号
encryptPhone Boolean 是否加密手机号,默认不加密
  • 返回参数描述:
字段 类型 含义
jscode Number 200:成功;其他:失败
process_id String 流水号
accesscode String 本机号码认证返回的 accessCode
phone String 手机号
  • 返回参数示例:
{"process_id":"7a03ba67e802ce3f6d34567acd45689c","jscode":200,"accesscode":"a938d50f81d349dc824ba0515b3a1206","phone":"13888888888"}

校验手机号

当本机号校验外层 jscode 为200 时,或者返回参数中是否有 accesscode,可以判断 verifyPhoneNumber 接口是否返回成功。返回成功您将获取到返回的参数,请将这些参数传递给后端开发人员,并参考「服务端」文档来实现本机号码认证的

iOS

前置条件

  • 极验 SDK 支持 Xcode 11+,iOS 8.0+ 版本
  • 极验 SDK 支持中国移动 5G/4G/3G/2G、联通 5G/4G/3G、电信5G/4G(2G/3G 网络下时延相对较高,成功率相对较低)
  • 极验 SDK 支持网络环境为
  1. 纯数据网络
  2. 数据网络与 Wifi 网络同时开启
  • 对于双卡手机,极验 SDK 取当前流量卡号

一键登录 API 使用说明

初始化

gtSDKModule.registerWithAppID(appid, (result) => {
    uni.hideLoading();
    this.gt_code = JSON.stringify(result.status);
    this.gt_result = JSON.stringify(result.number);
    console.log(JSON.stringify(result));
});

请求参数描述

参数名 必选 类型 说明
appId String 极验平台获取到的 appId

返回参数描述

参数名 类型 说明
status number 初始化状态
number string 初始化获取到的脱敏手机号

拉起授权页

  • 调用拉起授权页方法后将会拉起运营商授权页面
  • 每次调用拉起授权页方法前均需先调用授权页配置方法,否则授权页可能会展示异常

调用示例:

gtSDKModule.requestTokenWithViewModel(viewModel, (result) => {
    uni.hideLoading();
    // 点一键登录回调  
    gtSDKModule.dismissAuthViewController();
    if (result.status != 200) {
        uni.showToast({
            icon: "none",
            title: "授权失败",
            duration: 2000
        });
    } else {
        uni.showToast({
            icon: "none",
            title: JSON.stringify(result),
            duration: 2000
        });
    }

    this.gt_code = JSON.stringify(result.status);
    this.gt_result = JSON.stringify(result.token);
    console.log(JSON.stringify(result));
});

请求参数描述

参数名 必选 类型 说明
viewModel map 授权页面配置

返回参数描述

参数名 类型 说明
status number 拉起授权页面状态及在授权页面点击一键登录返回结果状态
token string 一键登录成功时返回的 token
processID string 一键登录成功时返回的流水号
appID string 一键登录成功时返回的 appID
authcode string 一键登录成功时返回的 authcode
errorCode string 拉起授权页面及一键登录失败时返回的错误码

使用场景

  • 用户进行一键登录操作时调用该方法,如果初始化成功 SDK 将会拉起授权页面
  • 可以在多处调用
  • 需在调用初始化方法之后调用

一键登录逻辑说明

  • 根据返回参数中的 status 和 errorCode 可以判断是否成功拉起授权页面和是否成功取号,若 status 不为 200,errorCode 不为 0,表示未成功拉起授权页面,或者取号失败,此时,需降级到您自己的登录页面
  • 取号成功后,使用返回的 token、processID、appID、authcode 四个参数去服务端获取手机号,服务端对接请参考「服务端

一键登录正确返回示例如下

{
    "model":"iPhone9,1",
    "authcode":"0000",
    "operatorType":"CU",
    "release":"13.1.2",
    "processID":"685579350a862da205c186ae5757039d",
    "appID":"b41a959b5cac4dd1277183e074630945",
    "pre_token_time":"1106",
    "token":"CU__0__b41a959b5cac4dd1277183e074630945__2.1.4.1__1__5f40014fed784f0d8281c0d2a3ff9610__NOTCUCC",
    "number":"186****6173",
    "preGetTokenSuccessedTime":1591611035.538636,
    "errorCode":"0",
    "msg":"获取accessCode成功",
    "status":200,
    "expire_time":580
}

手动关闭授权页面

当开发者设置点击一键登录或者自定义控件不自动销毁授权页时,将需要自行调用此方法主动销毁授权页,建议在置换手机号成功后销毁,请不要使用其他方式关闭授权页面

调用示例:

gtSDKModule.dismissAuthViewController();

关闭授权页面时机

  • 在授权页面点击切换账号按钮时
  • 在授权页面点击一键登录按钮收到 requestToken 结果回调之后

重新开始预取号

在 SDK 初始化之后,调用requestTokenWithCompletion获取 token 之前,SDK 内部会一直维护预取号的结果,但是在调用requestTokenWithCompletion获取 token 之后,就不再维护预取号结果了,调用该接口,就会重新开始预取号,并维持预取号结果有效,以保证在用户退出登录之后再次登录时能快速进入授权页面

调用示例:

gtSDKModule.renewPreGetToken();

调用时机

  • 建议在用户退出登录时调用该接口

分别设置预取号和取号超时时间

在 SDK 初始化之前,调用setRequestTimeout:requestTokenTimeout: 分别设置预取号和取号的超时时间

调用示例:

gtSDKModule.renewPreGetToken();

授权页面配置

通过设置 viewModel 可实现授权页面的配置

调用示例:

let screenWidth = gtSDKModule.screenWidth();
let screenHeight = gtSDKModule.screenHeight();
console.log("=========== screenWidth: =========== " + screenWidth);
console.log("=========== screenHeight: =========== " + screenHeight);
let viewModel = {
    statusBarStyle: 0,
    naviTitle: '一键登录uni-app',
    naviTitleColor: '#1F90FF',
    naviTitleFont: 20,
    naviBgColor: '#FFFFFF',
    naviBackImage: 'static/close_black.png',
    naviHidden: false,
    backButtonRect: [0, 0, 0, 0, 0, 0, 20, 20],
    backButtonHidden: false,
    appLogo: 'static/logo_icon.png',
    logoRect: [],
    logoHidden: false,
    logoCornerRadius: 5,
    phoneNumColor: '#FF00FF',
    phoneNumFont: 25,
    phoneNumRect: [],
    switchButtonText: '换个方式登录',
    switchButtonColor: '#6500FF',
    switchButtonBackgroundColor: '#FFFFFF',
    switchButtonFont: 12,
    switchButtonRect: [],
    switchButtonHidden: false,
    authButtonImages: [],
    authButtonTitle: '授权登录',
    authButtonTitleColor: '#FF0000',
    authButtonTitleFont: 15,
    authButtonRect: [],
    authButtonCornerRadius: 20,
    sloganRect: [],
    sloganTextColor: '#FFFF00',
    sloganTextFont: 13,
    defaultCheckBoxState: false,
    checkedImage: '',
    uncheckedImage: '',
    checkBoxRect: [],
    privacyTermsColor: '#00FF00',
    privacyTermsFont: 14,
    additionalPrivacyTerms: [['自定义服务条款1', 'https://docs.geetest.com/onelogin/deploy/ios'], ['自定义服务条款2', 'https://docs.geetest.com/onelogin/changelog/ios']],
    termTextColor: '#0000FF',
    termsRect: [],
    auxiliaryPrivacyWords: ['登录表示同意', '与', '&', '并使用本机号码登录'],
    termsAlignment: 0,
    backgroundColor: '#00000000',
    backgroundImage: 'static/background.png',
    landscapeBackgroundImage: '',
    isPopup: false,
    popupRect: [],
    popupCornerRadius: 3,
    popupRectCorners: [],
    popupAnimationStyle: 0,
    closePopupImage: '',
    closePopupTopOffset: 5,
    closePopupRightOffset: -5,
    canClosePopupFromTapGesture: true,
    webNaviTitle: '一键登录uni-app服务条款',
    webNaviTitleColor: '#1F90FF',
    webNaviTitleFont: 20,
    webNaviBgColor: '#0F0F00',
    notCheckProtocolHint: '请先阅读服务条款',
    modalPresentationStyle: 0,
    pullAuthVCStyle: 1,
    userInterfaceStyle: 0,
    languageType: 1,
    shakeStyle: 1,
    willAuthDialogDisplay:true,
    canCloseAuthDialogFromTapGesture:true,
    authDialogRect:[],
    isAuthDialogBottom:false,
    authDialogBgColor:'#85cb5d',
    authDialogTitleText:'授权弹窗标题',
    authDialogTitleColor:'#3d78cc',
    authDialogTitleFont:'20',
    authDialogContentFont:'13',
    authDialogDisagreeBtnText:'不同意',
    authDialogDisagreeBtnFont:'16',
    authDialogDisagreeBtnColor:'#3c4d21',
    authDialogDisagreeBtnImages:[],
    authDialogAgreeBtnText:'同意',
    authDialogAgreeBtnFont:'18',
    authDialogAgreeBtnColor:'#1dbaac',
    authDialogAgreeBtnImages:[],
    authDialogCornerRadius:20,
    authDialogRectCorners:[1,2],
    widgets: [{
        type: "UIButton", 
        UIButtonType: 0, 
        image: '',
        backgroundImage: "static/button_bg.png",
        title: '自定义按钮', 
        titleColor: '#FFFFFF',
        titleFont: 12,
        cornerRadius: 3,
        action: 'customButtonAction',
        frame: [10, 70, 120, 40]
    }, {
        type: "UILabel",
        textColor: '#D98866',
        font: 15,
        text: '我是自定义 Label',
        textAlignment: 1,
        frame: [10, 120, 120, 20]
    }, {
        type: "UIView",
        backgroundColor: '#48A75B',
        cornerRadius: 5,
        frame: [10, 150, 120, 20]
    }, {
        type: "UIImageView",
        backgroundColor: '#48A75B',
        cornerRadius: 5,
        image: "static/logo.png",
        frame: [10, 180, 40, 40]
    }, {
        type: "UILabel",
        textColor: '#D98866',
        font: 15,
        text: '三方登录',
        textAlignment: 1,
        frame: [(screenWidth - 120)/2, screenHeight - 270, 120, 20]
    }, {
        type: "UIButton", 
        UIButtonType: 0, 
        image: 'static/qq_icon.png',
        action: 'qqLogin',
        frame: [screenWidth/2 - 45 - 10, screenHeight - 200, 45, 45]
    }, {
        type: "UIButton", 
        UIButtonType: 0, 
        image: 'static/weixin_icon.png',
        action: 'weixinLogin',
        frame: [screenWidth/2 + 10, screenHeight - 200, 45, 45]
    }]
}

参数

参数名 说明
statusBarStyle 状态栏,具体值,请参考 iOS 的 UIStatusBarStyle 枚举
naviTitle 标题
naviTitleColor 标题颜色
naviTitleFont 标题字体大小
naviBgColor 标题栏背景色
naviBackImage 返回按钮对应的图标
naviHidden 是否隐藏标题栏
backButtonRect 返回按钮的位置大小
backButtonHidden 是否隐藏返回按钮
appLogo logo 对应的图标
logoRect logo 的位置大小
logoHidden 是否隐藏 logo
logoCornerRadius loog 圆角
phoneNumColor 脱敏手机号颜色
phoneNumFont 脱敏手机号字体大小
phoneNumRect 脱敏手机号位置大小
switchButtonText 切换账号按钮文案
switchButtonColor 切换账号按钮文案颜色
switchButtonBackgroundColor 切换账号按钮背景颜色
switchButtonFont 切换账号按钮文案字体大小
switchButtonRect 切换账号按钮位置大小
switchButtonHidden 是否隐藏切换账号按钮
authButtonImages 授权按钮背景图片,需传 3 张图片,依次为默认状态图片、高亮状态图片、失效状态图片
authButtonTitle 授权按钮文案
authButtonTitleColor 授权按钮文案颜色
authButtonTitleFont 授权按钮文案字体大小
authButtonRect 授权按钮位置大小
authButtonCornerRadius 授权按钮圆角
sloganRect slogan 位置大小
sloganTextColor slogan 文案颜色
sloganTextFont slogan 文案字体大小
defaultCheckBoxState 服务条款勾选框默认勾选状态
checkedImage 服务条款勾选框勾选时图标
uncheckedImage 服务条款勾选框未勾选时图标
checkBoxRect 服务条款勾选框位置大小
privacyTermsColor 隐私条款颜色
privacyTermsFont 隐私条款字体大小
additionalPrivacyTerms 自定义隐私条款
termTextColor 隐私条款之外的文字的颜色
termsRect 隐私条款位置大小
auxiliaryPrivacyWords 隐私条款连接符,4 个元素的数组
termsAlignment 隐私条款文案对齐方式,具体值请参考 iOS 的 NSTextAlignment 枚举
backgroundColor 授权页面背景颜色
backgroundImage 授权页面背景图片
landscapeBackgroundImage 横屏时授权页面背景图片
isPopup 是否为弹窗模式
popupRect 弹窗的位置大小
popupCornerRadius 弹窗圆角
popupRectCorners 弹窗圆角所在位置,1 ~ 4 个元素的数组,具体值请参考 iOS 的 UIRectCorner 枚举
closePopupImage 弹窗关闭按钮对应的图标
closePopupTopOffset 弹窗关闭按钮距弹窗顶部偏移
closePopupRightOffset 弹窗关闭按钮距弹窗右部偏移
canClosePopupFromTapGesture 点击弹窗背景处是否能关闭弹窗
webNaviTitle 服务条款页面导航栏标题
webNaviTitleColor 服务条款页面导航栏标题颜色
webNaviTitleFont 服务条款页面导航栏标题字体大小
webNaviBgColor 服务条款页面导航栏背景颜色
notCheckProtocolHint 未勾选服务条款勾选框时点击一键登录按钮的提示文案
webNaviBgColor 服务条款页面导航栏背景颜色
modalPresentationStyle present 授权页面时的样式,具体值请参考 iOS 的 UIModalPresentationStyle 枚举
pullAuthVCStyle 拉起授权页面的方式,0 表示通过 presentViewController 方式进入授权页面,1 表示通过 pushViewController 方式进入授权页面
userInterfaceStyle 系统样式,0 表示不指定样式,跟随系统设置,1 表示明亮模式,2 表示黑夜模式,仅在 iOS 13 及以上的系统有效
shakeStyle 服务条款抖动样式,默认不抖动
languageType 多语言配置,支持中文简体,中文繁体,英文
hasQuotationMarkOnCarrierProtocol 是否在运营商协议名称上加书名号《》
supportedInterfaceOrientations 授权页面支持的横竖屏方向
willAuthDialogDisplay 未勾选同意协议时是否弹出授权弹窗
canCloseAuthDialogFromTapGesture 点击授权弹窗外是否关闭授权弹窗
authDialogRect 授权弹窗宽、高、起始点位置
isAuthDialogBottom 授权弹窗是否显示在屏幕下方
authDialogBgColor 授权弹窗背景颜色
authDialogTitleText 授权弹窗标题文字
authDialogTitleColor 授权弹窗标题颜色
authDialogTitleFont 授权弹窗字体样式及大小
authDialogContentFont 授权弹窗富文本字体样式及大小
authDialogDisagreeBtnText 授权弹窗不同意按钮文字
authDialogDisagreeBtnFont 授权弹窗不同意按钮样式及大小
authDialogDisagreeBtnColor 授权弹窗不同意按钮文字颜色
authDialogDisagreeBtnImages 授权弹窗不同意按钮的背景图片, @[正常状态的背景图片, 高亮状态的背景图片]。默认正常状态为灰色, 高亮状态为深灰色
authDialogAgreeBtnText 授权弹窗同意按钮文字
authDialogAgreeBtnFont 授权弹窗同意按钮样式及大小
authDialogAgreeBtnColor 授权弹窗同意按钮文字颜色
authDialogAgreeBtnImages 授权弹窗同意按钮的背景图片, @[正常状态的背景图片, 高亮状态的背景图片]。默认正常状态为蓝色纯色, 高亮状态为灰蓝色。
authDialogCornerRadius 授权弹窗圆角,默认为10
authDialogRectCorners 当只需要设置授权弹窗的部分圆角时,通过 authDialogCornerRadius 设置圆角大小,通过 authDialogRectCorners 设置需要设置圆角的位置,
1 -> UIRectCornerTopLeft
2 -> UIRectCornerTopRight
3 -> UIRectCornerBottomLeft
4 -> UIRectCornerBottomRight
widgets 自定义控件,支持自定义 UIButton、UILabel、UIView、UIImageView,具体自定义方法请参考下面代码
widgets: [{ 
    type: "UIButton", // 自定义 UIButton
    UIButtonType: 0,  // button 类型
    image: '',     // button 图片
    backgroundImage: "static/button_bg.png", // button 背景图片
    title: '自定义按钮', // button 标题
    titleColor: '#FFFFFF', // button 标题颜色
    titleFont: 12, // button 标题字体大小
    cornerRadius: 3, // button 圆角
    action: 'customButtonAction', // button 点击事件
    frame: [10, 70, 120, 40] // button 的位置大小,依次表示,x、y、width、height
}, {
    type: "UILabel", // 自定义 UILabel
    textColor: '#D98866', // 文字颜色
    font: 15, // 文字字体大小
    text: '我是自定义 Label', // 具体文案
    textAlignment: 1, // 文字对齐方式
    frame: [10, 120, 120, 20] // label 的位置大小,依次表示,x、y、width、height
}, {
    type: "UIView", // 自定义 UIView
    backgroundColor: '#48A75B', // UIView 的背景颜色
    cornerRadius: 5, // UIView 的圆角
    frame: [10, 150, 120, 20] // UIView 的位置大小,依次表示,x、y、width、height
}, {
    type: "UIImageView", // 自定义 UIImageView
    backgroundColor: '#48A75B', // UIImageView 的背景颜色
    cornerRadius: 5, // UIImageView 的圆角
    image: "static/logo.png", // UIImageView 的图片
    frame: [10, 180, 40, 40] // UIImageView 的位置大小,依次表示,x、y、width、height
}]


注:控件位置大小属性通过数组进行设置,数组中 8 个元素,依次表示的含义为:竖屏时距屏幕顶部偏移、竖屏时距屏幕x轴中点偏移、竖屏时距屏幕左边偏移、横屏时距屏幕顶部偏移、横屏时距屏幕x轴中点偏移、横屏时距屏幕左边偏移、控件宽度、控件高度,具体可参考如下代码:

/**
 * @abstract 1、若授权页面只支持竖屏,只设置竖屏方向偏移;
             2、若授权页面只支持横屏,只设置横屏方向偏移;
             3、若授权页面支持旋转自动切换横竖屏,则同时设置竖屏方向和横屏方向偏移
             4、弹窗模式,同以上1、2、3
             5、size默认都可以不用设置,会根据字体大小自适应
             6、x轴方向偏移量有两个值可以设置,portraitCenterXOffset为控件的x轴中点到弹窗x轴中点的距离,portraitLeftXOffset为控件的左边缘到屏幕左边缘的距离,两者选其一即可
 */
typedef struct OLRect {
    /**
     竖屏时
     导航栏隐藏时,为控件顶部到状态栏的距离;导航栏显示时,为控件顶部到导航栏底部的距离
     弹窗时
     为控件顶部到弹窗顶部的距离
     */
    CGFloat portraitTopYOffset;

    /**
     竖屏时
     控件的x轴中点到屏幕x轴中点的距离,默认为0
     弹窗时
     控件的x轴中点到弹窗x轴中点的距离,默认为0
     */
    CGFloat portraitCenterXOffset;

    /**
     竖屏时
     控件的左边缘到屏幕左边缘的距离,默认为0
     弹窗时
     控件的左边缘到屏幕左边缘的距离,默认为0

     portraitLeftXOffset与portraitCenterXOffset设置一个即可,portraitLeftXOffset优先级大于portraitCenterXOffset,
     设置此属性时,portraitCenterXOffset属性失效
     */
    CGFloat portraitLeftXOffset;

    /**
     横屏时
     导航栏隐藏时,为控件顶部到屏幕顶部的距离;导航栏显示时,为控件顶部到导航栏底部的距离
     弹窗时
     为控件顶部到弹窗顶部的距离
     */
    CGFloat landscapeTopYOffset;

    /**
     横屏时
     控件的x轴中点到屏幕x轴中点的距离,默认为0
     弹窗时
     控件的x轴中点到弹窗x轴中点的距离,默认为0
     */
    CGFloat landscapeCenterXOffset;

    /**
     横屏时
     控件的左边缘到屏幕左边缘的距离,默认为0
     弹窗时
     控件的左边缘到屏幕左边缘的距离,默认为0

     landscapeLeftXOffset与landscapeCenterXOffset设置一个即可,landscapeLeftXOffset优先级大于landscapeCenterXOffset,
     设置此属性时,landscapeCenterXOffset属性失效
     */
    CGFloat landscapeLeftXOffset;

    /**
     控件大小,只有宽度、高度同时大于0,设置的size才会生效,否则为控件默认的size
     */
    CGSize size;
} OLRect;

授权页的事件监听改为使用globalEvent添加监听事件

示例代码

var globalEvent = uni.requireNativePlugin('globalEvent');
globalEvent.addEventListener('tapAuthDialogBackgroundBlock',function(e) {
    console.log("=========== tap AuthDialog background =========== ");
});
            globalEvent.addEventListener('clickAuthDialogDisagreeBtnBlock',function(e) {
    console.log("=========== click AuthDialog disagreeButton =========== ");
});
// 自定义授权弹窗
globalEvent.addEventListener('customDisabledAuthActionBlock',function(e){
// 模拟授权弹窗点击同意按钮,可调用 gtSDKModule.startRequestToken() 方法
// console.log("=========== custom disabledAuth action ===========");
});
globalEvent.addEventListener('customButtonAction',function(e) {
    console.log("=========== custom button pressed =========== ");
});
globalEvent.addEventListener('qqLogin',function(e) {
    console.log("=========== qqLogin =========== ");
    gtSDKModule.dismissAuthViewController();
    uni.showToast({
        icon: "none",
        title: "qq登录",
        duration: 2000 ,
    });
});
globalEvent.addEventListener('weixinLogin',function(e) {
    console.log("=========== weixinLogin =========== ");
    gtSDKModule.dismissAuthViewController();
    uni.showToast({
        icon: "none",
        title: "微信登录",
        duration: 2000
    });
});
globalEvent.addEventListener('authVCTransitionBlock',function(e) {
    console.log("=========== authVCTransitionBlock =========== ");
});
globalEvent.addEventListener('tapAuthBackgroundBlock',function(e) {
    console.log("=========== tapAuthBackgroundBlock =========== ");
});
globalEvent.addEventListener('viewLifeCycleBlock',function(e) {
    let jsonString = JSON.stringify(e);
    let obj = JSON.parse(jsonString); 
    let viewLifeCycle = obj['GTOLKey'];
    let viewLifeCycleArr = viewLifeCycle.split(',');
    console.log("=========== viewLifeCycle: " + viewLifeCycleArr);
    if (viewLifeCycleArr[0] == 'viewDidLoad') {
        uni.hideLoading();
    }
});
globalEvent.addEventListener('clickBackButtonBlock',function(e) {
    console.log("=========== clickBackButtonBlock =========== ");
});

globalEvent.addEventListener('clickSwitchButtonBlock', function(e) {
console.log("=========== clickSwitchButtonBlock =========== ");
});
globalEvent.addEventListener('clickCheckboxBlock', function(e) {
    let jsonString = JSON.stringify(e);
    let obj = JSON.parse(jsonString); 
    let isChecked = obj['GTOLKey'];
    console.log("=========== clickCheckboxBlock =========== "+ isChecked);
    if (isChecked == 'true') {
        console.log("=========== checkbox is checked =========== ");
    } else if (isChecked == 'false') {
        console.log("=========== checkbox is unchecked =========== ");
    }
});
globalEvent.addEventListener('clickAuthButtonBlock', function(e) {
console.log("=========== clickAuthButtonBlock =========== ");
});
globalEvent.addEventListener('hintBlock', function(e) {
console.log("=========== hintBlock =========== ");
});

设置日志开关

gtSDKModule.setLogEnabled(true);

请求参数描述

参数名 必选 类型 说明
enabled boolean 控制是否打开日志

获取 SDK 版本号

let sdkVersion = gtSDKModule.sdkVersion();
console.log("=========== sdkVersion: =========== " + sdkVersion);

开始取号

gtSDKModule.startRequestToken()

返回参数描述

参数名 类型 说明
sdkVersion string sdk 版本号

设置请求超时时长

gtSDKModule.setRequestTimeout(5);

请求参数描述

参数名 必选 类型 说明
timeout number 取号超时时长,单位为 s

本机号码认证 API 使用说明

初始化

gtSDKModule.initWithCustomID(appid, 5.0);

请求参数描述

参数名 必选 类型 说明
appId String 极验平台获取到的 appId
timeout number 本机号码认证超时时长,单位为 s

本机号码认证

//极验SDK本机号码校验
gtSDKModule.verifyPhoneNumber('13888888888', (result) => {
    uni.hideLoading();
    // 本机号码校验回调 
    if (result.accesscode.length > 0) {
        uni.showToast({
            icon: "none",
            title: JSON.stringify(result),
            duration: 2000
        });
    } else {
        uni.showToast({
            icon: "none",
            title: "校验失败",
            duration: 2000
        });
    }

    this.gt_code = '200';
    this.gt_result = JSON.stringify(result.accesscode);
    console.log(JSON.stringify(result));
});

请求参数描述

参数名 必选 类型 说明
phoneNumber String 需要校验的手机号

返回参数描述

参数名 类型 说明
accesscode string 本机号码认证返回的 accesscode
operatorType string 运营商
process_id string 本机号码认证成功时返回的流水号
phone string 手机号
expires number accesscode 的有效时长

本机号码认证逻辑说明

  • 根据返回参数中是否有 accesscode 可以判断 verifyPhoneNumber 接口是否返回成功
  • verifyPhoneNumber 成功后,使用返回的 process_id、accesscode、operatorType、phone 四个参数去服务端校验是否为本机号码,服务端对接请参考「服务端

本机号码认证正确返回示例如下

{
    "process_id":"c5857676b1a610fe76fcb26ed757e803",
    "accesscode":"9ac4a0e724fb4387a19beee3da63cafb",
    "operatorType":"CU",
    "phone":"18627096173",
    "expires":1800
}

隐私、权限声明

1. 本插件需要申请的系统权限列表:

<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_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.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.WRITE_SETTINGS"/>

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

极验无感本机认证会获取以下方面的信息,用作无感本机认证正常业务流程及产品优化: 1、网络身份标识:用户手机号; 2、服务所需要的数据,包括设备型号、设备制造商、网络类型和wifi强弱情况、应用名称/应用版本号、包名/包签名、手机操作系统、屏幕尺寸、屏幕分辨率、运营商类型、IP地址

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

请参考开源项目地址的开源协议

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问