概述与资源

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

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

环境需求

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

安装

获取 SDK

通过邮件获取

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

  1. 将获取的.aar文件放入工程中的libs文件夹下。

  2. 检查.aar是否被添加到Library, 需要在项目的 build.gradle 下添加如下代码:

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

    implementation(name: 'geetest_deepknow_android_vx.y.z', ext: 'aar')
  4. 添加权限

    <!-- 必选-默认申请-->
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

    <!-- 必选-6.0或以上需动态申请 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>

    <!-- 可选-6.0或以上需动态申请 -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  5. 混淆规则

    -dontwarn com.geetest.deepknow.**
    -keep class com.geetest.deepknow.** {
    *;
    }
    -dontwarn com.geetest.mobinfo.**
    -keep class com.geetest.mobinfo.** {
    *;
    }
  6. 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"
    }
  7. 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 声明周期初始化。

public static DPAPI getInstance(Context context, String app_id)

app_id 为在极验后台申请的 app_id

获取 session 数据

获取 session_id 查询当前状态

DPAPI.getInstance(getApplicationContext()).getSessionStatus(dpListener);

session_id 使用参考服务端接入文档

提交自定义数据

提交自定义数据给极验分析

DPAPI.getInstance(getApplicationContext()).submitExtraData(jsonObject, dpListener);

注意第一层必须有 "scene" 字段标识场景 id,具体见服务端文档

DPListener接口实现

实现接口操作返回数据

DPListener dpListener = new DPListener() {
@Override
public void onSessionResult(JSONObject json) {
// 回调结果, 参考 demo 或者 api 文档
}

@Override
public void onSessionStatus(boolean status) {
// 是否及时返回,可以 loading 操作。 参考 demo
}
};

关闭数据库

在退出应用程序关闭数据库连接

public DPAPI closeSQL()

日志打印

SDK 提供部分日志,TAGGeetest_DeepKnow

ErrorCode

ErrorCode Description
21000 Judge接口报错
21001 初始化JSON构造失败
21002 submitExtraData 接口参数错误
21003 collector接口报错

及时查看极验输出日志