如何在 iOS 中获取 NFC 标签的 icManufacturerCode

how to get icManufacturerCode of NFC tag in iOS

使用 CoreNFC 我想读取 NFC 标签的 icMenufecturerCode。根据 Apple 文档 NFCISO15693Tag 具有 属性 命名的 icManufacturerCode,可以读作:

func readerSession(_ session: NFCReaderSession, didDetect tags: [NFCTag]) {
    for tag in tags {
        let rfidTag = tag as! NFCISO15693Tag
        print("- Is available: \(rfidTag.isAvailable)")
        print("- Type: \(rfidTag.type)")
        print("- IC Manufacturer Code: \(rfidTag.icManufacturerCode)")
        print("- IC Serial Number: \(rfidTag.icSerialNumber)")
        print("- Identifier: \(rfidTag.identifier)")
    }
}

但我很困惑..它是正确的标签 reader 会话还是有其他方法可以读取 iOS 11 中 NFC 标签的制造商 ID。 在 iOS 11 中,我们有 NFCNDEFReaderSession。我使用 NFCNDEFReaderSessionDelegate 实现了代码,但这些方法没有提供任何读取 icManufacturerCode 的方法。用 NFCReaderSessionDelegate 方法替换该代码可以吗? NFCReaderSession 会读取什么类型的标签?

我知道这不是一个好的明确问题,但我的困惑有些奇怪。谢谢。

iOS11 的问题与 类 的签名和 Apple 的协议有关(协议 NFCTag 已成为 iOS13 的枚举,如果我不要混淆)。但是,您可以使用此代码,它应该适用于 iOS11+

的所有版本
extension YourViewController: __NFCReaderSessionDelegate {

    func readerSessionDidBecomeActive(_ session: NFCReaderSession) {

    }

    func readerSession(_ session: NFCReaderSession, didInvalidateWithError error: Error) {

    }

    func readerSession(_ session: NFCReaderSession, didDetect tags: [__NFCTag]) {
        for tag in tags {
            let rfidTag = tag as! NFCISO15693Tag
            print("- Is available: \(rfidTag.isAvailable)")
            print("- Type: \(rfidTag.type)")
            print("- IC Manufacturer Code: \(rfidTag.icManufacturerCode)")
            print("- IC Serial Number: \(rfidTag.icSerialNumber)")
            print("- Identifier: \(rfidTag.identifier)")
        }
    }
}

有 2 个必需的方法和一个可选的方法(来自 Obj-C),只是为了得到 icManufacturerCode

According to documentation of Apple

use an instance of NFCNDEFReaderSession or NFCTagReaderSession. Only one reader session of any type can be active in the system at a time