这是我如何读取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字节和空。我怎样才能读取一种唯一标识符或序列号?
1条答案
按热度按时间rbpvctlc1#
NFC标签没有唯一的标识符或序列号,它们有一个不能保证唯一的ID。
从Ndef spec打印的Ndef记录标识符是:
可选的负载标识符允许用户应用程序识别NDEF记录中携带的负载
它是一个标识符,用于帮助应用确定Ndef结构中存储的数据类型,它补充了Payload Type。
要获取非唯一ID,请尝试打印
tag.identifier
,这可能会返回十六进制字符串。但由于这是非唯一的,它不应该用于任何与安全相关的事情(对于某些NFC设备,ID是一个随机的十六进制数,或者它可以被编程为一个特定的十六进制数)