概述与资源

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

DeepKonw 为极验业务安全服务的基础感知构件,主要用于采集客户端的相关安全信息,为后续服务提供数据,是其他极验服务的基础,

如果只需求无感知判断的用户部署此 SDK 即可。如果需求行为验证服务,部署完成此 SDK 后,还需部署 验证UI 相关构件,请参考 sensebot-部署参考

环境需求

条目 资源
开发目标 4.0以上
开发环境 Android Studio 3.3.0
系统依赖
sdk三方依赖

安装

获取 SDK

点击下载 SDK 及 DEMO

导入 SDK 到项目工程并配置开发环境

  1. 在demo的 libs 包下,将获取的 .aar 文件拖拽到工程中的 libs 文件夹下。

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

    repositories {
    flatDir {
    dirs 'libs'
    }
    }
  3. 手动将 aar 包添加依赖:

    implementation(name: 'geetest_deepknow_android_vx.y.z', ext: 'aar')

    androidx 兼容包在对应的文件夹

  4. 添加权限

    <uses-permission android:name="android.permission.READ_PHONE_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.INTERNET" />
  5. 若 Android studio 版本大于 3.0,工程 app 中的 build.gradle 文件需要添加下述设置

    packagingOptions{
    doNotStrip "*/armeabi/libdeepknow-lib.so"
    doNotStrip "*/armeabi-v7a/libdeepknow-lib.so"
    doNotStrip "*/x86/libdeepknow-lib.so"
    doNotStrip "*/arm64-v8a/libdeepknow-lib.so"
    doNotStrip "*/x86_64/libdeepknow-lib.so"
    }
  6. AS原生 proguard 混淆会导致打 release 包失败?

    此问题与 android studio 版本无关,是由于高版本的 gradle 插件导致的。在gradle 插件使用 3.2.0 以上,如不开启 R8 混淆器则会产生此问题,导致此问题的原因应该是加固使用的 asm 修改的 class 格式与新版 d8 编译器兼容性导致的。

    解决方式:在使用新版 gradle 插件(插件版本 3.2.0 以上)时,同时开启 R8 混淆器做混淆处理,或者使用低版本的 gradle 插件版本(3.1.0 以下)也可编译通过。

    R8普通模式是兼容 Proguard 的,若原项目里已使用了 proguard,在 gradle.properties 文件里加上 android.enableR8=true 即可。

    同时,R8 也有完全模式,与 Proguard 不直接兼容,可以在 gradle.properties 文件中设置 android.enableR8.fullMode=true 即可。

代码示例

初始化与校验

初始化

在项目的在 ApplicationonCreate 方法里面进行初始化(第二个参数传 null 即可)。

DPAPI.getInstance(this,null);

并且在 AndroidManifest 文件中声明这个 Application

android:name=".MyApplication"

组装数据

在执行点击操作之前,对具体的控件进行操作:

// 其中的第一个参数为具体的 view,第二个参数为使用的 activity 的名字。
DPAPI.getInstance(getApplicationContext()).ignoreDPView(btn,"activityName");

事件发生

在执行事件的时候,执行:

// 其中的第一个参数为具体的所要填充的内容, 第二个参数为回调。
DPAPI.getInstance(getApplicationContext()).emitSenseData(judgementBean,judgementListener);

接口实现

实现接口进行校验。

private DPJudgementListener judgementListener = new DPJudgementListener() {

@Override
public void onError(String errorCode, String error) {
// 整个流程中的错误回调, errorCode 为错误码, error 为具体的错误原因
}

@Override
public void onDeepKnowResult(JSONObject result) {
// deepknow的回调
}
};

输入参数实现

DPJudgementBean judgementBean=new DPJudgementBean(gtId,interactive,attr);

参数说明

参数 类型 说明
gtId String DeepKnow 申请的 id
interactive int 交互场景类型
attr Map 冗余参数

全局事件发生

在全局执行事件的时候,执行:

//其中的参数为回调。
DPAPI.getInstance(getApplicationContext()).setDpListener(dpListener);

全局接口实现

实现接口进行校验。

private DpListener dpListener = new DpListener() {

/**
* 全局的回调
*/
@Override
public void onResult(String token) {

}
}

与 SenseBot 验证结合使用(可选步骤)

根据业务实际需要, 将 DeepKnowSenseBot 结合

集成请参考 DeepKnow with SenseBot

混淆规则

-dontwarn com.geetest.deepknow.**
-keep class com.geetest.deepknow.** {
*;
}
-dontwarn com.geetest.mobinfo.**
-keep class com.geetest.mobinfo.** {
*;
}

日志打印

SDK提供部分日志。

ErrorCode

ErrorCode Description
20001 具体的JudgementBean为null
20002 传入的参数id为null
20003 传入的参数idValue为null
20004 Judgement接口返回值为null
20005 Judgement接口返回值格式错误
20006 Judgement接口请求错误

及时查看极验输出日志