我正在使用 Flutter 开发一个 Android+iOS 应用程序,它有多个用户交互屏幕和 NFC 屏幕。
在 NFC 屏幕上,用户背靠背轻敲手机(就像我们使用 Android 波束数据传输所做的那样):一部手机是 Android 手机,它正在运行应用程序并发送 NFC NDEF 消息,就像在这个example中一样。
在带有 NFC 屏幕的第二部手机上,“我的应用程序”正在运行并使用 nfc_in_flutter 读取 NDEF(flutter 中只有 3 个 nfc 插件,这是目前似乎唯一维护的一个)插件并显示在屏幕上。
这种情况在 Android 设备上运行良好,但是在 iOS 设备上,当我点击 Android 设备时没有任何反应。 它不读。
我用 iOS 设备测试了简单的 NFC 标签(不是 Android 设备),它读取了标签。 有人能解释一下是什么原因吗?
以下是我的推测,如有错误请指正: 由于 iOS 仅支持 NDEF 格式而不支持 HCE,我应该将 NDEF 从 Android 发送到 iOS。
我对主机卡仿真的了解:
为了让设备像卡片一样工作(或使用HCE),app需要创建HostApduService。当此服务正在运行时,手机(和应用程序本身)能够识别阅读器,如果一切正常,它会发送有效负载。消息的格式是 IsoDep(不是 NDEF)。
另一方面,阅读器端发送 ADPU 来建立连接,如果连接正常,它会接收有效载荷。
在上面example发件人创建NDEF消息并且不充当卡(HCE),因为没有创建HostApduService。
所以如果 iOS 支持 NDEF 消息,为什么 iOS 设备不能从 Android 设备上读取消息?
你有没有找到这个问题的解决方案?
我一直在尝试 Host Card Emulation,但它似乎只在 IOS 检测到它时才导致 Apple Pay 以及 Android 上的某些特定金融应用程序。
现在正在尝试让 NDEF 工作,但我不确定它是否可以被 IOS NFC 后台服务检测到,或者是否必须打开一个 App 并专门等待 NFC 消息。