> >

概述与资源

本文是 GeeGlance(先鉴) Android SDK 的部署文档,用于指导 Android 端 GeeGlance SDK 的集成,读者需具有一定 Android 编程知识基础。

1、环境需求

条目 资源
开发环境 Android Studio 2.1.3
Gradle 版本 3.3.0 以上
SDK 三方依赖
包增量 1.1M

2、相关开发资料

条目 资源
SDK 当前版本 1.2.0

准备工作

1、创建应用

登录极验后台创建注册账号获取商户 ID (MERCHANT_ID) , 创建应用配置包名包签名。

2、快速体验 Demo

Android 压缩包附带的 demo 文件夹中是极验的示例工程,使用 Android Studio 打开示例工程,直接运行起来即可进行快速体验测试。

如果开发者需要将 SDK 集成到自己的项目进行体验,可完成以下配置步骤进行本地测试:

  1. 将包名修改成对应的测试包名;

  2. 将签名配置改成您的签名配置;

  3. MERCHANT_ID换成您在极验管理后台注册时生成的商户 ID(需注意实际使用的应用包名、包签名要与后端创建的应用的信息一致);

  4. 编译 demo 在手机上安装测试即可

3、开发环境搭建

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

  1. sdk目录下,将获取的.aar文件拖拽到工程中的 libs 文件夹下。

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

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

    implementation(name: 'geetest_glance_android_vx.y.z', ext: 'aar')
  4. AndroidManifest.xml 权限配置

SDK 已默认配置必要的权限声明,正常情况下直接集成即可。

必要的权限包含:

<uses-permission android:name="android.permission.INTERNET" />

INTERNET 权限主要离线模型更新,权限校验,SDK 运行日志上报功能。

SDK 接入

1、调用逻辑

  1. init初始化 SDK 并配置MERCHANT_ID

  2. 创建场景配置 GlanceConfig

  3. 启动内容分析 match,提取敏感内容并标记

2、初始化

  • 初始化init

SDK 初始化接口init,可放在 ApplicationonCreate 方法中进行初始化。

方法描述

public GeeGlance init(Context context, String merchantId);

参数说明

参数 类型 说明
context Context 上下文
merchantId String 极验后台配置唯一商户IDMERCHANT_ID,请在官网注册获取。

代码示例

GeeGlance
.with()
//开启 SDK 日志打印功能
.setLogEnable(true)
//第一个参数为当前 Application 或 Activity 的 Context
//第二个参数为注册申请商户 ID的 MERCHANT_ID
.init(this, MERCHANT_ID);

3、创建场景配置 GlanceConfig

  • 设置场景 keysetSenseKey

方法描述

设置场景 key, 在需要进行内容识别的地方配置,如果有多个场景需要用到内容识别,可以使用不同的场景 key 区分。

public GlanceConfig.Builder setSenseKey(String senseKey)

参数说明

参数 类型 说明
senseKey String 场景 key
  • 设置场景类型setSenseType

方法描述

设置场景类型, 在需要进行内容识别的地方配置,如果有多个场景需要用到内容识别,可以根据实际情况使用不同的场景类型设置。

public GlanceConfig.Builder setSenseType(GlanceSenseType senseType)

参数说明

参数 类型 说明
senseType GlanceSenseType 场景类型(枚举类型)
public enum GlanceSenseType {
SUPER_SHORT, //超短文本(昵称、群名称等)
SHORT, //短文本(弹幕等)
MEDIUM, //中等文本(评论等)
LONG //长文本(文章发布等)
}

代码示例

GlanceConfig config = new GlanceConfig.Builder()
.setSenseKey("nickname")
.setSenseType(GlanceSenseType.SHORT)
.build();

4、启动内容分析

  • 启动内容分析match

方法描述

在需要提交文本内容的场景,如直播发弹幕、发表文章、发布评率等场景,提交之前调用 SDK 分析接口启动异步分析。

public void match(String content, GlanceConfig config, GlanceListener listener);

参数说明

参数 类型 说明
content String 待分析文本内容
config GlanceConfig 场景配置
listener GlanceListener 结果回调

代码示例

GeeGlance.with().match(text, config, new GeeGlance.GlanceListener() {
@Override
public void onResult(GlanceResult result) {
String content = result.getContent();
if ("200".equals(result.getCode())) {
ResultBean[] resultBean = result.getItems();
}
}
});

控件接入

1、接入步骤

  1. 布局中添加内容识别控件GlanceView
  2. 初始化控件并配置场景
  3. 绑定控件状态变化事件

2、布局中添加内容识别控件

内容识别控件GlanceView集成自系统的EditText,可以像添加普通EditText一样添加GlanceView到布局需要的位置

代码示例

