> >

概述与资源

本文是 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,可放在 Application 的 onCreate 方法中进行初始化。

方法描述

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()