> >

概述与资源

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

环境需求

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

相关资源

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

安装

集成 SDK

使用极验行为验证 SDK 视为同意 极验隐私政策

远程依赖集成

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

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

手动下载集成

使用从下方链接下载.zip文件获取最新的 sdk (兼容 androidx)。

gt3-android-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,并配置从极验管理后台获取的idkey, 并且将配置的接口API1API2放入客户端的初始化方法中。

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

编译并运行你的工程

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

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