更新记录

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

原生插件通用使用流程:

  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原生插件配置”->”云端插件“列表中删除该插件重新选择


简介

本插件基于华为的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,越小越快

其他

本插件在进行扫码前需要相机和存储权限
插件调用本地的sdk,不需要联网即可识别。

隐私、权限声明

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

相机权限 存储权限

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

插件不采集任何数据

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

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