更新记录

1.0.0(2026-01-21)

  • feat(iOS): 补齐相机扫码 + 图片扫码(ScanKitFrameWork)
  • feat(iOS): 补齐相机权限 check/request,并处理用户取消扫码的快速失败
  • feat: 区分扫码取消与扫码失败(新增 9010010
  • chore: 同步插件文档与平台支持标记

平台兼容性

uni-app(4.87)

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

uni-app x(4.87)

Chrome Safari Android iOS 鸿蒙 微信小程序
- - - -

hans-hw-ml-kit

一个基于UTS开发的扫码插件,专为华为ML Kit设计,支持完整的权限管理和扫码功能。

功能特性

  • ✅ 支持QR码和条码识别
  • ✅ 华为扫码SDK支持(Android:Huawei ML Kit Scan;iOS:Huawei ScanKit)
  • ✅ 相机实时扫码和图片扫码两种模式
  • ✅ 完善的权限检查和申请机制
  • ✅ Android/iOS 同一套API
  • ✅ 完善的错误处理和类型定义

支持平台

  • ✅ Android (华为 ML Kit Scan)
  • ✅ iOS (Huawei ScanKit / ScanKitFrameWork,iOS 12+)

API 说明

初始化插件

import { initScanCode } from '@/uni_modules/hans-hw-ml-kit'

initScanCode({
  success: (res) => {
    console.log('初始化成功:', res)
    // res.isSupported - 是否支持华为ML Kit
  },
  fail: (err) => {
    console.error('初始化失败:', err)
  }
})

说明:

  • 建议应用启动/页面 onLoad 调一次 initScanCode;未初始化直接调用 scanCode 会走失败回调(9010003)。
  • Android/iOS 侧都按“单次扫码”设计,同一时刻只建议发起一次 scanCode(重复调用可能覆盖上一次回调)。

扫码功能

import { scanCode } from '@/uni_modules/hans-hw-ml-kit'

// 相机扫码
scanCode({
  scanType: 'all', // 'qr' | 'barcode' | 'all'
  mode: 'camera',
  success: (res) => {
    console.log('扫码结果:', res)
    // res.text - 扫码内容
    // res.format - 码格式
    // res.scanType - 码类型
  },
  fail: (err) => {
    console.error('扫码失败:', err)
  }
})

// 图片扫码
scanCode({
  scanType: 'qr',
  mode: 'image',
  imagePath: '/path/to/image.jpg',
  success: (res) => {
    console.log('图片扫码结果:', res)
  },
  fail: (err) => {
    console.error('图片扫码失败:', err)
  }
})

参数约定:

  • scanType'qr' | 'barcode' | 'all'(默认 all)。
  • mode'camera' | 'image'(默认 camera)。
  • imagePath:仅 mode: 'image' 必填;支持 uni.chooseImage 返回的临时路径,也支持 file://...

权限管理

import { checkPermission, requestPermission } from '@/uni_modules/hans-hw-ml-kit'

// 检查相机权限
checkPermission({
  permissions: ['android.permission.CAMERA'],
  success: (res) => {
    if (res.allGranted) {
      console.log('相机权限已授权')
    } else {
      console.log('相机权限未授权:', res.deniedList)
    }
  },
  fail: (err) => {
    console.error('权限检查失败:', err)
  }
})

// 申请相机权限
requestPermission({
  permissions: ['android.permission.CAMERA'],
  success: (res) => {
    if (res.allGranted) {
      console.log('权限申请成功')
    } else {
      console.log('部分权限被拒绝:', res.deniedList)
    }
  },
  fail: (err) => {
    console.error('权限申请失败:', err)
  }
})

说明(跨端一致性):

  • iOS 侧仅识别“相机权限”这一类权限;为了方便同一套代码复用,传 android.permission.CAMERA 在 iOS 侧也会被识别为相机权限(内部按字符串包含 camera 判断)。

日志开关

import { setLogEnabled } from '@/uni_modules/hans-hw-ml-kit'

// 默认开启;关闭后插件内部将不再输出日志
setLogEnabled(true)
setLogEnabled(false)

说明:setLogEnabled 同时控制 UTS 层与原生(Android/iOS)层的日志输出;日志统一前缀为 [hans-hw-ml-kit]

错误码说明

错误码 说明
9010001 不支持的平台
9010002 相机权限被拒绝
9010003 初始化失败
9010004 扫码失败
9010010 扫码取消
9010005 图片路径不存在
9010006 不支持的ML Kit提供商
9010007 权限被拒绝
9010008 权限申请失败
9010009 权限被永久拒绝

权限配置

Android:插件已自动配置以下权限:

  • android.permission.CAMERA - 相机权限(见 utssdk/app-android/AndroidManifest.xml

iOS:请在应用侧配置权限描述(插件提供了示例片段,需合并到你的 iOS 工程/配置中):

  • NSCameraUsageDescription(相机扫码)
  • NSPhotoLibraryUsageDescription(若使用“相册选图 + 图片识别”)
  • 示例:utssdk/app-ios/Info.plist

依赖说明

插件自动配置以下依赖:

  • 华为 Scan Kit: com.huawei.hms:scanplus:2.13.0.303
  • iOS ScanKit(CocoaPods):ScanKitFrameWork (~> 1.1.0.306)

技术实现

本插件采用 UTS + 原生混编:

  • UTS层:负责接口定义、参数校验、权限管理和线程调度
  • Android(Kotlin):负责 Huawei ML Kit Scan 的具体实现和回调处理
  • iOS(Swift):负责 Huawei ScanKit 的具体实现和回调处理

隐私、权限声明

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

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

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

暂无用户评论。