更新记录
2.0.5(2022-11-14)
安卓更新:
升级SDK版本至2.8.0.300
2.0.4(2022-05-13)
iOS更新:
1.1.0.302版本的sdk有bug,故回退sdk的版本至1.0.2.300
2.0.3(2022-05-11)
iOS更新:
解决上架APPStore报错问题
查看更多平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:4.4 - 11.0 | armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 | 适用版本区间:9 - 15 |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
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原生插件配置”->”云端插件“列表中删除该插件重新选择
简介
本插件基于华为的HMS ScanKit扫码,提供便捷的条形码和二维码扫描、解析、生成能力,可以帮助开发者快速构建应用内的扫码功能。
提醒:请使用HBuilderX3.1+版本打包本插件
功能
- 支持13种码格式:ScanKit支持全球主流的13种码制式识别。ScanKit几乎覆盖了日常生活中可见的各种二维码和条形码,识别成功率超过96%。
- 远距离检测与自动放大:ScanKit可通过自动检测远距离码和小型码并进行自动放大,提高使用者的应用扫码成功率。
- 任意角度识别:ScanKit基于自动检测及旋转纠正能力,支持用户从任意角度扫码,提升应用扫码灵活度和识别率。
- 复杂场景识别增强:ScanKit基于多项计算机视觉技术(CV),能够在低光照、反光、变形、模糊、污损、彩色及特殊形态码等各种疑难场景中进行识别增强。
联系
有任何问题联系插件作者QQ:1032488929 或加Qun:954807577
使用
1.导入插件到项目中
2.在manifest.json中配置原生插件,在云端插件中选择本插件
3.在你的应用页面中使用
安卓使用说明
- 在template中:
<template> <view class="content"> <image class="logo" src="/static/logo.png" ></image> <view class="text-area" @click="scan(scanObj)"> <text class="title">点击开始扫码1</text> </view> <view v-if="value != '' ">扫码结果:{{value}}</view> <view class="text-area" @click="scan(scanObj2)"> <text class="title">点击开始扫码2</text> </view> <view v-if="value2 != '' ">自定义返回参数名的扫码结果1:{{value2}}</view> <view class="text-area" @click="scan(scanObj3)"> <text class="title">点击开始扫码3</text> </view> <view v-if="value3 != '' ">自定义返回参数名的扫码结果2:{{value3}}</view> <view class="text-area" @click="scan(scanObj5)"> <text class="title">连续扫码</text> </view> <view class="text-area" @click="scan(scanObj4)"> <text class="title">点击开始多条码扫码</text> </view> <view v-if="value4 != '' ">扫码结果:{{value4}}</view> <view class="text-area test" @click="photo()"> <text class="title">base64图片识别</text> </view> <view class="text-area" @click="buildCode()"> <text class="title">点击生成码图</text> </view> <view><image :src="img"></image></view> </view> </template>
-
在script中:
<script> // 获取 module var ScanModule = uni.requireNativePlugin("wss-scan") export default { data() { return { value: '', value2: '', value3: '', value4: '', scanObj:{ "scanType":["QRCODE","CODE93","CODE128","DATAMATRIX"], "scanMode":"Customized", "scanStyle":{"scanFrameSizePlus":{"width":300,"height":150},"scanFrameSize":100,"scanBgColor":"#1fffffff","scanText":"华为ScanKit扫码","scanTitle":"扫一扫"}, }, scanObj2:{ "scanType":["QRCODE","CODE93","CODE128","DATAMATRIX"], "scanKey":"wss1", "scanMode":"Customized", "scanStyle":{"scanFrameSize":200,"scanText":"华为ScanKit扫码","scanTitle":"扫一扫","scanPhoto":"invisible","scanCornerColor":"#ff0000","scanCornerLength":20,"scanCornerWidth":5,"scanLingDuration":2000}, "scanRequestImage":"1" }, scanObj3:{ "scanType":["QRCODE","CODE93","CODE128","DATAMATRIX"], "scanKey":"wss2", }, scanObj4:{ "scanKey":"wss3", "scanMode":"MultiProcessor", "scanStyle":{"scanTitle":"扫一扫","scanMultiTitle":"取消","scanMultiText":"扫描到多个码,请选择一个打开","scanPhoto":"visible","scanLight":"invisible"}, }, scanObj6:{ "content":"测试", "type":"QRCODE", "width":300, "height":300, "margin":1, "background":"#00ffff", "color":"#000000" }, scanObj5:{ "scanType":["QRCODE"], "scanMode":"Customized", "scanStyle":{"scanFrameSize":200,"scanText":"华为ScanKit扫码","scanTitle":"扫一扫","scanPhoto":"invisible"}, "scanContinuity":{"continue":"1","sleep":2000} }, img:'', } }, onLoad() { }, methods: { scan(v) { ScanModule.scan(v, (result) => { //ScanModule.stopScan(); //ScanModule.showToast({'message':'扫描成功','duration':2000}) var ret = result.scanValue; this.img = result.scanImage; if(ret.sKey){ switch(ret.sKey){ case "wss1": this.value2 = ret.sValue; break; case "wss2": this.value3 = ret.sValue; break; case "wss3": this.value4 = ret.sValue; break; } }else{ this.value = ret; } }) }, photo(){ //调用拍照后获取图片并转成base64格式,或其他方式获取base64 uni.chooseImage({ count: 1, sizeType: ['compressed'], sourceType: ['camera'], success: function (res) { pathToBase64(res.tempFilePaths[0]) .then(base64 => { let obj = { "scanKey":"wss", "scanMode":"Picture", "scanBase64":base64}; ScanModule.scan(obj, (result) => { console.log(result) }) }) .catch(error => {}) } }); }, buildCode(){ ScanModule.buildCode(this.scanObj4, (result) => { this.img = result.codeImage }) } } } </script>
参数和功能说明
-
scanType 码制式参数
目前插件支持13种码制式,支持自定义选择,请在调用时候传入参数,不传则默认为全部。
参数值 | 对应码制式 |
---|---|
CODE128 | Code 128 |
CODE39 | Code 39 |
CODE93 | Code 93 |
CODABAR | Codabar |
EAN13 | EAN-13 |
EAN8 | EAN-8 |
ITF14 | ITF |
UPCCODE_A | UPC-A |
UPCCODE_E | UPC-E |
QRCODE | QR code |
PDF417 | PDF417 |
AZTEC | Aztec |
DATAMATRIX | Data Matrix |
-
scanKey 自定义返回结果名参数
若一个页面有多个扫码按钮调用本插件时,为了区分不同的扫码按钮返回的结果,可使用自定义的返回参数名称。 例如 :{"scanKey":"wss"},此时返回类型为JOSN值:{"scanValue":{"sKey":"wss","sValue":"123"}},若未指定返回参数名,则直接返回String值的扫码结果{"scanValue":"123"}
-
scanMode 扫码风格参数
全屏和带扫码框或者多条码扫码风格
参数值 | 对应风格 |
---|---|
default | 全屏 |
Customized | 带扫码框 |
Landscape | 横屏模式 |
MultiProcessor | 多条码扫描 |
Camera | base64图片识别 |
-
scanStyle 自定义样式参数
Customized/MultiProcessor风格中,支持自定义样式参数如文字表述,是否显示相册等
参数值 | 类型 | 含义 | 支持风格 |
---|---|---|---|
scanFrameSizePlus | Object:{width,height} | 扫码框大小 | Customized/Landscape |
scanFrameSize | Int | 扫码框大小(传入scanFrameSizePlus时此字段失效) | Customized |
scanText | String | 文字表述 | Customized/Landscape |
scanTitle | String | 左上角标题文字 | Customized/MultiProcessor/Landscape |
scanPhoto | String | 是否显示相册(visible:显示,invisible:不显示) | Customized/MultiProcessor/Landscape |
scanLight | String | 是否显示手电筒(visible:显示,invisible:不显示) | Customized/MultiProcessor/Landscape |
scanCornerColor | String(十六进制) | 角边框颜色 | Customized/Landscape |
scanCornerLength | int | 角边框长度 | Customized/Landscape |
scanCornerWidth | int | 角边框宽度(厚度) | Customized/Landscape |
scanLingDuration | int | 扫描线条执行动画时间 | Customized/Landscape |
scanMultiTitle | String | 条码选择界面“取消”按钮文字 | MultiProcessor |
scanMultiText | String | 条码选择界面提示文字 | MultiProcessor |
-
scanRequestImage 扫码框风格是否返回扫码原图参数
用Customized扫码风格时,默认不返回,设置返回时,返回扫码成功时的原图,返回类型为String类型的图片base64编码
参数值 | 类型 | 含义 |
---|---|---|
scanRequestImage | String | 0:不返回 1:返回 |
-
scanContinuity 扫码框风格连续扫码模式参数
用Customized扫码风格时,默认不连续,设置连续时,返回扫码成功后的结果并重新进入扫码模式
参数值 | 类型 | 含义 | 是否必须 |
---|---|---|---|
continue | String | 1:连续扫码 | 是 |
sleep | int | 扫码间隔时间,单位毫秒 | 是 |
-
构建码生成功能参数
支持将字符串转换为一维码或二维码,目前已支持的码制式为EAN-8、EAN-13、UPC-A、UPC-E、Codabar、Code 39、Code 93、Code 128、ITF-14、QR Code、Data Matrix、PDF417、Aztec。开发者只需要提供字符串、码制式和码图尺寸要求,即可获得相应的码图,返回结果为String类型的码图base64编码字符串
参数值 | 类型 | 含义 | 是否必须 | 说明 |
---|---|---|---|---|
content | String | 码内容 | 是 | / |
type | String | 码制式 | 是 | type码制式对应的参数同扫码的码制参数 |
width | int | 宽度 | 是 | / |
height | int | 高度 | 是 | / |
margin | int | 码图边框宽度 | 是 | / |
background | String | 码图背景色 | 是 | / |
color | String | 码图颜色 | 是 | / |
-
scanBase64 图片识别模式
用Picture模式时,需要将base64格式图片的字符串传给接口。
参数值 | 类型 | 含义 | 是否必须 |
---|---|---|---|
scanBase64 | String | 需要识别的完整base64格式的图片字符串,data:image/jpg;base64,...... | 是 |
-
stopScan 退出扫描
Customized模式增加停止扫描接口:stopScan(),可用于连续扫描时结束扫描
-
showToast Toast弹窗
Customized模式增加Toast弹窗接口:showToast(),可用于连续扫描时弹窗提示
参数值 | 类型 | 含义 | 是否必须 |
---|---|---|---|
message | String | 内容 | 是 |
duration | int | 显示时长,单位毫秒 | 是 |
安卓的component组件使用说明
注意: 1.由于安卓摄像头的分辨率问题,界面的宽高比例请设置1:1或者4:3或者16:9,否则会导致画面拉伸变形。 2.请提前申请好相机和存储权限
- 在template中:
<template> <view> <wss-scan-component ref="scanComponent" :style="{width:scanWidth,height:scanHeight}" @scanResult="scanResult"></wss-scan-component> <view><text>{{text}}</text></view> </view> </template>
- 在script中:
<script> export default { data() { return { text:"", scanWidth:0, scanHeight:0 } }, onLoad() { var _this = this; uni.getSystemInfo({ success: function (res) { _this.scanWidth = res.screenWidth; _this.scanHeight = res.screenWidth; } }); }, methods:{ scanResult(e){ this.text = JSON.stringify(e.detail); }, torchON(){ //打开闪光灯 this.$refs.scanComponent.torchON(); }, torchOFF(){ //关闭闪光灯 this.$refs.scanComponent.torchOFF(); }, } } </script>
参数和功能说明
参数值 | 类型 | 含义 | 是否必须 |
---|---|---|---|
scanResult | Function | 扫码结果回调函数 | 是 |
iOS使用说明
- 在template中:
<template> <view class="content"> <button type="primary" @click="scan1">全屏扫码</button> <button type="primary" @click="scan2">扫码框扫码</button> <button type="primary" @click="scan3">连续扫码</button> <button type="primary" @click="photo">base64图片识别</button> <view> <text>{{text}}</text> </view> </view> </template>
-
在script中:
<script> var scanModule = uni.requireNativePlugin("wss-scan") var sum = 1; export default { data() { return { text:'' } }, methods: { scan1(){ scanModule.scan({ 'scanMode': 'default', 'scanKey':'wss1', "scanStyle":{"scanTitle":"扫一扫","scanPhoto":"visible","scanLight":"visible"}, }, (ret) => { this.text = JSON.stringify(ret); }) }, scan2(){ scanModule.scan({ 'scanMode': 'Customized', "scanStyle":{'scanFrameSizePlus':{"width":300,"height":150},"scanTitle":"扫一扫","scanPhoto":"visible","scanLight":"visible"}, }, (ret) => { this.text = JSON.stringify(ret); }) }, scan3(){ scanModule.scan({ 'scanMode': 'Customized', 'scanKey':'wss1', "scanStyle":{"scanTitle":"扫一扫","scanPhoto":"visible","scanLight":"visible","scanCornerColor":"#0000ff","scanCornerLength":30,"scanCornerWidth":2,"scanLingDuration":2000}, "scanContinuity":{"continue":"1","sleep":1500} }, (ret) => { //ScanModule.stopScan(); //ScanModule.showToast({'message':'扫描成功','duration':2000}) this.text = this.text + "第" + sum + "次扫码:" + JSON.stringify(ret) + " ;"; sum ++; }) }, photo(){ //调用拍照后获取图片并转成base64格式,或其他方式获取base64 uni.chooseImage({ count: 1, sizeType: ['compressed'], sourceType: ['camera'], success: function (res) { pathToBase64(res.tempFilePaths[0]) .then(base64 => { let obj = { "scanKey":"wss", "scanMode":"Picture", "scanBase64":base64}; scanModule.scan(obj, (result) => { console.log(result) }) }) .catch(error => {}) } }); } } } </script>
参数和功能说明
-
scanType 码制式参数
目前插件支持13种码制式,支持自定义选择,请在调用时候传入参数,不传则默认为全部。
参数值 | 对应码制式 |
---|---|
CODE128 | Code 128 |
CODE39 | Code 39 |
CODE93 | Code 93 |
CODABAR | Codabar |
EAN13 | EAN-13 |
EAN8 | EAN-8 |
ITF14 | ITF |
UPCCODE_A | UPC-A |
UPCCODE_E | UPC-E |
QRCODE | QR code |
PDF417 | PDF417 |
AZTEC | Aztec |
DATAMATRIX | Data Matrix |
-
scanKey 自定义返回结果名参数
若一个页面有多个扫码按钮调用本插件时,为了区分不同的扫码按钮返回的结果,可使用自定义的返回参数名称。 例如 :{"scanKey":"wss"},此时返回类型为JOSN值:{"scanValue":{"sKey":"wss","sValue":"123"}},若未指定返回参数名,则直接返回String值的扫码结果{"scanValue":"123"}
-
scanMode 扫码风格参数
支持风格,全屏和带扫码框或者横屏
参数值 | 对应风格 |
---|---|
default | 全屏 |
Customized | 带扫码框 |
Landscape | 横屏 |
Camera | base64图片识别 |
-
scanStyle 自定义扫码框样式参数
用Customized扫码风格时,支持自定义扫码框的大小,文字表述,是否显示相册
参数值 | 类型 | 含义 | 备注 |
---|---|---|---|
scanFrameSizePlus | Object:{width,height} | 扫码框大小 | |
scanText | String | 文字表述 | |
scanTitle | String | 左上角标题文字 | |
scanPhoto | String | 是否显示相册,默认不显示(visible:显示,invisible:不显示) | |
scanLight | String | 是否显示手电筒,默认不显示(visible:显示,invisible:不显示) | |
scanCornerColor | String(十六进制) | 角边框颜色 | |
scanCornerLength | int | 角边框长度 | |
scanCornerWidth | int | 角边框宽度(厚度) | |
scanLingDuration | int | 扫描线条执行动画时间 | 1.8.1新增,扫码线条从上到下执行一次的时间,单位毫秒,默认3000 |
-
scanContinuity 连续扫码模式参数
默认不连续,设置连续时,扫码成功后重新进入扫码模式(支持全屏和扫码框)
参数值 | 类型 | 含义 | 是否必须 |
---|---|---|---|
continue | String | 1:连续扫码 | 是 |
sleep | int | 扫码间隔时间,单位毫秒 | 是 |
-
scanBase64 图片识别模式参数
用Picture模式时,需要将base64格式图片的字符串传给接口。
参数值 | 类型 | 含义 | 是否必须 |
---|---|---|---|
scanBase64 | String | 需要识别的完整base64格式的图片字符串,data:image/jpg;base64,...... | 是 |
-
stopScan 退出扫描
Customized模式增加停止扫描接口:stopScan(),可用于连续扫描时结束扫描
-
showToast Toast弹窗
Customized模式增加Toast弹窗接口:showToast(),可用于连续扫描时弹窗提示
参数值 | 类型 | 含义 | 是否必须 |
---|---|---|---|
message | String | 内容 | 是 |
duration | int | 显示时长,单位毫秒 | 是 |
iOS的component组件使用说明
注意:请提前申请好相机和存储权限,在APP权限配置中填写摄像机隐私
-
在template中:
<template> <view> <view>返回结果:{{result}}</view> <view> <wssScan ref='wssScan' :scanWidth="scanWidths" :scanHeight="scanHeights" :scanFrame="scanFrame" @scanResult="scanResult"></wssScan> </view> </view> </template>
-
在script中:
<script> export default { data() { return { result:'', scanWidths:0, scanHeights:0, scanFrame:{"edge":false,"line":true,"lineSpeed":0.1} } }, onLoad() { var _this = this; uni.getSystemInfo({ success: function (res) { _this.scanWidths = res.screenWidth; _this.scanHeights = 300; } }); }, methods:{ scanResult(e){ this.result = e.detail.scanValue; } } } </script>
参数和功能说明
参数值 | 类型 | 含义 | 是否必须 |
---|---|---|---|
scanWidth | int | 宽度 | 是 |
scanHeight | int | 高度 | 是 |
scanFrame | Object | 是否显示边框和扫码线条,以及扫码线条的速度 | 否 |
scanResult | Function | 扫码结果回调函数 | 是 |
-
scanFrame字段详细说明:
参数值 类型 含义 是否必须 edge boolean 是否显示边框。默认false 否 line boolean 是否显示扫码线条,默认false 否 lineSpeed double 扫码线条的速度,默认0.01,越小越快 否