人脸核身服务提供Android客户端SDK帮助您在App中实现刷脸认证功能。本文将结合示例代码指导您在Android应用中集成人脸核身服务。
阿里云视觉智能开放平台各类目视觉AI能力API接入、接口使用或问题咨询等,请通过钉钉群(23109592)加入阿里云视觉智能开放平台咨询群联系我们。
前提条件
应用必须在Android 4.4+真机平台上运行。
权限说明
如果需要适配折叠屏手机,需要在App的AndroidManifest.xml中注册以下权限,以便SDK监听折叠屏设备的折叠/展开状态改变。
 <uses-permission android:name="android.permission.CHANGE_CONFIGURATION"/>获取SDK和Demo代码
模拟器使用存在安全风险,暂不支持在模拟器上运行。
配置依赖
- 解压SDK,将所有.aar包放入libs目录下。 
- 在工程的build.gradle文件中添加libs目录作为依赖仓库。 - repositories { flatDir { dirs 'libs' // aar目录 } }
- 在应用的build.gradle文件中添加配置。 - android { // 添加以下内容 useLibrary 'org.apache.http.legacy' }
- 在应用的build.gradle文件中添加依赖。 - dependencies { .... //fastjson 依赖 implementation 'com.alibaba:fastjson:1.2.83_noneautotype' // 本地依赖 compile(name: 'baseverify-2.3.32.1.250219103020', ext: 'aar') compile(name: 'facade-2.3.32.1.250219103020', ext: 'aar') compile(name: 'face-2.3.32.1.250219103020', ext: 'aar') compile(name: 'ocr-2.3.32.1.250219103020', ext: 'aar') compile(name: 'faceaudio-2.3.32.1.250219103020', ext: 'aar') compile(name: 'facelanguage-2.3.32.1.250219103020', ext: 'aar') compile(name: 'facephotinus-2.3.32.1.250219103020', ext: 'aar') compile(name: 'APSecuritySDK-deepSec-7.0.1.20240528.jiagu', ext: 'aar') }
调用接口
- 初始化SDK。 - 为提高身份核验的用户体验,并为刷脸认证准备必要数据,Android客户端需要进行SDK初始化。初始化的代码示例如下: - ZIMFacade.install(context);
- 获取metainfo数据。 - 代码示例如下: - String metaInfos = ZIMFacade.getMetaInfos(context);- 接入方移动端在人脸核身移动端核身认证移动端请求时需要传入该metainfo值。 
- 开始认证。 - 代码示例如下: - ZIMFacade zimFacade = ZIMFacadeBuilder.create(MainActivity.this); HashMap<String, String> extParams = new HashMap<>(); //如需指定活体检测UI界面方向(横屏),请指定这一项。 // extParams.put(ZIMFacade.ZIM_EXT_PARAMS_KEY_SCREEN_ORIENTATION, ZIMFacade.ZIM_EXT_PARAMS_VAL_SCREEN_LAND); //如需支持活体视频返回,请指定这一项,并在response.videoFilePath中获取视频本地路径。 extParams.put(ZIMFacade.ZIM_EXT_PARAMS_KEY_USE_VIDEO, ZIMFacade.ZIM_EXT_PARAMS_VAL_USE_VIDEO_TRUE); //如需自定义活体检测页面的进度条颜色(默认可不设置),请设置此项,如红色 #FF0000。 extParams.put(ZIMFacade.ZIM_EXT_PARAMS_KEY_FACE_PROGRESS_COLOR, "#FF0000"); zimFacade.verify(verificationToken, true, extParams, new ZIMCallback() { @Override public boolean response(final ZIMResponse response) { if (1000 == response.code) { showMessageBox("刷脸通过"); } else { showMessageBox("刷脸失败([" + response.code + "]" + response.reason + ")"); } return true; } });说明- 调用核身认证移动端请求接口返回的verificationToken有效期时间为30分钟,从verificationToken生成时间开始算起,超过有效期再进行人脸认证会报错,请在有效期时间内完成认证。 
- ZIMCallback的response回调需要有返回值,默认为true。 
 
- 返回结果。 - 刷脸认证SDK回调结果中的ZIMResponse类,该类中定义了对应的结果编码和原因,如下所示: - /** * 刷脸认证回调结果 */ public class ZIMResponse { /** * 返回结果编码: * 1000: 刷脸成功 * 1001: 系统错误 * 1003: 验证中断 * 2002: 网络错误 * 2006: 刷脸失败 */ public int code; /** * 返回结果原因信息 */ public String reason; /** * 结果文案描述,可能为空 */ public String msg; /** * 设备token */ public String deviceToken; /** * 如果采用视频返照,这个字段返回视频的路径 */ public String videoFilePath; /** * 人脸核身返照照片 */ public byte[] bitmap; }- 返回结果说明。 - HttpCode - 描述 - 1000 - 表示刷脸成功,该结果仅供参考,可通过移动端核身认证移动端查询获取最终认证结果。 - 1001 - 表示系统错误。 - 1003 - 表示验证中断。 - 2002 - 表示网络错误。 - 2006 - 表示刷脸失败,如需获取更详细的失败原因,可通过移动端核身认证移动端查询获取最终认证结果。 - 了解更多信息,请参见Android客户端错误码详情。 
接口混淆配置
为避免接口混淆,您可以参考以下代码来保留类名:
-verbose
-keep class com.alipay.face.api.** {*;}
-keep class com.alipay.zoloz.toyger.**{*;}
-keep class com.dtf.face.api.** {*;}
-keep class com.dtf.face.ocr.verify.DTFOcrFacade { *; }
-keep class com.dtf.face.verify.** {*;}
-keep class com.dtf.face.network.model.** {*;}
-keep class com.dtf.face.network.APICallback {*;}
-keep class com.dtf.face.config.**{*;}
-keep class com.dtf.face.log.** {*;}
-keep class com.dtf.face.ui.widget.ToygerWebView {*;}
-keep class com.dtf.toyger.base.** {*;}
-keep class com.dtf.face.network.mpass.biz.model.** { *; }
-keep class faceverify.** { *; }
-keep class ocrverify.** { *; }
 
-keep class com.alipay.alipaysecuritysdk.** { *; }
-keep class com.alipay.deviceid.** { *; }
 
# FastJson Keep
-keep class com.alibaba.fastjson.** {*;}
-keep class org.json.** {*;}