【问题标题】:how to get icManufacturerCode of NFC tag in iOS如何在 iOS 中获取 NFC 标签的 icManufacturerCode
【发布时间】:2020-01-22 10:43:01
【问题描述】:

使用 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)")
    }
}

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

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

【问题讨论】:

    标签: swift ios11 core-nfc


    【解决方案1】:

    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个必需的方法和1个可选的(来自Obj-C),只是为了得到icManufacturerCode

    According to documentation of Apple

    使用 NFCNDEFReaderSession 或 NFCTagReaderSession 的实例。仅有的 一次可以在系统中激活一个任何类型的阅读器会话

    【讨论】:

    • 再次感谢.. 还有一件事,你能告诉我 rfidTag.icManufacturerCode 返回什么类型的数据吗?字符串还是数字,是十六进制还是十进制??
    • 在我的示例中 - 这是一个用于检测 ISO7816、ISO15693、FeliCa 和 MIFARE 标签的阅读器会话。如果您想使用带有 NDEF 消息的检测 NFC 标签 - 使用NFCNDEFReaderSessionicManufacturerCodevar icManufacturerCode: Int { get }
    • 好吧它的 Int,正如我在 Apple 开发人员网站上看到的那样。所以,我需要在我的项目中使用 icMenufacturerCode 的反向十六进制。为此我应该将此 int 转换为十六进制,然后将其反转???
    • let hex = String(icManufacturerCode, radix: 16)- 它是转换器
    • 如果我想使用 NFCNDEFReaderSession 那么如何获取 NFC Tag 的 icManufacturerCode??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    相关资源
    最近更新 更多