更新记录
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 字段。
数据来源:
- HMS Scan Kit:业务介绍 与本地
ScanKitFrameWork.framework/Headers/HmsScanFormat.h、AndroidHmsScan常量- Apple Vision Kit:VNDetectBarcodesRequest / VNBarcodeSymbology
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 端正常识别。codabar与dataMatrix在 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 # 权限说明
安装与使用
- 复制本插件到项目
uni_modules/目录。 - 在业务页面引入:
import { startScan, checkPermission, requestPermission } from '@/uni_modules/ohyes-scan'
- 启动扫码(默认开启多码点选 + 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
}
注意事项
- 真机调试:双端扫码均需真机;HBuilderX 须使用自定义基座。
- 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。 - Android HMS 配置:需保证
agconnect-services.json已就绪,与ohyes-hw-scan共用一份。 - iOS Vision 最低版本:deploymentTarget 12.0。
- 不支持相册选图:本插件聚焦相机扫码,相册能力未实现。
- 不支持连续扫码:每次
startScan仅返回用户选中的一个码。
与 ohyes-hw-scan 共存的依赖说明
两个插件均依赖 com.huawei.hms:scanplus:2.15.0.301,可在同一工程共存,无依赖冲突。
错误码
| code | 说明 |
|---|---|
| 0 | 扫码成功 |
| -1 | 扫码失败、用户取消或权限被拒绝 |
许可
MIT

收藏人数:
https://gitee.com/msunfeixiang/ohyes-scan
下载插件并导入HBuilderX
下载示例项目ZIP
赞赏(0)
下载 286
赞赏 0
下载 12499002
赞赏 1940
赞赏
京公网安备:11010802035340号