更新记录

1.7.8(2024-05-31)

【优化】Android端内置的申请权限依赖更新至最新版

1.7.7(2024-05-22)

【优化】IOS新增PrivacyInfo.xcprivacy文件,适配AppStore隐私协议

1.7.6(2024-04-24)

1) IOS修复传入language属性会导致app闪退的问题 2) Android端兼容11及以上版本

查看更多

平台兼容性

Android Android CPU类型 iOS
适用版本区间:4.4 - 14.0 armeabi-v7a:支持,arm64-v8a:支持,x86:未测试 适用版本区间:11 - 17

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios

注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择


插件功能概述

  • 支持自定义主题颜色(包括:状态栏、导航栏背景色、识别成功时文字提示颜色、采集框识别成功颜色、提示框确认按钮颜色)
  • 支持身份证正反面自动识别
  • 返回图片多样化,支持返回原图、裁剪矫正过的图片、人像区域图片3种图片可直接拿人像图片去做人脸比对,实名认证项目必备
  • 支持银行卡、车辆VIN、名片正面、马来西亚身份证、车牌、驾驶证主页、驾驶证副页、行驶证主页和行驶证副页识别,并且全部支持自动识别模式和手动拍照识别模式v1.2.6新增
  • 支持配置是否开启相册选择识别功能
  • 支持自定义超时提示内容
  • 支持自定义超时时间
  • 支持配置横屏或竖屏识别模式v1.3.0新增
  • 支持配置手动拍照识别和扫描自动识别模式
  • 支持配置是否开启复印件告警
  • 支持配置是否开启边框和框内遮挡告警
  • 支持配置是否开启翻拍告警
  • 支持配置是否开启 PS 检测告警
  • 支持配置是否开启临时身份证告警
  • 支持配置是否开启身份证有效日期不合法告警
  • 支持配置是否开启图片质量分数
  • 支持配置是否开启反光检测
  • 支持配置是否开启多卡证检测
  • 支持自定义图片资源,自定义tips提示v1.6.5新增
  • 支持Android/IOS双端本插件为原生SDK,仅支持App端
  • 待完善功能。。。

插件接入文档

关于更新

有空闲时间会不断更新维护,有问题随便提,有时间一定会修改,如有不懂的请QQ咨询:1299259684,或者添加QQ群:620436066

特别推荐

如需做实名认证功能,可以结合百度人脸采集插件使用

注意事项

  • 使用该插件时一定要先试用测试,如果不会搞的可以加群,群里有完整的测试demo,虚拟物品一旦购买之后无法退款!!!

准备工作

  1. Android、ios端证书准备工作
  2. 腾讯OCR官方资料准备
    • 1) 进入腾讯云后台官网点击这里
    • 2) 登陆腾讯云账号(没有的自行注册,注意:如果是公司项目使用,请让公司申请账号,除非你愿意将你的账号上缴给公司)
    • 3) 选择最下面的访问秘钥 --> API秘钥管理 --> 新建秘钥 --> 复制SecretId 和 SecretKey,妥善保管好
    • 4) ocr接口收费一览表点击这里

接入步骤(QQ:1299259684 不懂可咨询)

最简单的接入步骤(基本10分钟搞定)

  • step1:扫描上方QQ群二维码加入QQ群,下载对应Deom的ZIP压缩包,本插件demo为liyahong-TXOCR-Demo
  • step2:解压完成之后会看到很多文件和文件夹,你在桌面新建一个文件夹(最好英文命名哦),然后把你解压到的文件和文件夹拷贝到你创建的这个文件夹下
  • step3:打开hx,然后依次选择文件 --> 导入 --> 从本地目录导入 --> 选择刚才在桌面创建的文件夹 --> 导入成功
  • step4:打开导入的项目,然后打开manifest.json文件,重新获取appid,或者填写你项目的appid都可以
  • step5:回到插件页面,看右边有个试用的按钮,点它,然后弹出来一个模态框,选择试用的项目,点击确认按钮
  • step6:回到hx,然后再次打开manifest.json文件,然后依次选择App原生插件配置 --> 云端插件 --> 选择云端插件 --> 勾选【Android/IOS支持】腾讯OCR,身份证识别的插件
  • step7:打开pages下的index.vue文件,然后将secretIdsecretKey替换为你的
  • step8:打自定义基座包运行测试,详细操作看详细接入步骤的第4条及以后

