最近在用Cordova接faceId的身份证识别和静默人脸识别,碰到了一些问题现在终于有时间把这些问题记录并做写总结。
一、身份证识别sdk
身份证sdk集成到Cordova个人感觉比较麻烦,重点是这个sdk不带UI界面,好在给的demo有带UI的sdk,于是在网上查找了另外的一个方法,直接在Android studio中导入 module的形式导入,到Android平台的样式如下图:
图1
现在就是要考虑如何从web页面跳到android页面当中,于是在网上找到了一个跳转的方法,如下代码
Intent intent =new Intent(this.cordova.getActivity(), IDCardDetectActivity.class);
注解:IDCardDetectActivity.class为你要跳到的Android页面,this.cordova.getActivity()为你当前的页面
另外再从web页面跳到android页面,在执行完一系列操作现在又要从Android页面回到web页面并带回一系列获得打返回值
if (action.equals("jumpHjk")) {
CordovaUtil.getInstance().setCallbackContext(callbackContext);
Intent intent = new Intent(this.cordova.getActivity(), IDCardDetectActivity.class);
intent.setPackage(this.cordova.getActivity().getApplicationContext().getPackageName());
//启动Activity
this.cordova.startActivityForResult((CordovaPlugin)this,intent,0);
//保持Cordova的Activity生命周期,用于随时返回结果到js端代码回调
this.cordova.setActivityResultCallback(this);
return true;
}
封装的类CordovaUtil
import org.apache.cordova.CallbackContext;
public class CordovaUtil {
private CallbackContext callbackContext;
private static class CordovaUtilHolder{
public final static CordovaUtil INSTANCE=new CordovaUtil();
}
private CordovaUtil() {
}
public static final CordovaUtil getInstance() {
return CordovaUtilHolder.INSTANCE;
}
public CallbackContext getCallbackContext() {
return callbackContext;
}
public void setCallbackContext(CallbackContext callbackContext) {
this.callbackContext = callbackContext;
}
}
在IDCardDetectActivity.java页面接收返回值并会传到上一个页面当中
Intent intent =new Intent();
iDCardImg =mQualityResult.croppedImageOfIDCard();
intent.putExtra("idcardimg_bitmap",‘’);
if (mQualityResult.attr.side == IDCardAttr.IDCardSide.IDCARD_SIDE_FRONT) {
portraitImg =’‘;
intent.putExtra("portraitimg_bitmap", CommonUtils.bmp2byteArr(portraitImg));
}
setResult(101,intent);
用下面代码来接受返回值并回传到js当中
public void onActivityResult(int requestCode,int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode ==0 && resultCode ==101) {
CordovaUtil.getInstance().getCallbackContext().success(Base64.encodeToString(data.getByteArrayExtra("idcardimg_bitmap"), Base64.DEFAULT));
CordovaUtil.getInstance().getCallbackContext().error("这是错误的参数");
}
}
以上就是身份证识别sdk导入到Cordova的基本过程。
二、人脸识别sdk
人脸识别的sdk就要好点,人脸识别sdk是自带UI界面的。
直接根据人脸识别demo以及文档,把需要调用的API直接抛出,集成到Cordova当中就可以了。