Xamarin iOS配置NFC阅读器遇问题:NFCNdefReaderSession.ReadingAvailable恒为false
解决Xamarin iOS中NFCNDEFReaderSession读取不可用及服务连接失效问题
我之前在Xamarin iOS上配置NFC阅读器时也碰到过一模一样的问题,折腾了好久才搞定,给你列几个关键的排查点,应该能解决你的问题:
先确认设备和系统是否达标
别折腾模拟器了!NFCNDEFReaderSession只支持iPhone 7及以后的机型,而且系统必须是iOS 11或更高版本,模拟器压根没有NFC硬件支持,直接用真实设备测试。检查Info.plist的配置,这是最容易漏的
必须添加两个核心配置项,少一个都不行:- 加
NFCReaderUsageDescription键,值要写清楚你用NFC做什么,比如"读取NFC标签中的商品信息"——iOS会在首次请求权限时显示这个描述,没这个配置的话系统直接拒绝NFC访问。 - 加
com.apple.developer.nfc.readersession.formats数组,里面一定要包含NDEF这个字符串,告诉系统你的应用需要读取NDEF格式的标签。
在Xamarin里你可以直接双击Info.plist文件编辑,或者去项目属性的iOS应用设置里添加这些键值对。
- 加
代码里的会话初始化要规范
首先,必须在主线程初始化NFC会话,后台线程创建会直接导致服务连接失败。另外,一定要把会话对象设为强引用,别让GC给回收了!比如:private NFCNdefReaderSession _nfcSession; public void StartNfcScan() { if (NFCNdefReaderSession.ReadingAvailable) { // 这里的this要实现INFCNdefReaderSessionDelegate接口处理回调 _nfcSession = new NFCNdefReaderSession(this, null, false); _nfcSession.BeginSession(); } }检查开发者权限和签名配置
去Apple开发者后台看看你的App ID有没有启用"NFC Tag Reading"功能,要是没开的话赶紧打开,然后重新生成Provisioning Profile,再回到Xamarin项目里选择正确的配置文件。签名不对的话,系统也会拒绝你的应用连接NFC服务。关于那个服务连接失效的错误
你看到的com.apple.nfcd.service.corenfc连接失效错误,大多是因为上面的配置没做好导致的——要么是Info.plist缺项,要么是会话初始化在后台线程,或者签名权限没开。另外,别频繁创建销毁会话,容易触发系统的服务保护机制。
内容的提问来源于stack exchange,提问作者raV720
相关产品推荐
相关产品推荐

