人脸核身服务提供Android客户端SDK帮助您在App中实现刷脸认证功能。本文将结合示例代码指导您在Android应用中集成人脸核身服务。

前提条件

应用必须在Android 4.3+平台上运行。

获取SDK和Demo代码

配置依赖

  1. 解压SDK,将所有.aar包放入libs目录下。
  2. 在工程的build.gradle文件中添加libs目录作为依赖仓库。
    repositories {
        flatDir {
            // aar目录
            dirs 'libs'
        }
    }
  3. 在应用的build.gradle文件中添加配置。
    android {
        // 添加以下内容
        useLibrary 'org.apache.http.legacy'
    }
  4. 在应用的build.gradle文件中添加依赖。
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    compile "com.alibaba:fastjson:1.2.48@jar"
    compile(name: 'deviceid-release-6.0.6.20201030', ext: 'aar')
    compile(name: 'faceverify-1.0.1.201122164201', ext: 'aar')
    compile(name: 'stlport_shared-1.0', ext: 'aar')

定义接口

以下是定义接口的示例代码:
/**
 * 刷脸认证接口
 */
public abstract class ZIMFacade {
/**
     * 预初始化接口,建议接入方在调用其它接口前,先调用此接口
     *
     * @context Context
     */
public static void install(Context context);
/**
     * 获取环境参数接口
     *
     * @context Context
     */
public static String getMetaInfos(Context context);
/**
     * identify interface for android
     * 需在 UI 线程上调用,不会阻塞调用线程
     *
     * @param zimId    人脸核身唯一标识,请从实人认证服务端认证初始化接口获取
     * @param params   业务扩展参数
     * @param callback 认证结果的回调接口
     * @param showDebugMsg 调试阶段可打开消息开关
     */
public abstract void verify(String zimId, boolean userMsgBox, Map<String, String> params, ZIMCallback callback);
}

调用接口

  1. 初始化 SDK。
    为提高身份核验的用户体验,并为刷脸认证准备必要数据,Android客户端需要进行SDK初始化。初始化的代码示例如下:
    ZIMFacade.install(context);
  2. 获取metainfo数据。
    代码示例如下:
    String metaInfos = ZIMFacade.getMetaInfos(context);

    接入方服务端在人脸核身服务端核身认证移动端请求时需要传入该metainfo值。

  3. 开始认证。
    代码示例如下:
    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);
    
    //如需设置OCR的“下一步”按钮颜色(默认可不设置),请设置此项,如红色 #FF0000。
    extParams.put(ZIMFacade.ZIM_EXT_PARAMS_KEY_OCR_BOTTOM_BUTTON_COLOR, "#FF0000");
    //如需自定义活体检测页面的进度条颜色(默认可不设置),请设置此项,如红色 #FF0000。
    extParams.put(ZIMFacade.ZIM_EXT_PARAMS_KEY_FACE_PROGRESS_COLOR, "#FF0000");
    zimFacade.verify(certifyId, true, extParams, new ZIMCallback() {
        @Override
        public boolean response(final ZIMResponse response) {
            if (1000 == response.code) {
                showMessageBox("认证通过");
            } else {
                showMessageBox("认证失败([" + response.code + "]" + response.reason + ")");
            }
    
            return true;
        }
    });
    说明
    • 命令中的certifyId对应人脸核身唯一标识,可从人脸核身服务端创建认证获取。
    • ZIMCallback的response回调需要有返回值,默认为true。
  4. 返回结果。
    刷脸认证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;
    
        /**
         * ocr 正面照片
         */
        public byte[] ocrFrontBitmap;
    
        /**
         * ocr背面照片
         */
        public byte[] ocrBackBitmap;
    
    }
    返回结果说明。
    HttpCode 描述
    1000 表示刷脸成功,该结果仅供参考,可通过服务端核身认证移动端查询获取最终认证结果。
    1001 表示系统错误。
    1003 表示验证中断。
    2002 表示网络错误。
    2006 表示刷脸失败,如需获取更详细的失败原因,可通过服务端核身认证移动端查询获取最终认证结果。

    了解更多信息,请参见Android客户端错误码详情

接口混淆配置

为避免接口混淆,您可以参考以下代码来保留类名:
-verbose
-keep class com.alipay.face.network.model.** {*;}
-keep class com.alipay.face.api.ZIMCallback {*;}
-keep class com.alipay.face.api.ZIMFacade {*;}
-keep class com.alipay.face.api.ZIMFacadeBuilder {*;}
-keep class com.alipay.face.api.ZIMMetaInfo {*;}
-keep class com.alipay.face.api.ZIMResponse {*;}
-keep class com.alipay.face.api.ZIMSession {*;}
-keep class com.alipay.face.config.**{*;}
-keep class com.alipay.face.log.RecordBase {*;}
-keep class com.alipay.face.ui.ToygerWebView {*;}
-keep class com.alipay.zoloz.toyger.**{*;}
-keep class com.alipay.deviceid.** {*;}
-keep class com.alipay.rds.** {*;}
-keep class com.alipay.android.fintech.log.** {*;}
-keep class com.alipay.face.log.** {*;}
-keep class com.alipay.bis.common.service.facade.gw.** {*;}