更新时间:2026-06-11 09:54:57
本文是活体检测SDK_Android 端接入文档,用于指导 SDK 的集成使用。
在创蓝平台注册账号,创建应用并获取 appId 和 appkey
a.将 SDK 中 libs 目录下的 aar 包拷贝到您工程的 libs 目录下,如没有该目录需新建。
b.在 build 文件的 dependencies 中添加 aar 包依赖:
复制成功repositories { flatDir { dirs '../app/libs' } } dependencies {implementation fileTree(include: ['*.aar'], dir: 'libs')}
调用 SDK 其他流程方法前,请确保已调用过初始化,否则会返回未初始化。(会采集信息,建议放到同意协议后调用)
方法原型
复制成功public void init(Context context, String appId)
参数描述
| 参数 | 类型 | 说明 |
|---|---|---|
| context | Context | 传 ApplicationContext 对象 |
| appId | String | 创蓝平台获取到的 appId |
示例代码
复制成功@Override public void onCreate() { super.onCreate(); // 设置调试模式,可以输出日志,方便调试,生产环境请关闭此开关 CLBaseManager.setDebuggable(true); //实人认证SDK初始化 CLBaseManager.init(getApplicationContext(),appId); }
我们提供了一个 Demo 供您参考,如果觉得我们提供的界面文案、标题、文字大小、titleBar 的背景颜色,活体检测提示音,活体检测时的提示动画(GIF图片)等等不满足你们的需求,或者与你们的 App 页面风格样式不搭,想自定义修改这些配置当然也是可以的。
复制成功SdkConfiguration configuration = new SdkConfiguration.Builder() // 建议从服务端调用获取 authToken 接口获取 .setAuthToken(authToken) // 设置动作数量 1-3 分别代表 1-3 个动作,4 代表 1-3 个动作随机,不设置默认是 4 .setActionSize(1) // 每个动作的执行时间,单位为秒 .setActionSecond(3) // 安全级别 0:低 1:高 (不设置默认为0) 低级别随机动作,高级别将包含局部和全脸动作 .setSecurityLevel(0) // 设置当前 Activity 对象 .setActivity(this) // 人脸检测超时时间,不大于 120s,且不小于 10s,不设置默认为 30s .setTimeout(30) // 设置相机配置,比如相机预览的大小等等 .setICameraConfig(this::getCameraParameters) .build(); OnlineAliveDetectorApi.getInstance().start(configuration, new IAliveDetectedListener() { /** * 当准备好的时候 */ @Override public void onReady() { } /** * 当收到下发的动作序列时 * @param actions 动作序列列表 */ @Override public void onReceivedActions(List<OnlineAliveBean> actions) { } /** * 当提示动作改变时的回调,比如提示做下一个动作时 * @param index 动作下标,从 0 开始 */ @Override public void onActionChanged(final int index) { } /** * 当提示状态变化时的回调 * @param tip 提示信息 */ @Override public void onStateTipChanged(String tip) { } /** * 当脸部状态变化时 * @param isFullFace true:预览框检测到全脸,false 不是全脸 */ @Override public void onFaceStateChanged(boolean isFullFace) { } /** * 人脸已经就位,准备提示动作指令 */ @Override public void onFaceReady() { } /** * 服务端开始检测的回调,这个时候可以显示一些动画或者 Loading */ @Override public void onStartDetect() { } /** * 服务端检测完成的回调,这个时候可以停止显示动画或者 Loading */ @Override public void onDetectComplete() { } /** * 活体检测完成 */ @Override public void onPassed(String data) { // 返回数据示例: {"score":0.9667554498,"action_verify":"pass"} // action_verify 为 pass 时代表动作验证通过,score 为活体检测分数, // 请自行根据自身业务场景设置阈值进行判断是否通过 } /** * 当活体检测有错误时的回调 */ @Override public void onError(String errCode, String errMsg) { } /** * 当活体检测超时时的回调 */ @Override public void onOverTime() { } });
温馨提示: 所有回调的方法都是在子线程中,所以,如果要处理 UI 相关的逻辑,需要切换到主线程处理。
当调用过一次后,如果失败了,可以调用重试方法,会重新开始活体检测:
复制成功// @Deprecated method OnlineAliveDetectorApi.getInstance().tryAgain(); // 推荐使用 OnlineAliveDetectorApi.getInstance().tryAgain(authToken);
推荐使用带参数的 tryAgain 方法,这样可以设置新的 authToken,防止使用旧的 authToken 提示过期的问题。
活体检测 SDK 内部默认采用的是 BASE64 编码的方式上传视频,如果要将视频上传到自己的服务器或其他 OSS 服务器也是可以的,需要在调用活体开始之前先设置一个监听回调:
复制成功// 设置视频录制的监听器,当需要自己上传是需要设置此监听 OnlineAliveDetectorApi.getInstance().setIVideoRecordListener(this); // 并实现接口方法 public interface IVideoRecordListener { void onComplete(String videoPath, IVideoUploadListener listener); }
可以在 onComplete 回调方法中进行视频的上传操作,视频上传完成后将视频的 url 地址再通过回调方法中的监听器传递给 SDK 内部,此时会自动触发活体检测。
文件上传的代码可以参考 Demo。
① 当活体检测通过时,会在 onPassed() 回调方法中收到回调;
② 当活体检测有错误的时候,会在 onError() 回调方法中回调 errCode、errMsg 信息,具体的错误信息如下表所示:
| 错误码 | 错误信息 | 备注说明 |
|---|---|---|
| 权限相关(1开头) | ||
| 10001 | 缺少相机权限 | / |
| 10002 | 缺少读写SD卡权限 | / |
| 参数相关(2开头) | ||
| 20001 | context为空,SDK没有初始化或者初始化失败 | / |
| 20002 | appId为空,SDK没有初始化或者初始化失败 | / |
| 20003 | 网络异常,请检查网络连接 | / |
| 20004 | 请求超时,请检查网络连接或重试! | / |
| 业务相关(3、0或216开头) | ||
| 30001 | 动作验证未通过,请按提示完成动作 | / |
| 30002 | 活体检测超时,请在规定时间内完成提示动作 | / |
| 30003 | 当前网络不稳定,请切换网络后再试 | / |
| 30004 | 返回数据解析异常 | / |
| 30005 | 活体检测视频解析失败,请重新再试 | |
| 216434 | 人脸动作与提示动作不吻合,请重试 | / |
| 216501 | 没有检测到人脸,请重试 | / |
| 216507 | 检测到有多张人脸,请重试 | / |
| 216908 | 检测到人脸模糊,请重试 | / |
| 000400 | 令牌无效 | authToken超过有效期或者使用的AppId 和 AppKey 不对 |
| 000998 | 账户金额预消耗失败 | 账号余额不足了 |
| 500003 | 活体检测视频太长 | 活体视频超过15秒 |
温馨提示:
① 调用活体检测方法之前,请确保已经获取到相机、读写 SD 卡的权限,SDK 内部不做权限申请的处理!!!
② 我们提供了默认的声音文件和 GIF 图片文件,如果觉得我们的声音不好听或者图片不好看,也可以使用你们自己的,声音文件支持 mp3、wav 等常见格式,GIF 图片设计规范:123px * 111px;
③ 在调用之前需要获取到 authToken,为了安全,建议从服务端请求,具体参考服务端的接口文档,或者参考Demo 中的示例代码,Demo 请求是为了方便测试,生产环境建议从服务端请求;