详细接入步骤

  1. 点击试用插件,选择要试用的项目,获取试用资格

  2. 点击manifest.json --> App 原生插件配置 --> 云端插件 --> 勾选插件对应的插件

  3. 自定义资源图片,如相册、拍照、手电筒图片等注意:SDK有默认图片,如需自定义可以按照以下步骤配置

    • 1) Android端放置目录:nativeplugins --> liyahong-TXOCR --> android --> res --> mipmap-xhdpi
    • 2) IOS端放置目录:nativeplugins --> liyahong-TXOCR --> ios --> OCRSDKImage.bundle
    • 3) 自定义图片尺寸说明
图片名称 建议尺寸 图片格式 说明
lyh_ocr_light_off 80*80 png 关闭手电筒图片
lyh_ocr_light_on 80*80 png 打开手电筒图片
lyh_ocr_photo_album 80*80 png 相册选择图片
lyh_ocr_take_pictures 160*160 png 手动拍照图片
  1. 使用插件

    • 1) 插件方法说明
    • ocr(object, function) ocr文字识别方法
    • compressBase64Image(object, function) base64图片压缩方法,可以将图片压缩到150KB以下,具体说明见下v1.7.0新增
    • base64ToFile(object, function) base64数据转图片方法,可以将base64数据转换为本地图片,并返回本地路径,可以直接调用uni.uploadFile上传文件v1.7.0新增

    compressBase64Image方法说明

    参数说明

    属性 类型 默认值 必填 说明
    base64 string 需被压缩的base64数据,不带前缀
    compressSize int 150 期望压缩大小,单位KBv5.8.8新增

    返回值说明

    属性 返回值说明
    code 【必填】状态码
    msg 【必填】提示信息
    result 【选填】压缩结果,当code==1时必填

    result说明

    属性 属性说明
    base64 【选填】压缩后的base64数据,不带前缀
    originalSize 【选填】原图大小,单位byte
    compressedSize 【选填】压缩后的图片大小,单位byte

    base64ToFile方法说明

    参数说明

    属性 类型 默认值 必填 说明
    base64 string 需转换的base64数据,不带前缀

    返回值说明

    属性 返回值说明
    code 【必填】状态码
    msg 【必填】提示信息
    result 【选填】转换路径,当code==1时必填
  • 2) 参数说明文档
属性 类型 默认值 必填 说明
secretId string '' 您在腾讯云后台申请的SecretId
secretKey string '' 您在腾讯云后台申请的SecretKey
ocrType string idCardFront 识别类型,详细说明见下方ocrType
modeType int 0 识别模式,0:自动识别,1:手动拍照识别
themeColor string '' 导航栏背景颜色IOS不支持
navTitle string 身份证识别 导航栏文字内容IOS不支持
showTitleBar boolean true 是否显示导航栏IOS不支持 v1.5.5新增
statusBarColor string '#006FFF' 状态栏背景颜色IOS不支持 v1.5.5新增
dialogConfirmColor string '' 识别超时后提示框确认按钮颜色
cardSuccessColor string '' 识别成功时识别框四角的颜色
hintTextSuccessColor string '' 识别成功时识别框顶部提示文字颜色IOS不支持
albumEnable boolean false 是否开启相册选择
autoTimeOut int 10 自动识别超时时间,单位(秒)取值区间:5s < autoTimeOut < 30s
autoTimeOutHintText string 识别超时,是否切换为手动拍照识别模式 当自动识别超时,dialog中显示的文字内容
cropIdCard boolean false 是否开启身份证照片裁剪
cropPortrait boolean false 是否提取人像照片
copyWarn boolean false 是否开启复印件告警
borderCheckWarn boolean false 是否开启边框和框内遮挡告警
reshootWarn boolean false 是否开启翻拍告警
detectPsWarn boolean false 是否开启 PS 检测告警
tempIdWarn boolean false 是否开启临时身份证告警
invalidDateWarn boolean false 是否开启身份证有效日期不合法告警
quality boolean false 是否开启图片质量分数
reflectWarn boolean false 是否开启反光检测
multiCardDetect boolean false 是否开启多卡证检测
isHorizontal boolean false 是否开启横屏识别,设置true为横屏识别,否则为竖屏识别v1.3.0新增
showTips boolean true 是否显示扫描框下面的告警提示v1.5.6新增
showTipsText string 请避免识别内容折角、遮挡和反光 设置告警提示的文字内容v1.5.6新增
showStatusBar boolean true 是否显示状态栏IOS不支持 v1.6.8新增
language int 0 设置语言(0:简体中文 1:跟随系统 2:英文) v1.7.3新增
dialogTextColor string '' 识别超时后提示框内文字颜色IOS暂不支持 v1.7.2新增
showDialogTitle boolean true 是否显示超时提示框标题IOS暂不支持 v1.7.2新增
dialogCancelText string 取消 识别超时后提示框取消按钮文字内容IOS暂不支持 v1.7.2新增
dialogCancelColor string '' 识别超时后提示框取消按钮文字颜色IOS暂不支持 v1.7.2新增
dialogConfirmText string 切换模式 识别超时后提示框确认按钮文字内容IOS暂不支持 v1.7.2新增
flashEnable boolean true 是否显示手电筒IOS暂不支持 v1.7.2新增
showTipsIcon boolean true 是否显示识别框底部tips上的icon图标IOS暂不支持 v1.7.2新增
showTipsBackground boolean true 是否显示识别框底部tips的背景框IOS暂不支持 v1.7.2新增
  • 3) ocrType识别类型说明
