Android

概述与资源

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

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

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

环境需求

条目 资源
开发目标 4.0以上
开发环境 Android Studio 3.0.1
系统依赖 v7包,design包
sdk三方依赖

安装

获取 SDK

点击下载 SDK 及 DEMO

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

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

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

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

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

    <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" />
  1. 由于 SDK 会依赖appcompat-v7处理额外的控件;需要添加下面依赖( 如果项目中已引入了 v7 包,可以不添加 )

    compile 'com.android.support:appcompat-v7:25.1.1'
    compile 'com.android.support:design:25+'
  1. 若 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"
    }
  2. 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即可。

代码示例

初始化与校验

初始化

在项目的在Application的onCreate方法里面进行初始化(第二个参数传全局 id )。

DPAPI.getInstance(this,"全局id");

并且在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) {

}
}

混淆规则

-dontwarn com.geetest.deepknow.**
-keep class com.geetest.deepknow.** {
*;
}
-dontwarn com.deepknow.encryption.**
-keep class com.deepknow.encryption.** {
*;
}
-dontwarn com.bangcle.andJni.**
-keep class com.bangcle.andJni.** {
*;
}

日志打印

SDK提供部分日志。

ErrorCode

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

及时查看极验输出日志