人脸核身服务提供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.15.240328142352', ext: 'aar') compile(name: 'facade-2.3.15.240328142352', ext: 'aar') compile(name: 'face-2.3.15.240328142352', ext: 'aar') compile(name: 'ocr-2.3.15.240328142352', ext: 'aar') compile(name: 'faceaudio-2.3.15.240328142352', ext: 'aar') compile(name: 'facelanguage-2.3.15.240328142352', ext: 'aar') compile(name: 'APSecuritySDK-DeepSec-7.0.1.20240314.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.** {*;}