> >

概述与资源

极验行为验证第三代 Android SDK 提供给集成 Android 原生客户端开发的开发者使用。

产品简介

条目 说明
产品名称 极验行为验证第三代
开发者信息 武汉极意网络科技有限公司
最新版本号 v4.4.2.1, sha256 校验和为: 0ff96a831032c5da9836ae1f4890f6477275452de683f1b355d73188a1372266
最新版本发布时间 2024/9/2
主要功能 由极验开发的新一代人机验证产品,它不基于传统“问题-答案”的检测模式,利用深度学习对验证过程中产生的行为数据进行分析,更加精准地区分人机行为。
SDK隐私政策 极验行为验证第三代-隐私政策
SDK合规指南 极验行为验证第三代-合规指南
资源链接 登录后台获取 SDK
登录后,点击右上角账号>SDK 下载中心>选择对应产品 SDK

环境需求

条目 内容
开发目标 Android 5.0+
开发环境 Android Studio 4.1.0
编译工具 gradle (ant 编译请解压 SDK,提取 jar 包和资源文件接入)
系统依赖 无
sdk 三方依赖 OKHTTP
demo 依赖 OKHTTP

相关资源

条目 资源地址
产品结构流程 通讯流程, 交互流程
错误码列表 Error Code 列表
自定义 API 处理 文档下载

安装

远程依赖集成

代码托管在 maven,使用前请检查主项目 build.gradle 文件中是否声明了 mavenCentral() 配置

implementation 'com.geetest.sensebot:sensebot:4.4.2.1'

手动下载集成

请通过上方资源链接获取 SDK.

导入 SDK

如果你不是使用远程依赖集成, 需要将 zip 包中的.aar文件拖拽到工程中的 libs 文件夹下。

import

在拖入.aar到 libs 文件夹后, 还要检查.aar是否被添加到Library,要在项目的build.gradle下添加如下代码:

repositories {
flatDir {
dirs 'libs'
}
}

并且要手动将 aar 包添加依赖 (AAR 默认不传递第三方依赖,需要您手动添加!):

implementation(name: 'geetest_sensebot_android_vx.y.z_date', ext: 'aar')
implementation 'com.squareup.okhttp3:okhttp:{latestVersion}'

libraries

配置接口

Android sdk 主要提供以下接口:

  1. 配置验证初始化
  2. 启动验证
  3. 获取验证回调

参考行为验证的通讯流程, 必须要先在您的后端搭建相应的服务端SDK,并配置从极验管理后台获取的id和key, 并且将配置的接口API1和API2放入客户端的初始化方法中。

集成代码参考下方的代码示例

编译并运行你的工程

编译你的工程, 体验行为验证!

build

轻轻点击你集成的验证按钮, 如此自然, 如此传神。

视觉展示

  1. 与自定义的按钮绑定集成

    sample1

  2. 使用极验提供的按钮样式集成

    sample2

代码示例

文件配置

  1. 添加权限

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!-- 可选,输入日志到 SD 卡,方便报错排查问题 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  2. 混淆规则

SDK 的 aar 包已做混淆处理,两次混淆会导致不可预期的错误,默认情况下 aar 包内包含当前 SDK 的混淆配置,远端依赖或者本地 aar 依赖都能确保 SDK 不被二次混淆。如有解压 aar 包单独集成 jar 与 资源文件的需求,请务必将解压目录中的 proguard.txt 文件内容拷贝到应用的混淆配置中,跳过对 SDK 的二次混淆操作。

  1. 如果使用了 andRes 进行资源混淆,请将 SDK 内部包含资源排除混淆,避免因找不到资源而报错。排除配置如下:
"R.drawable.gt3*",
"R.mipmap.gt3*",
"R.layout.gt3*",
"R.string.gt3*",
"R.style.gt3*",
"R.id.gt3*",
"R.id.*geetest*",

通过与自定义按钮绑定的方式集成

  1. 注册验证会话

    在onCreate生命周期处理(Fragment中 在 onCreateView)

    // 请在oncreate方法里初始化以获取足够手势数据来保证第一轮验证成功率
    GT3GeetestUtils gt3GeetestUtils = new GT3GeetestUtils(this);
  2. 初始化配置参数

    可以在onCreate生命周期配置,也可在被调用配置

    // 配置bean文件,也可在oncreate初始化
    gt3ConfigBean = new GT3ConfigBean();
    // 设置验证模式,1:bind,2:unbind
    gt3ConfigBean.setPattern(1);
    // 设置点击灰色区域是否消失,默认不消息
    gt3ConfigBean.setCanceledOnTouchOutside(false);
    // 设置语言,如果为null则使用系统默认语言
    gt3ConfigBean.setLang(null);
    // 设置加载webview超时时间,单位毫秒,默认10000,仅且webview加载静态文件超时,不包括之前的http请求
    gt3ConfigBean.setTimeout(10000);
    // 设置webview请求超时(用户点选或滑动完成,前端请求后端接口),单位毫秒,默认10000
    gt3ConfigBean.setWebviewTimeout(10000);
    // 设置回调监听
    gt3ConfigBean.setListener(new GT3Listener());
    gt3GeetestUtils.init(gt3ConfigBean);
    // 开启验证
    gt3GeetestUtils.startCustomFlow();

