更新记录
1.0.0(2026-06-22)
- 新增 NFC 标签读写 UTS 插件,提供统一会话、标签发现、NDEF、技术指令、能力矩阵和错误码契约。
- Android 接入系统 NFC 原生能力,覆盖 ReaderMode、NDEF 读写、格式化写入、NfcA/B/F/V、IsoDep、MifareClassic、MifareUltralight。
- iOS 接入 Core NFC 基础能力,覆盖标签会话、NDEF 读写、活动标签缓存、ISO7816 APDU,并对系统限制能力返回明确失败。
- HarmonyOS 增加
ohos.permission.NFC_TAG 权限声明、统一 API 入口和结构化待适配错误,不伪造成功结果。
- 新增 uni-app、uni-app x 示例和当前项目 NFC 调试页,便于打自定义基座后做真机验证。
- 新增发布守卫脚本,校验命名、接口、平台配置、示例入口、禁用词和关键原生实现文件。
平台兼容性
uni-app(4.84)
| Vue2 |
Vue3 |
Chrome |
Safari |
app-vue |
app-nvue |
Android |
iOS |
鸿蒙 |
| √ |
√ |
× |
× |
√ |
√ |
√ |
√ |
√ |
| 微信小程序 |
支付宝小程序 |
抖音小程序 |
百度小程序 |
快手小程序 |
京东小程序 |
鸿蒙元服务 |
QQ小程序 |
飞书小程序 |
小红书小程序 |
快应用-华为 |
快应用-联盟 |
| × |
× |
× |
× |
× |
× |
× |
× |
× |
× |
× |
× |
uni-app x(4.84)
| Chrome |
Safari |
Android |
iOS |
鸿蒙 |
微信小程序 |
| × |
× |
√ |
√ |
√ |
× |
lizhao-nfc-pro
lizhao-nfc-pro 是面向 uni-app / uni-app x 的 NFC 标签读写 UTS 插件,用于业务 App 读取、写入和诊断用户主动靠近设备的 NFC 标签。
功能特色
- Android 已接入系统 NFC ReaderMode、NDEF 读写、格式化写入、IsoDep、NfcA/B/F/V、Mifare Classic 和 Mifare Ultralight。
- iOS 已接入 Core NFC 会话、标签发现、NDEF 读写、ISO7816 APDU 和能力边界诊断。
- HarmonyOS 已提供权限声明、统一 API 入口和结构化能力边界,真实标签读写需在 Harmony 自定义基座和目标 SDK 环境下继续联调。
- 提供统一会话控制、标签发现监听、活动标签缓存和能力矩阵。
- 支持 NDEF 文本、URI、MIME、自定义 external、raw payload 的统一建模。
- 预留 Mifare Classic、Mifare Ultralight、IsoDep、NfcA/B/F/V 等技术类型接口。
- 所有不支持或不可用能力均返回结构化错误,不伪造成功。
- 文档和示例面向客户接入,先给最小调用,再给增强场景。
接入方式选择
| 场景 |
推荐 API |
说明 |
| 判断设备是否可用 |
getNfcStatus / getNfcCapabilities |
先检查平台、开关、权限和能力矩阵 |
| 读取 NDEF |
startNfcSession + onTagDiscovered + readNdef |
iOS 需要主动开启会话;Android 启用前台 ReaderMode |
| 写入 NDEF |
writeNdef |
iOS 需在活跃会话内写入;Android 需先发现活动标签 |
| 发送 APDU |
isoDepTransceive |
适用于支持 IsoDep 的标签 |
| Mifare 块读写 |
mifareClassicReadBlock / mifareClassicWriteBlock |
需先鉴权,平台能力以矩阵为准 |
| 原始技术指令 |
nfcATransceive 等 |
适用于熟悉标签协议的业务 |
支持平台
| 平台 |
是否支持 |
说明 |
| Android |
是 |
已接入系统 NFC 原生能力,需要包含 NFC 权限的自定义基座 |
| iOS |
是 |
已接入 Core NFC 会话和 NDEF/ISO7816 基础能力,能力受 iOS 系统限制 |
| HarmonyOS |
部分 |
已声明 ohos.permission.NFC_TAG 并提供统一入口;基础版对真实读写返回结构化待适配错误 |
| Web |
否 |
Web 不提供 App 原生 NFC 标签能力 |
| 微信小程序 |
否 |
当前插件不提供小程序 NFC 适配 |
| 支付宝小程序 |
否 |
当前插件不提供小程序 NFC 适配 |
最小示例
import { getNfcStatus, startNfcSession, onTagDiscovered, readNdef } from '@/uni_modules/lizhao-nfc-pro'
// 先检查当前平台 NFC 状态,避免直接进入读写流程。
getNfcStatus({
success(res) {
console.log('NFC 状态', res)
},
fail(err) {
console.log('NFC 状态检查失败', err)
}
})
// iOS / HarmonyOS 需要主动开始会话;Android 可用于启用前台 reader mode。
startNfcSession({
alertMessage: '请将 NFC 标签靠近设备感应区',
keepSessionAlive: true,
success(res) {
console.log('NFC 会话已开始', res)
}
})
// 标签事件是持续回调,页面卸载时应调用 offTagDiscovered。
onTagDiscovered((tag) => {
console.log('发现 NFC 标签', tag.uidHex, tag.techs)
// 读取当前活动标签的 NDEF 数据。
readNdef({
success(res) {
console.log('NDEF 内容', res.records)
}
})
})
写入 NDEF 示例
import { buildTextRecord, buildUriRecord, writeNdef } from '@/uni_modules/lizhao-nfc-pro'
// 构造文本和 URI 记录,统一交给 writeNdef 写入当前活动标签。
const textRecord = buildTextRecord({ text: '欢迎使用 lizhao-nfc-pro', lang: 'zh-CN' })
const uriRecord = buildUriRecord({ uri: 'https://example.com' })
writeNdef({
records: [textRecord, uriRecord],
success(res) {
console.log('NDEF 写入成功', res)
},
fail(err) {
console.log('NDEF 写入失败', err)
}
})
参数说明
startNfcSession(options)
说明
开始 NFC 会话或启用前台读卡模式。
支持平台
Android / iOS / HarmonyOS(HarmonyOS 基础版返回结构化待适配错误)
| 参数 |
类型 |
必填 |
说明 |
默认值 |
可选参数 |
| options |
NfcSessionOptions |
否 |
会话参数 |
无 |
alertMessage / keepSessionAlive / success / fail / complete |
| options.alertMessage |
string |
否 |
iOS / HarmonyOS 会话提示文案 |
无 |
无 |
| options.keepSessionAlive |
boolean |
否 |
读到标签后是否保持会话,便于继续写入 |
false |
true / false |
| options.success |
function |
否 |
成功回调 |
无 |
无 |
| options.fail |
function |
否 |
失败回调 |
无 |
无 |
| options.complete |
function |
否 |
完成回调 |
无 |
无 |
writeNdef(options)
说明
向当前活动标签写入 NDEF 消息。
支持平台
Android / iOS / HarmonyOS(HarmonyOS 基础版返回结构化待适配错误)
| 参数 |
类型 |
必填 |
说明 |
默认值 |
可选参数 |
| options |
NfcWriteOptions |
是 |
写入参数 |
无 |
records / success / fail / complete |
| options.records |
Array |
是 |
需要写入的 NDEF 记录 |
无 |
无 |
| options.success |
function |
否 |
写入成功回调 |
无 |
无 |
| options.fail |
function |
否 |
写入失败回调 |
无 |
无 |
| options.complete |
function |
否 |
完成回调 |
无 |
无 |
错误码
| 错误码 |
含义 |
说明 |
| 9060001 |
platform unsupported |
当前平台不支持 NFC 原生标签能力 |
| 9060002 |
native context unavailable |
原生上下文不可用 |
| 9060003 |
permission denied |
权限未授予或能力未配置 |
| 9060004 |
nfc disabled |
NFC 开关未开启 |
| 9060005 |
session inactive |
NFC 会话未开启 |
| 9060006 |
tag unavailable |
当前没有可操作标签 |
| 9060007 |
tag expired |
活动标签已过期 |
| 9060008 |
tech unsupported |
当前标签或平台不支持该技术类型 |
| 9060009 |
authentication failed |
Mifare 鉴权失败 |
| 9060010 |
tag lost |
标签连接丢失 |
| 9060011 |
write failed |
写入失败 |
| 9060012 |
format failed |
格式化失败 |
| 9060013 |
invalid payload |
入参或载荷不合法 |
| 9060014 |
transceive failed |
原始指令发送失败 |
| 9060015 |
reader busy |
读写器正忙 |
| 9060016 |
session timeout |
会话超时 |
| 9060017 |
native implementation pending |
当前平台原生适配未完成 |
完整示例源码
| 示例 |
路径 |
说明 |
| uni-app 页面示例 |
uni_modules/lizhao-nfc-pro/example/uniapp/nfc.vue |
适合复制到普通 Vue 页面验证 |
| uni-app x 页面示例 |
uni_modules/lizhao-nfc-pro/example/uniappx/index.uvue |
适合复制到 UVUE 页面验证 |
| 当前项目调试页 |
pages/nfc/nfc.vue |
已挂到首页入口,便于打基座后测试 |
自定义基座说明
本插件已经修改 Android Manifest、iOS NFC Capability / Entitlements、HarmonyOS NFC 权限声明和 App 端平台 UTS/Swift 原生能力。真机使用最新能力前,需要重新运行对应平台原生联编或重新打对应平台自定义基座;仅更新 wgt/appResource 不能替换旧基座中已编译的 App 原生部分。