属性值 说明
idCardFront 身份证正面识别
idCardBack 身份证反面识别
bankCard 银行卡识别(卡号面,不分正反均能识别)
businessCard 名片卡正面识别
vin 车辆的VIN识别
carIdCard 车辆的车牌识别
driverCardFront 驾驶证主页识别
driverCardBack 驾驶证副页识别
vehicleCardFront 行驶证主页识别
vehicleCardBack 行驶证副页识别
takeVin vin识别(手动拍照推荐使用)
idCardHK03 香港身份证03版本识别
idCardHK18 香港身份证18版本识别
exitEntryHKMacaoCard 港澳台通⾏证识别
mlidPassport 国际护照识别
  • 4) 代码示例
const txOCR = uni.requireNativePlugin('liyahong-TXOCR')

/**
 * 开始识别
 * secretId 和 secretKey获取指南
 *      1、打开【https://console.cloud.tencent.com/cam/capi】,登陆账号
 *      2、点击新建秘钥,然后查看secretKey,妥善保管秘钥
 */
ocr() {
    // 1.使用默认样式
    // txOCR.ocr({
    //  secretId: '您的secretId', //【必填】腾讯云控制台生成的secretId
    //  secretKey: '您的secretKey' //【必填】腾讯云控制台生成的secretKey
    // }, result => {
    //  switch (result.code) {
    //      case 1: // ocr文字提取成功
    //          this.resolveData(result.data)
    //          break
    //      case -2: // 权限申请被拒绝,仅Android端支持
    //          if (result.never) { // 是否被永远拒绝,如果被永远拒绝需要跳转设置页让用户手动开启
    //              this.showModal({
    //                  title: '权限受限',
    //                  msg: '您拒绝了一些权限,可能导致该服务无法正常使用,请前往设置!',
    //                  confirmText: '前往设置'
    //              }).then(() => {
    //                  permissionUtils.gotoAppPermissionSetting()
    //              })
    //          } else { // 没有永远拒绝就弹窗给予提示然后再次调用插件
    //              this.showModal({
    //                  title: '权限受限',
    //                  msg: '您拒绝了一些权限,可能导致该服务无法正常使用,请授予!'
    //              }).then(() => {
    //                  this.ocr()
    //              })
    //          }
    //          break
    //      case -1: // 其他错误,如配置属性不合法等
    //      default:
    //          /**
    //           * 注意:
    //           *  default返回的是ocr识别失败的错误码,此错误码与腾讯SDK保持一致
    //           *  详情参考:https://cloud.tencent.com/document/product/866/33528
    //           */
    //          this.ocrResult = JSON.stringify(result)
    //          break
    //  }
    // })

    // 2.使用自定义样式
    txOCR.ocr({
        secretId: '您的secretId', //【必填】腾讯云控制台生成的secretId
        secretKey: '您的secretKey', //【必填】腾讯云控制台生成的secretKey
        ocrType: 'idCardFront', // 选填【识别类型】默认值:idCardFront,身份证正面识别,idCardBack为身份证反面识别
        modeType: 0, // 选填【识别模式】默认值:0,0:自动识别,1:手动拍照识别
        themeColor: '#006FFF', // 选填【导航栏背景颜色,IOS不支持】默认值:无
        showTitleBar: true, // 选填【是否显示导航栏,IOS不支持】默认值:true
        navTitle: '身份证识别', // 选填【导航文字内容,IOS不支持】默认值:身份证识别
        statusBarColor: '#006FFF', // 选填【状态栏背景颜色,IOS不支持】默认值:#006FFF
        dialogConfirmColor: '#006FFF', // 选填【提示框确认按钮颜色】默认值:无
        cardSuccessColor: '#006FFF', // 选填【识别框颜色】默认值:无,识别成功时识别框四角的颜色
        hintTextSuccessColor: '#006FFF', // 选填【顶部提示文字颜色,IOS不支持】默认值:无,识别成功时识别框顶部提示文字颜色
        albumEnable: true, // 选填【是否开启相册选择】默认值:false
        autoTimeOut: 20, // 选填【自动识别超时时间】,单位(秒),默认值:10(取值区间:5s < autoTimeOut < 180s),当自动识别超时会弹出是否改为拍照识别提示框
        autoTimeOutHintText: '识别超时,是否切换识别模式!', // 选填【当自动识别超时,dialog中显示的文字内容】,默认值:识别超时,是否切换为手动拍照识别模式
        cropIdCard: true, // 选填【是否开启身份证照片裁剪】默认值:false,去掉证件外多余的边缘、自动矫正拍摄角度
        cropPortrait: true, // 选填【是否开启人像照片裁剪】默认值:false,自动抠取身份证头像区域
        copyWarn: true, // 选填【是否开启复印件告警】默认值:false
        borderCheckWarn: true, // 选填【是否开启边框和框内遮挡告警】默认值:false
        reshootWarn: false, // 选填【是否开启翻拍告警】默认值:false
        detectPsWarn: false, // 选填【是否开启 PS 检测告警】默认值:false
        tempIdWarn: false, // 选填【是否开启临时身份证告警】默认值:false
        invalidDateWarn: false, // 选填【是否开启身份证有效日期不合法告警】默认值:false
        quality: true, // 选填【是否开启图片质量分数】默认值:false,评价图片的模糊程度
        reflectWarn: true, // 选填【是否开启反光检测】默认值:false,照片反光程度检测
        multiCardDetect: true, // 选填【是否开启多卡证检测】默认值:false,多卡证检测
        isHorizontal: false, // 选填【是否开启横屏识别】默认值:false
        showTips: true, // 选填【是否显示扫描框下面的告警提示】默认值:true
        showTipsText: '请避免识别内容折角、遮挡和反光', // 选填【设置告警提示的文字内容】默认值:请避免识别内容折角、遮挡和反光
        showStatusBar: true, // 选填【是否显示状态栏,IOS不支持】默认值:true
        language: 0, // 选填【设置语言,0:简体中文 1:跟随系统 2:英文】默认值:0
        dialogTextColor: '#333333', // 选填【识别超时后提示框内文字颜色】
        showDialogTitle: true, // 选填【是否显示超时提示框标题】默认值:true
        dialogCancelText: '取消', // 选填【识别超时后提示框取消按钮文字内容】默认值:取消
        dialogCancelColor: '#333333', // 选填【识别超时后提示框取消按钮文字颜色】
        dialogConfirmText: '切换模式', // 选填【识别超时后提示框确认按钮文字内容】默认值:切换模式
        flashEnable: true, // 选填【是否显示手电筒】默认值:true
        showTipsIcon: true, // 选填【是否显示识别框底部tips上的icon图标】默认值:true
        showTipsBackground: true // 选填【是否显示识别框底部tips的背景框】默认值:true
    }, result => {
        switch (result.code) {
            case 1: // ocr文字提取成功
                this.resolveData(result)
                break
            case -2: // 权限申请被拒绝,仅Android端支持
                if (result.never) { // 是否被永远拒绝,如果被永远拒绝需要跳转设置页让用户手动开启
                    this.showModal({
                        title: '权限受限',
                        msg: '您拒绝了一些权限,可能导致该服务无法正常使用,请前往设置!',
                        confirmText: '前往设置'
                    }).then(() => {
                        permissionUtils.gotoAppPermissionSetting()
                    })
                } else { // 没有永远拒绝就弹窗给予提示然后再次调用插件
                    this.showModal({
                        title: '权限受限',
                        msg: '您拒绝了一些权限,可能导致该服务无法正常使用,请授予!'
                    }).then(() => {
                        this.ocr()
                    })
                }
                break
            case -1: // 其他错误,如配置属性不合法等
            default:
                /**
                 * 注意:
                 *  default返回的是ocr识别失败的错误码,此错误码与腾讯SDK保持一致
                 *  详情参考:https://cloud.tencent.com/document/product/866/33528
                 */
                this.ocrResult = JSON.stringify(result)
                break
            }
    })
},
/**
 * 解析数据
 * @param {string} result
 */
