You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter项目调用CoreNFC的NFCNDEFReaderSession.begin()启动失败求助

解决Flutter项目中CoreNFC阅读器会话无法启动的问题

问题核心

你遇到的NFCNDEFReaderSession.readingAvailable = false,本质是Flutter项目的NFC权限配置不完整,导致系统判定当前环境不支持NFC读取——你仅给Release环境配置了权限,但Debug运行环境未同步配置。

分步修复方案

1. 补全全环境的NFC权限

打开Xcode,选中Runner Target:

  • 切换到Signing & Capabilities标签页
  • 点击+ Capability,搜索并添加Near Field Communication Tag Reading
  • 在权限的Targets选项中,确保Debug、Release、Profile三个环境全部勾选(之前仅配置了Release)

2. 完善Info.plist的NFC相关配置

确认Info.plist中添加了以下必要配置:

<!-- NFC使用权限说明 -->
<key>NFCReaderUsageDescription</key>
<string>需要使用NFC功能读取标签信息</string>
<!-- 指定支持的NFC格式(iOS 13+必填) -->
<key>com.apple.developer.nfc.readersession.formats</key>
<array>
    <string>NDEF</string>
</array>

3. 确保会话启动在主线程执行

修改NFCViewController的beginScanning方法,明确在主线程启动会话:

public func beginScanning() {
    DispatchQueue.main.async { [weak self] in
        guard NFCNDEFReaderSession.readingAvailable else {
            print("@@@ beginScanning: readingAvailable = false")
            return
        }
        guard let self = self else { return }
        self.session = NFCNDEFReaderSession(delegate: self, queue: nil, invalidateAfterFirstRead: false)
        self.session?.alertMessage = "请将iPhone靠近NFC标签以读取信息"
        self.session?.begin()
    }
}

4. 清理缓存并重新构建

  • 执行终端命令:flutter clean
  • 在Xcode中选择Product > Clean Build Folder
  • 重新将项目部署到真机

额外验证项

  • 确认测试设备为iPhone 7及以上(支持CoreNFC)
  • 检查设备NFC功能未被禁用(设置 > 通用 > NFC)
  • 确认iOS版本在11.0以上(你的iOS 17.3.1符合要求)

完成以上步骤后,点击按钮触发扫描时,readingAvailable会返回true,系统的NFC阅读器会话会正常启动并显示引导界面。

内容的提问来源于stack exchange,提问作者yoichi_KARAOKE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 03:37:42