更新记录

1.0.1(2026-08-11) 下载此版本

uniapp 非 uts 下 : ios main thread

1.0.0(2026-08-11) 下载此版本

第一版发布


平台兼容性

uni-app(5.14)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
× × × × × × 5.0 12 ×
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× × × × × × × × × × × ×

uni-app x(5.14)

Chrome Safari Android iOS 鸿蒙 微信小程序
× × 5.0 12 × ×

ohyes-scan

基于 HMS Scan Kit (Android) + Vision Kit (iOS) 的多码 UTS 扫码插件。

与 ohyes-hw-scan 的差异(AB 对比维度)

维度 ohyes-hw-scan(旧) ohyes-scan(新)
Android 引擎 HMS Default View HMS Default View
iOS 引擎 HMS ScanKitFrameWork Apple Vision Kit
双端 UI 一致性 SDK 各自接管,差异大 iOS 自定义原生 UI,Android 由 SDK 接管
多码支持 单码返回 多码中心点标记 + 点选(仅 iOS)
frameColor/maskColor 不生效 iOS 实际生效,Android 由 SDK 接管
multiCode 字段
iOS 包体积 内置 HMS framework(约 8MB) 仅系统 Vision framework

功能特性

  • Android / iOS 双端,原生弹层模式(仿旧插件 startScan)
  • 多码检测(仅 iOS):原生页在每帧识别到的码的中心点绘制圆形标记,用户点击其一即选中;Android 端由 HMS Default View 接管,仅返回单码
  • 取景框颜色、遮罩颜色由调用方传入,iOS 端实际生效;Android 端由 HMS Default View 接管
  • iOS 智能自动放大:持续无观测超过 1.5s 时(远距离小码典型场景)按光学档位序列渐进 ramp 放大(如 iPhone 15 Pro: 1.0x → 2.0x → 3.0x → 4.5x,每档落在最佳画质点;每档间隔可配置 rampInterval 默认 5s;上限基于光学档位动态计算 maxOpticalZoom × 1.5),iOS 15+ 开启多摄自动切换(光学无损),识别到任何观测后停止放大(autoZoom 默认 true,仅 iOS 生效)
  • iOS 弱光优化:自动帧率调整(iOS 14+ 弱光下延长曝光时间)+ 自动 HDR(高对比度场景),底部手动补光按钮(默认显示,点击开/关手电筒 0.7 亮度避免过曝反光)
  • 自动处理相机权限申请与错误回调
  • 返回 data / format / sceneType / extra / error 五字段

码制式支持

本插件 Android 端基于 HMS Scan Kit(华为统一扫码),iOS 端基于 Apple Vision Kit(VNDetectBarcodesRequest)。两端底层 SDK 的码制式集合并不完全对齐,本节给出官方文档整理后的对照表,便于按业务需要选择 formats 字段。

数据来源:

