这就是我读取 NFC 标签信息的方法:
func readerSession(_ session: NFCNDEFReaderSession, didDetect tags: [NFCNDEFTag]) {
// Connect to the found tag and perform NDEF message reading
let tag = tags.first!
session.connect(to: tag, completionHandler: { (error: Error?) in
tag.queryNDEFStatus(completionHandler: { (ndefStatus: NFCNDEFStatus, capacity: Int, error: Error?) in
tag.readNDEF(completionHandler: { [self] (message: NFCNDEFMessage?, error: Error?) in
for record in message!.records {
print("Type name: \(record.typeNameFormat)")
print("Payload size: \(record.payload)")
print("Type size: \(record.type)")
print("Identifier: \(record.identifier)")
print("Payload: " + String(data:record.payload, encoding: .utf8)!)
}
session.invalidate()
})
})
})
}
但标识符始终为 0 字节且为空。 我如何读取某种唯一标识符或序列号?
NFC 标签没有唯一的标识符或序列号,它们的 ID 不能保证是唯一的。
您从 Ndef 规范打印的 Ndef 记录标识符是:-
可选的有效负载标识符允许用户应用程序识别 NDEF 记录中携带的有效负载
它是一个标识符,可帮助应用程序确定 Ndef 结构中存储的数据类型,它补充了 Payload Type。
要获取非唯一 ID,请尝试打印
tag.identifier
,这可能会返回十六进制字符串。但因为这不是唯一的,所以它不应该用于与安全相关的任何事情(对于某些 NFC 设备,ID 是随机的十六进制数字,或者可以编程为特定的十六进制数字)