ISO14443 - React Native NFC 有时“标签连接丢失” - 仅在 iOS 上

Posted

技术标签:

【中文标题】ISO14443 - React Native NFC 有时“标签连接丢失” - 仅在 iOS 上【英文标题】:ISO14443 - React Native NFC sometimes "Tag connection lost" - only on iOS 【发布时间】:2021-04-29 00:25:06 【问题描述】:

背景和问题:

我正在编写一个必须与 NFC MiFare Ultralight 标签通信的 React Native 应用程序。我有 NXP NTAG I2C PLUS ISO14443-3 标签。

我为此使用了 react-native-nfc-manager 库。在 android 上,我没有注意到 ios 端有任何问题。我在 iOS 13 和 14 上进行测试,我的设备是 iPhone 7。

我能够找到并连接到 NFC Mifare Ultralight 标签(也可以读取和写入它们),但在 75% 的情况下,我在通信过程中收到以下错误:

[CoreNFC] 00000002 803f43f0 -[NFCTagReaderSession transceive:tagUpdate:error:]:771  Error Domain=NFCError Code=100 "Tag connection lost" UserInfo=NSLocalizedDescription=Tag connection lost

此问题仅出现在 iOS 上。 Android 运行良好。


我如何沟通:

我将 NDEF 和 TAG 格式添加到…readersession.formats 的权利文件中。 我还在 info.plist 中添加了隐私 - NFC 扫描使用说明的价值。 我正在请求 NfcTech.MifareIOS 技术并调用 NfcManager.sendMifareCommandIOS() 方法,如图书馆的 MiFare 示例所示。我尝试使用其他发射器方法并请求其他技术类型,但在这些情况下我什至没有得到任何回应。

这就是我创建写入命令以及调用传输方法的方式:

// WRITE COMMAND looks like: [0xA2, Addr, datas]
const writeCommand = [0xa2, offset, data[0], data[1], data[2], data[3]];
const response = await this.transmit(writeCommand);

这就是我创建阅读命令的方式:

// FAST_READ COMMAND looks like: [0x3A, StartAddr, EndAddr]
const readCommand = [0x3a, offset, offset + readLength];

这是我的传输方法:

private async transmit(msg: number[]): Promise<number[]> 
  ...
  const cmd = Platform.OS === 'ios' ? NfcManager.sendMifareCommandIOS : NfcManager.transceive;
  return await cmd(msg);


我注意到和尝试的:

我注意到iPhone对定位非常敏感。如果我将设备保持在某个位置,我也可以达到 80% 的成功率。我也注意到,如果我将手机留在标签上,我会更频繁地收到此错误。通话后把手机拿走再放回去,效果更好。 当我在通信后添加一些睡眠(例如 100 毫秒)时,通信似乎更稳定。由于通讯的数量,我等不及了。即使我等待,我也会收到错误,但次数更少。 我看到了一个非常相似的issue,它描述了一个 CRC 问题,当您尝试发送 CRC 时会出现该问题,但 iOS 已经自动添加了该问题。我没有发送 CRC(这是上述问题中的解决方案),所以这应该不是问题。 也看到了following 类似问题的问题,但我有另一种类型的标签 - ISO-14443,我还能够连接并与上述问题中没有的标签通信。 尝试在每次通信后使会话无效,但无助于稳定连接。 尝试了多个标签(但标签类型相同),但得到了相同的结果。

我非常感谢任何可以帮助我解决这个问题的想法。

【问题讨论】:

【参考方案1】:

最后,我设法在多部 iPhone 上试用了我们的应用,并且 NFC 工作正常。 我们还发现我们的测试设备是翻新设备,我们认为这可能是问题的原因。

【讨论】:

以上是关于ISO14443 - React Native NFC 有时“标签连接丢失” - 仅在 iOS 上的主要内容,如果未能解决你的问题,请参考以下文章

ISO 14443 A 型卡使用 Android 读/写

NFC 标签 ISO 14443-3A 类型的读取标签命令是啥

支持 NFC 和蓝牙的 ISO 14443 智能卡/标签,用于 iPhone 配对

68 iso14443读卡入门记录

ISO-IEC 14443 Type A&B summary

从 PC 与 ACR1255U-J1 通信并发送 ISO 14443