# 配置流程

## 接入配置

### 注意事项

- 人脸核身 SDK(Faceid)最低支持到 支持 Android 4.0 以上版本 API LEVEL 16。
- 人脸核身 SDK 将以 AAR 文件的形式提供,即 faceidsdk.aar。
- 人脸核身 SDK 同时需要依赖**公共组件(cepm_common.aar)**,同样也是以 AAR 文件的形式提供,详情请参见 [添加依赖](#yilai)。


<span id='yilai'></span>

### 添加依赖

为人脸核身 SDK 添加依赖的方式:将提供的 AAR 文件加入到 App 工程的 libs 文件夹下面,并且在 build.gradle 中添加下面的配置。

```
android{
     //...
     repositories {
        flatDir {
            dirs 'libs' //this way we can find the .aar file in libs folder
        }
    }
}

//添加依赖
dependencies {
    // json依赖
    implementation 'com.alibaba:fastjson:1.2.73'
    // okHttp依赖
    implementation 'com.squareup.okhttp3:okhttp:4.0.0'
    // 公共aar
    implementation(name: 'cepm_common', ext: 'aar')
    // 活体核身
    implementation(name: 'faceidsdk', ext: 'aar')
}

```
### 权限检测

在AndroidManifest.xml中添加
```
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
```
 - **Android 6.0 以上系统**
SDK 需要用到网络/相机/录音/写入手机存储权限,对 Android 6.0 以上的系统会做权限的运行时检测。
 - **Android 6.0 以下系统**
 由于 Android 6.0 以下系统 Android 并没有运行时权限检测,建议调用方在拉起 SDK 前,对网络/相机/麦克风/写入手机存储检测。

## 混淆配置

<span id='shili'></span>

# 接入示例

视频核身:
```
# 在MainActivity中单击某个按钮的代码逻辑

FaceidSDK.InputData inputdata=FaceidSDK.getInstance().new InputData(name.getText().toString(),idNum.getText().toString(), videoType);
Credential credential = new Credential();
credential.setSysName("XXXX").setPassword("XXXX").setUserCode("XXXX").setUrl("https://cepmtest.dhcccloud.com.cn/gateway");

FaceidSDK.getInstance().init(MainActivity.this, credential,new FaceidSDK.FaceidLoginListener() {
    @Override
    public void onLoginSuccess() { //登录成功,拉起 SDK 页面
        FaceidSDK.getInstance().startActivity(MainActivity.this,inputdata, new FaceidSDK.FaceidResultListener() {
            @Override
            public void onFailed(String errorCode, String errorMsg) {
                txtresult.setText("失败:错误码"+errorCode+";错误信息"+errorMsg);
            }

            @Override
            public void onFinish(FaceidSDK.OutputData result) {
                txtresult.setText("操作完成:识别结果"+result.isSuccess()+";相似分数"+result.getScore());

            }
        });
    }

    @Override
    public void onLoginFailed(String errorCode, String errorMsg) {

    }
});
```
[完整demo下载](./demo/faceidsdkdemo.rar) (跳转后点击查看**原始文件**)

# 接口详细说明

## SDK 接口调用方法

SDK 代码调用的入口为 `FaceidSDK` 这个类。

```
public class FaceidSDK {
    /**
    * 该类为一个单例,需要先获得单例对象再进行后续操作
    */
    public static FaceidSDK getInstance(){
    //    ...
    }

    /**
    * 在使用SDK前先初始化,
    * 传入证书key `credential`,
    * 由 FaceidLoginListener返回是否初始化SDK成功
    */
    public void init(Context context,Credential credential, FaceidLoginListener loginListerner){
    //    ...
    }

    /**
    * 初始化成功后,调用此函数拉起sdk页面。
    * 传入InputData(身份证,姓名,动作类型)
    * 由FaceidResultListener返回人脸核身结果。
    */
    public void startActivity(Context context,  InputData data,FaceidResultListener resultListener) {    
        // ...
    }

    /**
     * 初始化回调接口
     */
    public interface FaceidLoginListener {
        void onLoginSuccess();
        void onLoginFailed(String errorCode, String errorMsg);
    }

    /**
    * 人脸核身结果回调接口
    */
    public interface FaceidResultListener{
        void onFailed(String errorCode, String errorMsg);
        void onFinish(OutputData result);
    }
```

`startActivity()` 的第二个参数InputData用来传递数据:

 ```
    String name; //姓名
    String idNum; //身份证
    FaceidSDK.VideoType videoType;//LIP数字模式,ACTION动作模式, SILENT静默模式
 ```

> 以上参数被封装在 `FaceidSDK.InputData` 对象中。

## 接入示例
关于接口调用的示例可参考 [接入示例](#shili)

<span id='canshu'></span>

## 接口参数说明

| 参数 | 说明 | 类型 | 长度(字节) | 是否必填 |
| --- | --- | --- | --- | --- |
| name | 核验人的姓名| String | - | 是 | 
| idNum | 核验人的身份证号 | String | 32 | 是 |
| videoType        | 人脸核身类型<br/>动作活体:FaceidSDK.VideoType.ACTION<br/>数字活体:FaceidSDK.VideoType.LIP<br/>静默活体:FaceidSDK.VideoType.SILENT | FaceidSDK.VideoType | -                  | 是       |


# 错误码