首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在iOS 13的NFCTagReaderSession中读取不同类型的近场通信标签?

在iOS 13的NFCTagReaderSession中,可以通过以下步骤读取不同类型的近场通信标签:

  1. 创建NFCTagReaderSession对象:
代码语言:txt
复制
let session = NFCTagReaderSession(pollingOption: .iso14443, delegate: self)
session?.begin()
  1. 实现NFCTagReaderSessionDelegate协议中的方法,包括以下两个主要方法:
  • tagReaderSession(_:didDetect:):检测到近场通信标签时调用,可以根据检测到的标签类型做相应处理。
  • tagReaderSession(_:didInvalidateWithError:):读取会话无效时调用,可以处理错误或显示读取结果。
  1. tagReaderSession(_:didDetect:)方法中,可以根据检测到的标签类型执行相应的操作,以下是一些常见的标签类型及处理方法:
  • NFCNDEFTag:读取NDEF格式的标签,可以使用NFCNDEFTag.readNDEF(completionHandler:)方法读取标签上的数据。
  • NFCMiFareTag:读取MiFare类型的标签,可以使用NFCMiFareTag.sendMiFareCommand(commandPacket:completionHandler:)方法发送指令并读取响应数据。
  • NFCISO15693Tag:读取ISO 15693类型的标签,可以使用NFCISO15693Tag.sendCustomCommand(requestFlags:customCommandCode:customRequestParameters:completionHandler:)方法发送自定义指令并读取响应数据。
  1. tagReaderSession(_:didInvalidateWithError:)方法中,可以处理读取会话无效的情况,例如打印错误信息或显示读取结果。

示例代码如下:

代码语言:txt
复制
import CoreNFC

class ViewController: UIViewController, NFCTagReaderSessionDelegate {
    var session: NFCTagReaderSession?

    // 开始读取标签
    func startReading() {
        session = NFCTagReaderSession(pollingOption: .iso14443, delegate: self)
        session?.begin()
    }
    
    // 检测到标签时调用
    func tagReaderSession(_ session: NFCTagReaderSession, didDetect tags: [NFCTag]) {
        guard let tag = tags.first else {
            session.invalidate(errorMessage: "No tags found")
            return
        }

        // 处理不同类型的标签
        switch tag {
        case let nfcNDEFTag as NFCNDEFTag:
            nfcNDEFTag.readNDEF { (ndefMessage, error) in
                guard error == nil else {
                    session.invalidate(errorMessage: "Error reading NDEF data")
                    return
                }
                
                // 处理NDEF数据
                if let message = ndefMessage {
                    for record in message.records {
                        // 读取记录数据
                        let payload = record.payload
                        print("NDEF Payload: \(payload)")
                    }
                }
                
                session.invalidate()
            }

        case let nfcMiFareTag as NFCMiFareTag:
            // 发送MiFare指令并读取响应数据
            let command = Data(bytes: [0x30, 0x04]) // 示例:读取MiFare标签数据的指令
            nfcMiFareTag.sendMiFareCommand(commandPacket: command) { (responseData, sw1, sw2, error) in
                guard error == nil else {
                    session.invalidate(errorMessage: "Error sending MiFare command")
                    return
                }
                
                // 处理响应数据
                if let data = responseData {
                    print("MiFare Response: \(data)")
                }
                
                session.invalidate()
            }

        case let iso15693Tag as NFCISO15693Tag:
            // 发送ISO 15693指令并读取响应数据
            let commandCode: UInt8 = 0x23 // 示例:读取ISO 15693标签数据的指令码
            iso15693Tag.sendCustomCommand(requestFlags: [.address], customCommandCode: commandCode, customRequestParameters: Data()) { (responseData, error) in
                guard error == nil else {
                    session.invalidate(errorMessage: "Error sending ISO 15693 command")
                    return
                }
                
                // 处理响应数据
                if let data = responseData {
                    print("ISO 15693 Response: \(data)")
                }
                
                session.invalidate()
            }

        default:
            session.invalidate(errorMessage: "Unsupported tag type")
        }
    }

    // 读取会话无效时调用
    func tagReaderSession(_ session: NFCTagReaderSession, didInvalidateWithError error: Error) {
        // 处理错误或显示读取结果
        if let errorMessage = error.localizedDescription {
            print("Error: \(errorMessage)")
        } else {
            print("Read completed")
        }
    }
}

上述示例代码演示了如何在iOS 13的NFCTagReaderSession中读取不同类型的近场通信标签。在实际应用中,您可以根据需要进行适当的修改和扩展。

参考资料:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的合辑

领券