MAUI读取NFC标签需分四步:平台配置、权限声明、插件集成、代码调用;iOS须配Info.plist中NFCReaderUsageDescription和com.apple.developer.nfc.readersession.formats,仅前台支持NDEF;Android需声明NFC权限并检查硬件开关;统一使用Plugin.NFC插件,初始化后调用StartReading监听OnTagRead事件,读取NdefMessage数据,iOS不支持写入。

MAUI 读取 NFC 标签需要分平台配置、权限声明、插件集成和代码调用四步走,iOS 和 Android 行为差异明显,不能共用一套逻辑直接运行。
iOS 平台必须先配 Info.plist
iOS 对 NFC 限制严格,即使代码写对,没加权限也会静默失败。需在 red">Platforms/iOS/Info.plist 中手动添加以下两项:
- NFCReaderUsageDescription:填写用户授权时显示的提示语,例如“用于读取门禁卡或产品信息”
-
com.apple.developer.nfc.readersession.formats:数组类型,至少包含
NDEF
注意:iOS 13+ 才支持 NDEF 读取,且仅限前台运行时可用;后台扫描不被允许。
Android 要开权限并处理系统兼容性
Android 端需在 Platforms/Android/AndroidManifest.xml 中声明:
-
(设为 false 避免 Google Play 拒绝无 NFC 设备)
实际运行时还要检查设备是否开启 NFC 开关,并确保标签是 NDEF 格式——MIFARE Classic 等非标准格式需额外密钥认证,Plugin.NFC 默认不支持,得换用 MIFARE Classic Tool 类专用工具。
用 Plugin.NFC 快速接入读取功能
这是目前 MAUI 生态中最轻量、跨平台最稳的 NFC 插件,支持 .NET 8+,推荐通过 NuGet 安装 Plugin.NFC:
- 初始化只需一行:
NfcImplementation.Initialize();(建议放在 App.xaml.cs 的启动逻辑中) - 监听标签靠近:
NfcImplementation.Reader.StartReading();,触发OnTagRead事件 - 读到的数据是
NdefMessage对象,可遍历Records提取文本、URI 或自定义类型 - 写入需主动调用
WriteNdefMessageAsync(),但 iOS 不支持写入,调用会直接跳过
插件内部已封装 NDEF 解析,不用手动处理 TLV 结构,适合快速上线读取类场景,比如扫码跳链接、读取产品参数。
真机调试常见卡点
很多问题不是代码错,而是环境没到位:
- Android 手机 NFC 感应区通常在后盖中上部(摄像头附近),不是屏幕下方;贴歪了就识别不到
- iOS 设备必须保持屏幕常亮、App 在前台,锁屏或切后台后立即中断扫描
- Type 1/2/4 标签基本都能读,但 Type 3(FeliCa)仅部分日版设备支持,MAUI 当前不推荐
- 首次运行时,Android 可能弹出“允许此应用使用 NFC”系统弹窗,用户拒绝后需手动进设置开启
基本上就这些。不需要自己写底层驱动,Plugin.NFC 已覆盖主流需求,重点是把平台配置做扎实。