<RelativeLayout
//...
>
<com.geetest.glance.GlanceView
android:id="@+id/et_input"
android:layout_width="0dp"
android:layout_height="26dp"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginLeft="13dp"
android:layout_marginTop="1dp"
android:layout_marginBottom="1dp"
android:layout_toLeftOf="@id/iv_status"
android:background="#FFFFFF"
android:focusable="true"
android:focusableInTouchMode="true"
android:focusedByDefault="true" />
</RelativeLayout>

3、初始化控件并配置场景

// 初始化控件
GlanceView etInput = (GlanceView)findViewById(R.id.et_input);

// 创建场景配置
GlanceConfig config = new GlanceConfig.Builder()
.setSenseKey("article") //配置场景 key
.setSenseType(GlanceSenseType.LONG) // 配置场景类型
.build();
etInput.setGlanceConfig(config);

4、绑定控件状态变化事件

etInput.setViewListener(new GlanceView.GlanceViewListener() {
// 输入内容被清空
@Override
public void onEmpty() {
ivStatus.setImageResource(R.drawable.gt_demo_message_gray);
btnSubmit.setImageResource(R.drawable.gt_demo_send_disable);
}

// 编辑(输入)中
@Override
public void onEditing() {
ivStatus.setImageResource(R.drawable.gt_demo_message_blue);
btnSubmit.setImageResource(R.drawable.gt_demo_send_normal);
}

// 输入内容经分析正常,无敏感内容
@Override
public void onNormal() {
ivStatus.setImageResource(R.drawable.gt_demo_message_green);
btnSubmit.setImageResource(R.drawable.gt_demo_send_normal);
}

// 输入内容经分析异常,有敏感内容
@Override
public void onError() {
ivStatus.setImageResource(R.drawable.gt_demo_message_red);
btnSubmit.setImageResource(R.drawable.gt_demo_send_normal);
}
});

其他接口说明

1、回调接口实现

通过实现GlanceListener接口,通过它的多个回调可以判断是否有权限,是否配置正常,是否有识别到敏感结果,每次调用match方法前必须先传入该接口的实现,否则不能正常回调返回结果。

1.1、结果返回

方法描述

启动内容分析后,SDK 内部进行异步分析,通过 onResult 回调发送返回结果到主线程。

public void onResult(GlanceResult result)

结果示例

{
"task_id": "9fda765161fef47aaa6d0d9e8d0daab6",
"content": "他们集体罢课了",
"result": [
{
"keyword": "罢课",
"risk_level": "b",
"category": "涉政",
"start": 4,
"end": 6
}
],
"client_type": "Android",
"merchant_id": "4c73730ddc83ebc6f9b0af0d0e350590",
"package_name": "com.geetest.glancedemo",
"release": "10",
"model": "MI 9",
"status": "200",
"msg": "Success"
}

json 格式结果键值跟字段名称基本一致,只是命名风格的差异,如task_id对应taskId字段,获取该字段值分别为:json格式:jsonResult.getString("task_id") ,对象格式:objResult.getTaskId();

参数说明

参数 类型 说明
result GlanceResult 回调信息

jsonObject 的参数说明

  • GlanceResult类型说明
参数名 必须 类型 说明
status String 状态码,成功时状态码为"200",失败为"500"
task_id String 当前识别的流水号
content String 当前识别输入的文本原文内容
items ResultBean[] 当前输入文本识别到的敏感词记录数组
client_type String 客户端类型,"Android"
merchant_id String 商户 ID
package_name String 应用包名
release String 系统版本号
model String 系统型号
msg String 失败时的错误信息
  • ResultBean类型说明
参数名 必须 类型 说明
keyword String 识别到的敏感词
risk_level String 敏感词风险等级
category String 敏感词类型
start int 敏感词在原始文本中的起始索引
end int 敏感词在原始文本中的结束索引

2、配置用户 ID

  • 设置用户 ID setUid

方法描述

设置用户 ID, 在需要进行内容识别的地方配置,后台统计用,可针对每个用户输出统计报表等。

public GeeGlance setUid(String uid)

参数说明

参数 类型 说明
uid String 用户 ID

3、日志打印

  • 日志打印控制setLogEnable

方法描述

设置是否开启 SDK 日志打印功能,默认是开启的,开启后 SDK 运行过程中会打印以 Geetest_Glance 为 TAG 的 logcat 日志。正式上线应用可以调用该接口关闭日志。

public GeeGlance setLogEnable(boolean logEnable)

参数说明

参数 类型 说明
logEnable boolean 是否开启日志

代码示例

GeeGlance.with().setLogEnable(false);

注:开启日志后,Release 模式也会打印 SDK 内日志

4、SDK 版本号

  • 获取 SDK 版本号sdkVersion

方法描述

获取 SDK 版本号

public String sdkVersion()

代码示例

GeeGlance.with().sdkVersion()