在iOS 13的NFCTagReaderSession中,可以通过以下步骤读取不同类型的近场通信标签:
let session = NFCTagReaderSession(pollingOption: .iso14443, delegate: self)
session?.begin()
tagReaderSession(_:didDetect:)
:检测到近场通信标签时调用,可以根据检测到的标签类型做相应处理。tagReaderSession(_:didInvalidateWithError:)
:读取会话无效时调用,可以处理错误或显示读取结果。tagReaderSession(_:didDetect:)
方法中,可以根据检测到的标签类型执行相应的操作,以下是一些常见的标签类型及处理方法:NFCNDEFTag.readNDEF(completionHandler:)
方法读取标签上的数据。NFCMiFareTag.sendMiFareCommand(commandPacket:completionHandler:)
方法发送指令并读取响应数据。NFCISO15693Tag.sendCustomCommand(requestFlags:customCommandCode:customRequestParameters:completionHandler:)
方法发送自定义指令并读取响应数据。tagReaderSession(_:didInvalidateWithError:)
方法中,可以处理读取会话无效的情况,例如打印错误信息或显示读取结果。示例代码如下:
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中读取不同类型的近场通信标签。在实际应用中,您可以根据需要进行适当的修改和扩展。
参考资料:
没有搜到相关的沙龙