uniapp生成android并调用第三方sdk的拍照进行身份证识别

一、需求

uniapp生成android,集成商汤科技的android的sdk识别身份证信息

二、开发思路

uniapp使用Dcloudx软件的“原生打包”,然后集成到android项目中(参考了DCloudx的例子),发布成android包。

三、遇到的问题

1、uniapp与android Studio集成问题

  1. uniapp集成android
  2. uniapp和android间进行数据传输,方法调用
  3. uniapp离线打包集成到android studio中运行到真机提示app key不正确问题

2、android Studio中的问题

  1. android包升级到androidx包,报错问题
  2. 页面需要在AndroidManifest.xml中声明
  3. android中各页面数据返回问题
  4. 打包apk

3、 uniapp中的问题

  1. 图片的byte[]数组转base64
  2. nvue样式扭曲问题,flex布局的使用

四、解决方式

1、uniapp与android Studio集成问题

1. uniapp集成android

  1. 生成Android签名证书:Android平台签名证书(.keystore)生成指南
  2. 申请AppKey
  3. 参考Hbuildx中提供的App离线打包SDK,进行配置android端
  4. 将HBuilderX中的项目导出,将导出的资源复制到assets->apps下,如下图所示:
    uniapp生成android并调用第三方sdk的拍照进行身份证识别_第1张图片
  5. 修改build.gradle中signingConfigs中的证书数据,将证书拷贝到相应位置
    signingConfigs {
        config {
            keyAlias 'ecodeocrtests'// 别名
            keyPassword 'admin1'// 密码
            storeFile file('test.keystore')// key路径
            storePassword 'admin1'// 密码
            v1SigningEnabled true
            v2SigningEnabled true
        }
    }
  1. 在build.gradle中引入需要导入sdk的arr文件,引入必要的jar包
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'], exclude: [])
    implementation 'androidx.appcompat:appcompat:1.0.0'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation 'androidx.recyclerview:recyclerview:1.0.0'
    implementation 'com.facebook.fresco:fresco:2.5.0'
    implementation "com.facebook.fresco:animated-gif:2.5.0"
    implementation 'com.github.bumptech.glide:glide:4.9.0'
    implementation 'com.alibaba:fastjson:1.1.46.android'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    //rx
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
    implementation 'io.reactivex.rxjava2:rxjava:2.2.14'
    implementation 'com.drewnoakes:metadata-extractor:2.12.0'
}
  1. 第三方sdk存在so库文件,需要在build.gradle中配置添加armeabi-v7a、arm64-v8a、x86
defaultConfig {
	// ...省略代码
	ndk {
	     abiFilters 'x86', 'armeabi-v7a', 'arm64-v8a'
	}
}

2. uniapp和android间进行数据传输,方法调用

  1. 页面请求同步
    (略)
  2. 页面请求异步
    (略)
  3. 自动返回
// java中发送
Map<String,Object> params=new HashMap<>();
params.put("code", "success");
params.put("msg", "识别成功");
mWXSDKInstance.fireGlobalEventCallback("portraitEvent", params);
// 页面中接收
// 身份证人像照识别,返回数据监听
plus.globalEvent.addEventListener('portraitEvent', ret => {
	modal.toast({
		message: ret.msg,
		duration: 5
	});
	this.idCardInfo.mName = ret.idCardInfo.mName;
	// 将接收的图片byte数组转为arrayBuffer
	let arrayBuffer = new Int8Array(ret.idCardInfo.mResultFrontImageData).buffer
	// 由arrayBuffer转为base64字符串
	const base64 = uni.arrayBufferToBase64(arrayBuffer)
	// 拼接base64字符串显示图片
	this.idCardInfo.portraitImgData = 'data:image/jpeg;base64,' + base64
});

3. uniapp离线打包集成到android studio中运行到真机提示app key不正确问题

由于1中uniapp和android代码配置有问题

2、android Studio中的问题

1. android包升级到androidx包,报错问题

android包中的api,在androidx包中都有对应的实现,百度查一查,就可以完美修改

2. 页面需要在AndroidManifest.xml中声明

新增的页面需要在AndroidManifest.xml中声明后才能使用,不然会报错。

3. android中各页面数据返回问题

  1. 使用Intent保存数据,具有大小限制,太大的图片需要压缩
  2. 使用静态变量存储
public class DataHelper {
    private static final DataHelper helper= new DataHelper();
    public static DataHelper getInstance() {return helper;}
    Map<String, Object> data = new HashMap<String, Object>();
    public void saveData(String id, Object object) {
        data.put(id, object);
    }
    public Object getData(String id) {
        return data.get(id);
    }
    public Object getDataAndRemove(String id) {
        Object obj = data.get(id);
        data.remove(id);
        return obj;
    }
}

4.打包apk

参考:https://blog.csdn.net/u012241616/article/details/108803154

3、 uniapp中的问题

  1. 图片的byte[]数组转base64
let arrayBuffer = new Int8Array(ret.idCardInfo.mResultFrontImageData).buffer
// 由arrayBuffer转为base64字符串
const base64 = uni.arrayBufferToBase64(arrayBuffer)
// 拼接base64字符串显示图片
this.idCardInfo.portraitImgData = 'data:image/jpeg;base64,' + base64
  1. nvue样式扭曲问题,flex布局的使用
    (略)

参考文档:

  1. android打包apk:https://blog.csdn.net/u012241616/article/details/108803154
  2. Android平台签名证书(.keystore)生成指南
  3. 拍照图片过大时进行压缩:
    https://www.cnblogs.com/duanxz/p/3651418.html
    https://blog.csdn.net/u013928412/article/details/80358597
  4. android内数据传递:https://blog.csdn.net/gzyh_tech/article/details/82355585

你可能感兴趣的:(uniapp,android,uni-app)