resolveData(result) {
    const idCardReuslt = JSON.parse(result.data)
    let otherBase64Image = idCardReuslt.AdvancedInfo
    // 确保有修正过的base64数据
    if (otherBase64Image) {
        otherBase64Image = JSON.parse(idCardReuslt.AdvancedInfo)
        // 确保有裁剪过的图片
        const idCardPhoto = otherBase64Image.IdCard
        if (idCardPhoto) {
            this.idCardBase64Result = `data:image/jpg;base64,${idCardPhoto}`
        }
        // 确保有人像图片
        const portraitPhoto = otherBase64Image.Portrait
        if (portraitPhoto) {
            this.idCardPortraitBase64Result = `data:image/jpg;base64,${portraitPhoto}`
        }
        // 避免view渲染卡顿,删除base64数据
        delete idCardReuslt.AdvancedInfo
    }
    this.ocrResult = JSON.stringify(idCardReuslt)
    this.base64Result = `data:image/jpg;base64,${result.base64Image}`
}
/**
 * 显示弹窗提示
 */
showModal({ title, msg, confirmText }) {
    return new Promise((resolve, reject) => {
        uni.showModal({
            title,
            content: msg,
            showCancel: true,
            confirmText: confirmText || '确认',
            success(res) {
                if (res.confirm) {
                    resolve()
                } else {
                    reject()
                }
            },
            fail() {
                reject()
            }
        })
    })
}
  • 5) 打自定义基座
  • 6) 运行项目,开始测试(注意:运行时建议把之前的安装包卸载!否则有可能会出现修改了无效果的情况!),建议:如果需要上传图片到自己服务器上,建议直接上传base64数据给后端,让后端来转为图片,在前端转换图片会出现未知兼容问题。

  • 7) result返回值说明

属性 返回值说明
code 【必填】状态码,说明见下
msg 【必填】提示信息
never 【选填】权限申请时是否选择了“拒绝且不弹出”的选项,也就是权限被永远拒绝,当code===-2时为必填项
data 【选填】腾讯返回的OCR文字提取JSON数据当code===1时为必填项
base64Image 【选填】原图的base64数据,当code===1时为必填项
  • 8) code返回值说明
状态码 返回值说明
1 识别成功
-1 其他错误,如参数填写错误等
-2 权限申请被用户拒绝IOS不支持
腾讯状态码 腾讯SDK返回的错误信息

隐私、权限声明

1. 本插件需要申请的系统权限列表:

Android 1.使用相机权限:android.permission.CAMERA 2.文件存储权限:android.permission.WRITE_EXTERNAL_STORAGE 3.访问文件权限:android.permission.READ_EXTERNAL_STORAGE IOS 1.使用相机权限:NSCameraUsageDescription 2.相册访问权限:NSPhotoLibraryUsageDescription

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件使用的腾讯云OCR文字识别SDK会采集数据,用于文字识别功能,详情可参考:https://cloud.tencent.com/document/product/866

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问