刷脸认证提供 Android 客户端 SDK 帮助您在 App 中实现刷脸认证功能。您可通过刷脸认证的服务端认证初始化接口获取刷脸认证唯一标识 CertifyId,并使用 CertifyId 唤起刷脸认证客户端 SDK。本文将结合示例代码进行详细的说明介绍。

前提条件

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

依赖配置

下载 Android SDK, SDK 为 Android 标准 aar 包,下载之后在 Android Studio 中进行 aar 包引用,如下载完 aar 包之后,放入工程目录的 libs 目录下,并添加以下依赖:

#在此添加阿里云实人认证SDK依赖包

implementation files('libs/aliyunface-sdk-xxx.aar')
implementation 'com.squareup.okhttp3:okhttp:3.11.0'
implementation 'com.squareup.okio:okio:1.14.0'
implementation 'com.alibaba:fastjson:1.2.62'
			

接口定义

/**
 * 刷脸认证接口
 */
public class ZIMFacade {

    /**
     * 预初始化接口,建议接入方在调用其它接口前,先调用此接口
     * 
     * @context Context
     */
    public static void install(Context context);

    /**
     * 获取环境参数接口
     * 
     * @context Context
     */
    public static String getMetaInfos(Context context);

    /**
     * identify interface for android
     * 需在 UI 线程上调用,不会阻塞调用线程
     *
     * @param certifyId    刷脸认证唯一标识,请从刷脸认证服务端认证初始化接口获取
     * @param useMsgBox   当刷脸认证过程中出现异常情况,是否使用SDK内部的弹框提示,
     *                    如果取值为true, 则SDK先弹框提示,确定之后,返回错误code
     *                    如果取值为false, 则不弹提示框,直接返回错误code, 客户App自行决定如何提示
     * @param callback 认证结果的回调接口
     */
    public void verify(String certifyId, boolean useMsgBox,, ZIMCallback callback);

    /**
     * 开始进行实名认证(拉起UI), 带自定义参数的版本
     * @param zimId    unique id
     * @param useMsgBox   表示是否在sdk内部使用弹框提示错误信息
     * @param extParams 扩展参数
     * @param callback identify result
     */
    public void verify(final String zimId, boolean useMsgBox, HashMap<String, String> extParams, ZIMCallback callback);
}

接口调用

  1. 初始化 SDK

    为提高身份核验的用户体验,并为刷脸认证准备必要数据,Android 客户端需要进行 SDK 初始化。初始化的代码示例如下:

    ZIMFacade.install(context);
  2. 获取 metaInfo 数据

    示例代码如下:

    String metaInfos = ZIMFacade.getMetaInfos(context);

    您在调用刷脸认证服务端 发起认证请求 时需要传入该 metaInfo 值。

  3. 开始认证

    目前企业版在 Android 客户端支持接入手机端和 Pad 端,请根据自身业务需求选择需要接入的版本。

    两者的示例代码如下:

    • Android 手机端:
      ZIMFacade zimFacade = ZIMFacadeBuilder.create(MainActivity.this);
      zimFacade.verify(certifyId, true, new ZIMCallback() {
       @Override
       public boolean response(ZIMResponse response) {
           // TODO: 接入方在这里实现自身业务
           if (null != response && 1000 == response.code) {
               // 认证成功
           } else {
               // 认证失败
           }
           return true;
       }
      }
    • Android Pad 端:
      ZIMFacade zimFacade = ZIMFacadeBuilder.create(MainActivity.this);
      
      HashMap<String, String> extParams = new HashMap<>();
      extParams.put(ZIMFacade.ZIM_EXT_PARAMS_KEY_SCREEN_ORIENTATION, ZIMFacade.ZIM_EXT_PARAMS_VAL_SCREEN_LAND);
      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;
    }

    返回结果说明:

    • 1000:代表刷脸成功,该结果仅供参考,可通过服务端 查询认证结果 获取最终认证结果;
    • 1001:表示系统错误;
    • 1003:表示验证中断;
    • 2002:表示网络错误;
    • 2006:表示刷脸失败,如需获取更详细的失败原因,需调用服务端 查询认证结果

接口混淆配置

为避免接口混淆,您可以参考以下代码来保留类名(一般是在打 release 包的时候):

-verbose

-keep class com.aliyun.aliyunface.network.model.** {*;}
-keep class com.aliyun.aliyunface.api.ZIMCallback {*;}
-keep class com.aliyun.aliyunface.api.ZIMFacade {*;}
-keep class com.aliyun.aliyunface.api.ZIMFacadeBuilder {*;}
-keep class com.aliyun.aliyunface.api.ZIMMetaInfo {*;}
-keep class com.aliyun.aliyunface.api.ZIMResponse {*;}
-keep class com.aliyun.aliyunface.api.ZIMSession {*;}
-keep class com.aliyun.aliyunface.config.**{*;}
-keep class com.aliyun.aliyunface.log.RecordBase {*;}
-keep class com.aliyun.aliyunface.ui.ToygerWebView {*;}
-keep class com.alipay.zoloz.toyger.**{*;}
-keep class com.aliyun.security.yunceng.** {*;}

-keep class com.alibaba.sdk.android.oss.** { *; }
-dontwarn okio.**
-dontwarn org.apache.commons.codec.binary.**