> >

gt3-harmonyOS-sdk

概述与资源

行为验证 HarmonyOS SDK 提供给集成 HarmonyOS 原生客户端开发的开发者使用。

环境需求

条目 资源
开发目标 5.0以上
开发环境 DevEco Studio 5.0
编译版本 api12
sdk三方依赖

相关资源

条目 资源地址
产品结构流程 通讯流程, 交互流程
错误码列表 Error Code 列表
Demo 工程下载 联系管理人员获取

安装

获取SDK

邮件获取

手动导入SDK

将获取的.har文件拖拽到工程中的libs文件夹下。

  1. 在拖入.har到libs文件夹后, 还要检查.har是否被添加到Library,要在项目的


    ```typescript
    "dependencies": {
    "sensebotSdk": "file:./libs/sensebot.har"
    }

  2. 在module.json5文件中添加权限

      "requestPermissions": [
    {
    "name": "ohos.permission.INTERNET",
    "usedScene": {
    "abilities": [
    ...
    ],
    ...
    }
    }
    ],
  3. 混淆规则:
    SDK 的 har 包已做混淆处理,两次混淆会导致不可预期的错误,默认情况下 har 包内包含当前 SDK 的混淆配置

名词解释

  1. api1 & api2: 见数据通信流程图
  2. Bind模式: 以需要触发按钮为参考,将极验逻辑绑定在此按钮上

配置接口

开发者集成客户端sdk前, 必须先在您的服务器上搭建相应的 服务端SDK ,配置 api1及api2 。这里以服务端 api1及api2
配置成功,客户端开发步骤为例,如下以Bind模式,非自定义api1及2为例:

  1. 定义服务端配置好API1&API2

     /**
    * api1,需替换成自己的服务器URL
    */
    private captchaURL: string = "http://www.geetest.com/demo/gt/register-slide";
    /**
    * api2,需替换成自己的服务器URL
    */
    private validateURL: string = "http://www.geetest.com/demo/gt/validate-slide";
  2. 配置初始化接口

    let gt3GeetestUtils = new GT3GeetestUtils(this.getUIContext());
  3. 配置GT3ConfigBean

    // 配置bean文件,也可在oncreate初始化
    gt3ConfigBean = new GT3ConfigBean();
    // 设置验证模式,1:bind
    gt3ConfigBean.setPattern(1);
    // 设置点击灰色区域是否消失,默认不消息
    gt3ConfigBean.setCanceledOnTouchOutside(false);
    // 设置debug模式,开代理可调试
    gt3ConfigBean.setReleaseLog(false);
    // 设置语言,如果为null则使用系统默认语言
    gt3ConfigBean.setLang(null);
    // 设置webview加载超时
    gt3ConfigBean.setTimeout(9000);
    // 设置webview请求超时
    gt3ConfigBean.setWebviewTimeout(6000);
    // 设置回调监听
    gt3ConfigBean.setListener(this.gt3Listener);
    gt3GeetestUtils.init(gt3ConfigBean);
    //私有化配置
    this.gt3ConfigBean.privatizationMode = true
    let gtUrlConfig = new GTURLConfig()
    gtUrlConfig.get = "get.php" //此处只需path,域名通过setUseCustomAPIServers配置
    gtUrlConfig.ajax = "ajax.php" //此处只需path,域名通过setUseCustomAPIServers配置
    gtUrlConfig.staticUrl = "static.geetest.com//app-index.html" //此处配置为中间页地址,无需加协议头,协议头通过setRequestProtocol配置
    this.gt3ConfigBean.setGtUrlConfig = gtUrlConfig
    this.gt3ConfigBean.setGt3ServiceNode(GT3ServiceNode.NODE_CUSTOM)
    this.gt3ConfigBean.setUseCustomAPIServers(["api.geetest.com"]) //此处配置为get\ajax的请求域名,无需加协议头,协议头通过setRequestProtocol配置
  4. 调用验证接口

       // 开启验证

    gt3GeetestUtils.getGeetest();
  5. 回调监听接口实现

     
    gt3Listener: GT3Listener = {
    /**
    * 验证码加载完成
    * @param duration 加载时间和版本等信息,为json格式
    */
    onDialogReady: (duration: string) => {
    console.log("GT3BaseListener-->onDialogReady-->" + duration);
    },
    /**
    * 图形验证结果回调
    * @param code 1为正常 0为失败
    */
    onReceiveCaptchaCode: (code: number) => {
    console.log("GT3BaseListener-->onReceiveCaptchaCode-->" + code);
    },
    /**
    * 验证结果
    * @param result
    */
    onDialogResult: async (result: string) => {
    console.log("GT3BaseListener-->onDialogResult-->" + result);
    // 开启自定义api2逻辑
    let reqApi2 = new RequestAPI(this.riskTypeEnum)
    let api2Result = await reqApi2.requestAPI2(result)
    this.parseApi2Result(api2Result.toString())
    },
    /**
    * 统计信息,参考接入文档
    * @param result
    */
    onStatistics: (result: string) => {
    console.log("GT3BaseListener-->onStatistics-->" + result);
    },
    /**
    * 验证码被关闭
    * @param num 1 点击验证码的关闭按钮来关闭验证码, 2 点击屏幕关闭验证码, 3 点击返回键关闭验证码
    */
    onClosed: (num: number) => {
    console.log("GT3BaseListener-->onClosed-->" + num);
    // this.gt3GeetestUtils.destroy();
    // this.webviewController = new webview.WebviewController
    },
    /**
    * 验证成功回调
    * @param result
    */
    onSuccess: (result: string) => {
    console.log("GT3BaseListener-->onSuccess-->" + result);
    },
    /**
    * 验证失败回调
    * @param errorBean 版本号,错误码,错误描述等信息
    */
    onFailed: (errorBean: GT3ErrorBean) => {
    console.log("GT3BaseListener-->onFailed-->" + errorBean.toString());
    },
    /**
    * 自定义api1回调
    */
    onButtonClick: async () => {
    let reqApi1 = new RequestAPI(this.riskTypeEnum)
    let api1Result = await reqApi1.requestAPI1()
    // TODO 设置返回api1数据,即使为 null 也要设置,SDK内部已处理
    this.gt3ConfigBean.setApi1Json(JSON.parse(api1Result));
    // 继续验证
    this.gt3GeetestUtils.getGeetest();
    }
    }
  6. 其他生命周期

    aboutToDisappear() {
    if (this.gt3GeetestUtils) {
    this.gt3GeetestUtils.destroy();
    }
    }
  7. 统计接口解释 onStatistics

    {
    "gt":"019924a82c70bb123aae90d483087f94", // 商家标识
    "challenge":"340e47b635f855267c222549fa6cab11", // 流水号
    "success":"true", // 是否宕机
    "a1":"1", // api1接口成功, 0为失败,下同
    "t":"1", // gettype接口成功
    "g":"1", // get接口成功
    "a":"1", // ajax
    "r":"1", // 验证码显示成功
    "re":"slide", // 验证类型,若有此字段,表示结果成功
    "os":"harmonyOS",
    "mo":"VKY-AL00",
    "ver":"8.0.0",
    "net":"WIFI",
    "build":"1",
    "release":"1.0",
    "vendor":"com.example.gt3",
    "time":"1531397269605",
    "imei":"unknown",
    "gt3":"4.4.6" // 极验SDK版本
    }

以上为Bind模式,自定义API1和API2,其他模式请详见demo

常见问题

日志打印

SDK提供部分日志,TAG为Geetest。

Q & A

1. 验证码弹出后,验证完成后为什么弹框未消失?

答:需要在onDialogResult回调里面做二次验证结果处理,参考demo

2. 验证码弹出后,遇到横竖屏切换 ?

答:在module.json5里面,添加需要弹出验证码的abilities上配置"orientation": "auto_rotation"

3. 如何获取SDK的版本号?

答:gt3GeetestUtils.getVersion()

6. SDK语言适配如何处理 ?

答:gt3ConfigBean.setLang(null);为使用系统语言。 若不为null,如:”zh”–简体中文,”zh-HK”,”zh-TW”-繁体中文,”en”–英文,”id”
–印尼语,”ja”–日文。

常见错误码

ErrorCode Description 备注
200 服务被forbidden
201 SKD内部异常 请联系我们
202 解析json错误 请查看日志
204 验证码加载超时,默认15s
204_1 webview加载错误 请查看日志
204_2 SSLError,开启代理失败或者时间问题 若开启代理,请设置debug为true
205 api1错误 请查看日志
207 get错误 请查看日志
208 ajax错误 请查看日志
209 api2错误 请查看日志

极验会继续努力,给予您更好的服务