1. 插件统一码制式(ScanCodeFormat

插件对外暴露统一的字符串枚举,由 UTS 层映射到各平台 SDK 常量。下表为 formats 入参可使用的值及双端支持情况:

插件枚举值 类别 Android (HMS Scan Kit) iOS (Vision Kit) 返回 format 字段
qr 二维码 QRCODE_SCAN_TYPE .qr QR_CODE
aztec 二维码 AZTEC_SCAN_TYPE .aztec AZTEC
dataMatrix 二维码 DATAMATRIX_SCAN_TYPE ⚠️ .dataMatrix(iOS 15+) DATA_MATRIX
pdf417 二维码 PDF417_SCAN_TYPE .pdf417 PDF_417
code39 一维码 CODE39_SCAN_TYPE .code39 CODE_39
code93 一维码 CODE93_SCAN_TYPE .code93 CODE_93
code128 一维码 CODE128_SCAN_TYPE .code128 CODE_128
ean13 一维码 EAN13_SCAN_TYPE .ean13 EAN_13
ean8 一维码 EAN8_SCAN_TYPE .ean8 EAN_8
itf14 一维码 ITF14_SCAN_TYPE .itf14 ITF_14
upcA 一维码 UPCCODE_A_SCAN_TYPE ❌ Vision 无独立枚举(由 .ean13 覆盖),传入被过滤 UPC_A(仅 Android)
upcE 一维码 UPCCODE_E_SCAN_TYPE .upce UPC_E
codabar 一维码 CODABAR_SCAN_TYPE ⚠️ .codabar(iOS 15+) CODABAR
all 全部 ALL_SCAN_TYPE ✅ 全部已启用码制 平台返回值
barcode 一维码 ✅ 一维码位掩码合集 ✅ 一维码 symbology 列表 平台返回值

说明:

  • formats 不传或传空数组时,iOS 端默认仅识别二维码(.qr),以避免 Vision 默认全码制带来的误识别;Android 端默认 ALL_SCAN_TYPE
  • upcA 在 iOS Vision 中无独立枚举(UPC-A 实际由 .ean13 覆盖),传入 upcA 时 iOS 端会被过滤掉、不生效;Android 端正常识别。
  • codabardataMatrix 在 iOS 15.0 以下会被忽略(Vision 在 iOS 15 才加入这两个 symbology),Android 端始终可用。
  • 未识别/不支持的值在两端均被过滤,不影响其他有效码制。

2. HMS Scan Kit 完整码制式(Android + iOS)

HMS Scan Kit 在 Android 与 iOS 双端均提供相同的 13 种主流码制式,并额外支持「多功能码」识别。最低系统版本:Android 4.4+、iOS 9.0+。

码制式 类别 Android 常量 (HmsScan.*) iOS 位掩码 (HMSScanFormatTypeCode) 备注
QR Code 二维码 QRCODE_SCAN_TYPE QR_CODE (1 << 10)
Aztec 二维码 AZTEC_SCAN_TYPE AZTEC (1 << 0)
Data Matrix 二维码 DATAMATRIX_SCAN_TYPE DATA_MATRIX (1 << 5)
PDF417 二维码 PDF417_SCAN_TYPE PDF_417 (1 << 9)
Code 39 一维码 CODE39_SCAN_TYPE CODE_39 (1 << 2)
Code 93 一维码 CODE93_SCAN_TYPE CODE_93 (1 << 3)
Code 128 一维码 CODE128_SCAN_TYPE CODE_128 (1 << 4)
Codabar 一维码 CODABAR_SCAN_TYPE CODABAR (1 << 1)
EAN-8 一维码 EAN8_SCAN_TYPE EAN_8 (1 << 6)
EAN-13 一维码 EAN13_SCAN_TYPE EAN_13 (1 << 7)
ITF-14 一维码 ITF14_SCAN_TYPE ITF (1 << 8) iOS 头文件命名为 ITF,对应 Android 的 ITF14_SCAN_TYPE
UPC-A 一维码 UPCCODE_A_SCAN_TYPE UPC_A (1 << 11)
UPC-E 一维码 UPCCODE_E_SCAN_TYPE UPC_E (1 << 12)
多功能码 自定义 —(默认随全部码制识别) HMS 特有能力,结构化场景识别
全部 ALL_SCAN_TYPE ALL ((1<<13)-1) 不限制码制式

HMS Scan Kit 还可直接返回码值解析后的结构化场景类型(联系人、Wi-Fi、URL、日历、ID 卡、短信、电话、邮件、地理位置、商品条码、ISBN),iOS Vision 端无此能力,故本插件 sceneType 字段在 iOS 固定为空字符串。

3. Apple Vision Kit 完整码制式(iOS)

Apple Vision Kit 通过 VNBarcodeSymbology 枚举暴露支持的码制式,下表为完整列表及最低 iOS 版本要求。表中加粗项为本插件实际启用的 symbology。

VNBarcodeSymbology 类别 最低 iOS 插件是否启用 备注
.qr 二维码 11.0 ✅ 启用
.aztec 二维码 11.0 ✅ 启用
.pdf417 二维码 11.0 ✅ 启用
.dataMatrix 二维码 15.0 ✅ 启用 iOS 15+ 才可用
.microPDF417 二维码 15.0 ❌ 未启用
.microQR 二维码 15.0 ❌ 未启用
.code39 一维码 11.0 ✅ 启用
.code39Checksum 一维码 11.0 ❌ 未启用 带校验位的 Code 39
.code39FullASCII 一维码 11.0 ❌ 未启用 全 ASCII Code 39
.code39FullASCIIChecksum 一维码 11.0 ❌ 未启用 全 ASCII 带校验位
.code93 一维码 11.0 ✅ 启用
.code93i 一维码 11.0 ❌ 未启用
.code128 一维码 11.0 ✅ 启用
.ean8 一维码 11.0 ✅ 启用
.ean13 一维码 11.0 ✅ 启用 兼容识别 UPC-A
.upce 一维码 11.0 ✅ 启用
.itf14 一维码 11.0 ✅ 启用
.i2of5 一维码 11.0 ❌ 未启用 Interleaved 2 of 5;未在 formats 入参中暴露,默认不会识别
.iata2of5 一维码 15.0 ❌ 未启用 IATA 2 of 5
.codabar 一维码 15.0 ✅ 启用 iOS 15+ 才可用
.gs1DataBar 一维码 15.0 ❌ 未启用
.gs1DataBarExpanded 一维码 15.0 ❌ 未启用
.gs1DataBarLimited 一维码 15.0 ❌ 未启用
.msiPlessey 一维码 11.0 ❌ 未启用
.plessey 一维码 11.0 ❌ 未启用

说明:

  • Vision Kit 不提供独立的 UPC-A symbology:UPC-A 编码的码值会被 .ean13 识别(UPC-A 是 EAN-13 的子集,前导位为 0)。本插件 upcA 在 iOS 端会被过滤。
  • .i2of5(Interleaved 2 of 5)未在 formats 入参中暴露,且 formats 为空时默认仅识别 .qr,故本插件不会自动返回该 symbology。代码中保留 I2OF5 字符串映射仅作兜底。
  • 启用 revision = VNDetectBarcodesRequestRevision3(iOS 16+)可提升复杂/小码识别精度,本插件在 iOS 16+ 自动启用。

4. 双端差异速查

差异点 Android (HMS Scan Kit) iOS (Vision Kit)
最低系统版本 Android 4.4+ iOS 11.0+(codabar/dataMatrix 需 15+)
UPC-A 独立识别 ✅ 支持 ❌ 由 .ean13 覆盖,upcA 入参被过滤
Codabar ✅ 全版本支持 ⚠️ iOS 15+
Data Matrix ✅ 全版本支持 ⚠️ iOS 15+
多功能码 / 结构化场景 ✅ 返回 sceneType sceneType 固定为空字符串
置信度阈值 ❌ 不暴露,由 SDK 内部决定 ✅ 通过 confidence 字段控制(默认 0.8)
智能自动放大 ❌ HMS Default View 原生 Activity,无法控制相机 autoZoom 默认 true,按光学档位序列渐进放大,iOS 15+ 多摄自动切换
一维码合集 barcode 位掩码合集 symbology 列表

目录结构

uni_modules/ohyes-scan/
├── package.json
├── readme.md
└── utssdk/
    ├── interface.uts                  # 对外 API 类型声明
    ├── app-android/
    │   ├── index.uts                  # Android UTS 入口
    │   ├── hybrid.kt                  # HMS Default View 扫码工具类
    │   ├── config.json                # HMS Gradle 依赖
    │   └── AndroidManifest.xml        # 权限声明
    └── app-ios/
        ├── index.uts                  # iOS UTS 入口
        ├── hybrid.swift               # 原生 ScanViewController + Vision
        ├── config.json                # Vision framework 依赖
        └── info.plist                 # 权限说明

安装与使用

  1. 复制本插件到项目 uni_modules/ 目录。
  2. 在业务页面引入:
import { startScan, checkPermission, requestPermission } from '@/uni_modules/ohyes-scan'
  1. 启动扫码(默认开启多码点选 + iOS 智能自动放大):
startScan({
  formats: ['qr', 'barcode'],
  frameColor: '#4d8bf7',
  maskColor: '#B3000000',
  multiCode: true,
  autoZoom: true, // iOS 智能自动放大远距离小码,默认 true
  rampInterval: 5.0, // iOS 渐进放大间隔(秒),默认 5.0
  success: (res) => {
    console.log('选中码值:', res.data)
    console.log('码制式:', res.format)
  },
  fail: (err) => {
    console.error('扫码失败:', err.error)
  }
})

类型定义

详见 utssdk/interface.uts

type ScanOptions = {
  formats?: ScanCodeFormat[]
  frameColor?: string
  maskColor?: string
  multiCode?: boolean
  confidence?: number     // 仅 iOS 生效,默认 0.8
  autoZoom?: boolean      // 仅 iOS 生效,默认 true
  rampInterval?: number   // 仅 iOS 生效,渐进放大间隔(秒),默认 5.0
  success?: (res: ScanResult) => void
  fail?: (res: ScanResult) => void
  complete?: (res: ScanResult) => void
}

注意事项

  1. 真机调试:双端扫码均需真机;HBuilderX 须使用自定义基座。
  2. Android HMS 仓库配置:HMS Scan Kit 需在项目根目录 build.gradle 中配置华为 maven 仓库,已在仓库根目录提供 build.gradle 文件:
    allprojects {
       repositories {
           maven { url 'https://developer.huawei.com/repo/' }
           maven { url 'https://mirrors.huaweicloud.com/repository/maven/' }
       }
    }

    如仍报 Could not find com.huawei.hms:scanplus:2.15.0.301,请在 HBuilderX 中:manifest.json → App Android 配置 → 确认依赖源可用,或在自定义基座流程中手动编辑生成的 build.gradle

  3. Android HMS 配置:需保证 agconnect-services.json 已就绪,与 ohyes-hw-scan 共用一份。
  4. iOS Vision 最低版本:deploymentTarget 12.0。
  5. 不支持相册选图:本插件聚焦相机扫码,相册能力未实现。
  6. 不支持连续扫码:每次 startScan 仅返回用户选中的一个码。

与 ohyes-hw-scan 共存的依赖说明

两个插件均依赖 com.huawei.hms:scanplus:2.15.0.301,可在同一工程共存,无依赖冲突。

错误码

code 说明
0 扫码成功
-1 扫码失败、用户取消或权限被拒绝

许可

MIT

隐私、权限声明

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

相机

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

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

许可协议

MIT协议

暂无用户评论。