通过极验提供的按钮集成

  1. 添加按钮控件

    <com.geetest.sdk.views.GT3GeetestButton
    android:id="@+id/btn_geetest"
    android:layout_width="290dp"
    android:layout_height="44dp"
    android:layout_centerHorizontal="true"
    android:layout_centerInParent="true"
    android:gravity="center"
    android:orientation="horizontal" />
  2. 注册验证会话

    在onCreate生命周期处理(Fragment中 在 onCreateView)

    // 请在oncreate方法里初始化以获取足够手势数据来保证第一轮验证成功率
    GT3GeetestButton geetestButton = (GT3GeetestButton) findViewById(R.id.btn_geetest);
    GT3GeetestUtils gt3GeetestUtils = new GT3GeetestUtils(this);
  3. 初始化配置参数

    可以在onCreate生命周期配置,也可在被调用配置

    // 配置bean文件,也可在oncreate初始化
    gt3ConfigBean = new GT3ConfigBean();
    // 设置验证模式,1:bind,2:unbind
    gt3ConfigBean.setPattern(2);
    // 设置点击灰色区域是否消失,默认不消息
    gt3ConfigBean.setCanceledOnTouchOutside(false);
    // 设置语言,参考API文档。如果为null则使用系统默认语言(TODO 若想设置语言立即生效,则init需要在setContentView之前)
    gt3ConfigBean.setLang(null);
    // 设置加载webview超时时间,单位毫秒,默认10000,仅且webview加载静态文件超时,不包括之前的http请求
    gt3ConfigBean.setTimeout(10000);
    // 设置webview请求超时(用户点选或滑动完成,前端请求后端接口),单位毫秒,默认10000
    gt3ConfigBean.setWebviewTimeout(10000);
    // 设置回调监听
    gt3ConfigBean.setListener(new GT3Listener());
    gt3GeetestUtils.init(gt3ConfigBean);
    // 绑定
    geetestButton.setGeetestUtils(gt3GeetestUtils);

处理验证回调

处理验证过程中回调数据, 需要在onButtonClick回调方法处理 API1 请求,onDialogResult回调方法处理 API2 请求,具体参考 Demo


gt3ConfigBean.setListener(new GT3Listener() {

/**
* 验证码加载完成
* @param duration 加载时间和版本等信息,为json格式
*/
@Override
public void onDialogReady(String duration) {
Log.e(TAG, "GT3BaseListener-->onDialogReady-->" + duration);
}

/**
* 图形验证结果回调
* @param code 1为正常 0为失败
*/
@Override
public void onReceiveCaptchaCode(int code) {
Log.e(TAG, "GT3BaseListener-->onReceiveCaptchaCode-->" + code);
}

/**
* 自定义api2回调
* @param result,api2请求上传参数
*/
@Override
public void onDialogResult(String result) {
Log.e(TAG, "GT3BaseListener-->onDialogResult-->" + result);
// 开启api2逻辑
new RequestAPI2().execute(result);
}

/**
* 统计信息,参考接入文档
* @param result
*/
@Override
public void onStatistics(String result) {
Log.e(TAG, "GT3BaseListener-->onStatistics-->" + result);
}

/**
* 验证码被关闭
* @param num 1 点击验证码的关闭按钮来关闭验证码, 2 点击屏幕关闭验证码, 3 点击返回键关闭验证码
*/
@Override
public void onClosed(int num) {
Log.e(TAG, "GT3BaseListener-->onClosed-->" + num);
}

/**
* 验证成功回调
* @param result
*/
@Override
public void onSuccess(String result) {
Log.e(TAG, "GT3BaseListener-->onSuccess-->" + result);
}

/**
* 验证失败回调
* @param errorBean 版本号,错误码,错误描述等信息
*/
@Override
public void onFailed(GT3ErrorBean errorBean) {
Log.e(TAG, "GT3BaseListener-->onFailed-->" + errorBean.toString());
}

/**
* 自定义api1回调
*/
@Override
public void onButtonClick() {
new RequestAPI1().execute();
}

});

另外配置接口

销毁资源

在 onDestroy 生命周期销毁资源

public void onDestroy(){
super.onDestroy();
// TODO 销毁资源,务必添加
if (gt3GeetestUtils != null) {
gt3GeetestUtils.destory();
}
}
横竖屏切换
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// TODO 横竖屏切换
if (gt3GeetestUtils != null) {
gt3GeetestUtils.changeDialogLayout();
}
}

示例代码细节参考官方提供的 Demo