3 Android SDK Mini Face使用说明
Mini face版本是Pro的精简版本,其剥离了Pro版本中的接口,仅仅保留活体检测功能。Mini face能完成的功能,都可以在Pro版本中找到相应实现,本文档中,Android部分都以Android Studio做集成说明,以下章节开始详细描述Mini face的使用说明。
3.1 导入开发包
解压 PayEgisAuthenticationSDK.zip,解压后得到三个文件。如下图所示:
名称 |
具体内容 |
说明 |
备注 |
*.aar |
pgsface-release.aar |
SDK主体 |
|
jniLibs |
armeabi-v7a 等so包 |
So库 |
我们建议使用v7a架构的so库,如果需要其它架构的so,将v7下的库拷贝至其它arm架构下即可(注:arm64-v8a除外,我们的so库仅支持32位环境运行,如果您的项目下包含arm64-v8a文件夹将导致搭载64位处理器的设备强制加载64位库文件报错) |
license |
idl-license.face-android |
授权文件 |
授权文件和应用包名一一绑定,不可在多个应用下使用 |
将解压出的pgsface-release.aar拷贝到项目的libs中
在工程的gradle文件中添加对pgsface-release.aar的依赖,参见下图:
在项目工程中添加license授权文件,license文件需要拷贝至项目assets文件夹中.
[danger] 注意
license文件是和应用包名绑定的,因此不同应用使用远程实名认证SDK,需要申请相应的license。
在项目工程中添加对应的so库文件,我们建议使用v7a架构的so库,如果需要其它架构的so,将v7下的库拷贝至其它arm架构下即可(注:arm64-v8a除外,我们的so库仅支持32位环境运行,如果您的项目下包含arm64-v8a文件夹将导致搭载64位处理器的设备强制加载64位库文件报错)。
3.2 活体检测
Mini face中细化封装了活体检测接口,用以获取用户实景头像,活体检测过程中需要用户做随机n组动作或者自定义n组动作(1<=n<=6),最终取得一张用户实景头像。具体使用方法分为以下几步:
step1 实例化PayegisAuthFaceSDK类。。对活体检测SDK的配置需要做如下设置
sdk = new PayegisAuthFaceSDK(this, Const.AppId, Const.AppKey);
Config.appName = "payegispro-face-android";
特别注意的是:Config.appName = "payegispro-face-android";
调用活体检查需要给APP授权,因此需要配置SDK的Config.appName参数,具体命名规则:
yourAPPName +“-face-android”,appName为申请账户时,提交给远程实名管理平台的应用名称。
活体检测界面提供如下界面样式设定:
颜色的设置方法参数为16进制带alpha通道的色值,图片的设置方法参数为图片的资源id。
参考代码如下:
Config.setBackgroundColor(0xffffffff);//背景色
Config.setTipTextColor(0xff217be3);//提示语颜色
Config.setProgressColor(0xff217be3);//倒计时进度条颜色
Config.setFaceCircleColor(0xff217be3);//人脸采集框颜色
Config.setCountNumColor(0xff000000);//倒计时数字颜色
Config.setClosePicId(R.drawable.ic_close_ext);//返回按钮
Config.setSuccessPicId(R.drawable.ic_success);//成功按钮
Config.setWarningPicId(R.drawable.ic_warning);//警告按钮
Config.setSoundOffPicId(R.drawable.ic_disable_sound_ext);//关闭提示音按钮
Config.setSoundOnPicId(R.drawable.ic_enable_sound_ext);//打开提示音按钮
[danger] 注意
请在调用活体服务之前进行活体的UI配置(建议在初始化SDK后立即配置),否则将不会生效。
step2 获取相应Intent,并调用扫描页。具体方法名:
public Intent createRandomLivenessIntent(Context context, int randomNumber)
调用方法createRandomLivenessIntent (),获取相应Intent。
//获取活体检测 Intent,以随机的方式
Intent it = sdk.createRandomLivenessIntent(this, 2);
createRandomLivenessIntent()方法第二个参数指定了活体检测随机动作个数,互不重复,SDK一共提供了6种动作。这些动作被定义在FaceLivenessTypeHelper类常量中。
常量名 |
说明 |
EYE |
眨眨眼 |
MOUTH |
张嘴 |
HEAD_LEFT |
左摇头 |
HEAD_RIGHT |
右摇头 |
HEAD_UP |
抬头 |
HEAD_DOWN |
点头 |
如果您期望自定义动作,可以用以下函数完成定义:
public Intent createLivenessIntent(Context context, int[] liveness)
int[] liveness为动作数组,其动作类型必须符合FaceLivenessTypeHelper类中列出的常量,请参见上表。代码示例如下:
//自定义动作顺序
int[] liveness = {FaceLivenessTypeHelper.HEAD_DOWN,FaceLivenessTypeHelper.EYE};
Intent it = sdk.createLivenessIntent(this, liveness);
step3 调用扫描页,并处理结果获取图像。
以startActivityForResult()方式获取,相应的requestCode为:PayegisAuthFaceSDK.KEY_TO_DETECT_REQUEST_CODE,对应的在activity回调中获取相应图片,参考代码:
//调用扫描页
if (it != null) {
startActivityForResult(it, PayegisAuthFaceSDK.KEY_TO_DETECT_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (PayegisAuthFaceSDK.KEY_TO_DETECT_REQUEST_CODE == requestCode && resultCode == PayegisAuthFaceSDK.LIVE_RESULT_SUCCESS_CODE) {
new Thread(new Runnable() {
@Override
public void run() {
final Bitmap map = ImgUtil.bytesToBimap(PayegisAuthFaceSDK.bestFaceData);
runOnUiThread(new Runnable() {
@Override
public void run() {
faceImg.setImageBitmap(map);
}
});
}
}).start();
}
}
step4 从本地获取相应图片。
在对应的requestCode下获取图像,在onActivityResult()回调中利用PayegisAuthFaceSDK.bestFaceData KEY中获取图像字节数组,获取到真实图像文件。
3.3 权限说明
远程实名认证Mini face需要获取系统相关权限,在使用SDK时,需要动态获取以下3个权限,否则SDK将无法正常使用。
名称 |
描述 |
READ_PHONE_STATE |
读取手机状态 |
WRITE_EXTERNAL_STORAGE |
读写磁盘 |
CAMERA |
使用相机 |
授权参考代码如下:
/**
* 申请权限
*/
private void initPermission() {
ArrayList<String> perList = new ArrayList<>();
if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
perList.add(Manifest.permission.READ_PHONE_STATE);
}
if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
perList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
perList.add(Manifest.permission.CAMERA);
}
if (perList.size() > 0) {
String[] perArr = new String[perList.size()];
perList.toArray(perArr);
ActivityCompat.requestPermissions(this, perArr, 100);
}
}
3.4 混淆说明
远程实名认证SDK已经经过混淆,所以在打包时添加以下忽略:
-dontwarn com.**
-dontwarn cn.**
-dontwarn org.**
-dontwarn android.**
-dontwarn android.support.**
-dontwarn org.apache.**
#face
-keep public class com.payegis.idl.** { *;}
-keep public class com.payegis.face.** { *;}
-keep public class com.baidu.**{ *;}