所以我在 WWDC 上能够使用以下代码检测 Apple Labs 提供的 NFC 卡:
nfcSession = NFCNDEFReaderSession(delegate: self, queue: nil, invalidateAfterFirstRead: false)
nfcSession.begin()
以及委托方法:
func readerSession(_ session: NFCNDEFReaderSession, didInvalidateWithError error: Error) {
DispatchQueue.main.async {
print("Error:" + error.localizedDescription)
}
}
func readerSession(_ session: NFCNDEFReaderSession, didDetectNDEFs messages: [NFCNDEFMessage]) {
print("Did detect NDEFs.")
for message in messages {
for record in message.records {
print(record.identifier)
print(record.payload)
print(record.type)
print(record.typeNameFormat)
}
}
}
然而,我想检测 ISO/IEC 14443 协议下的 Mifare Ultralight(或经典)卡。
每当我获得扫描视图时,什么也没有发生。错误回调或成功块也不会被调用。有什么办法可以读到这张卡片吗?
多谢!
MIFARE Classic 1k 或 4k 芯片早于 ISO/IEC 14443 标准。在 WWDC CoreNFC 演示中,并未明确提及 CoreNFC 支持 MIFARE Classic。
支持 MIFARE Ultralight 或任何其他 2 类标签(例如 NTAG 203)。我认为,MIFARE Classic 的后继者将是 Type 4 (DESFire)。
话虽如此,我可以成功读取 MIFARE Classic 1k 标签,if如果标签包含有效的 NDEF 消息,则所有 16 个扇区密钥 A 和 B 均保留为出厂默认值。即使更改了一个键,读取器也会因 readerSessionInvalidationErrorUserCanceled 而中止。
根据我的经验,Beta 2 在读取标签时更加可靠。在我的手机上,第一次读取总是失败,我必须停止并重新启动读取器会话。从那时起,它就工作得很好。在 beta 1 中,我经常不得不先重新启动手机,甚至不得不多次取消/重试。
编辑:NXP - MIFARE 标签的供应商 - 发布了一个规范,解释了如何在 MIFARE 经典标签内存储 NDEF 标签。我的测试表明,使用 CoreNFC 库可以毫无问题地读取此类标签。 Adafruit 发布了一个适用于 Arduino 的库,允许根据此规范重新格式化 MIFARE 经典标签。
早些时候,我使用了另一个 NDEF Arduino 库,该库使用了不同的方法,不符合规范。有时标签无论如何都可以被读取,但不可靠。
结论: 100% 确保您使用的标签的格式符合已发布的规范。如果您无法读取在抽屉中找到的标签,则可能不是 CoreNFC 库的错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)