【发布时间】:2019-12-09 10:58:31
【问题描述】:
我目前正在使用一些 NFC 标签和 iOS 13。
一个问题是,我的一些 NFC 标签是作为NDEFFormatable 交付的。我知道我必须先格式化标签才能使用 NDEF。我可以使用第 3 方 Android 应用程序来做到这一点。但是我怎么能用我自己的 iOS 应用程序做到这一点呢?
目前该标签被识别为“ISO15693”标签,queryNDEFStatus 方法的结果为.notSupported。
我也尝试向该 NFC 标签写入 empoty 消息,但 iOS 响应错误“NDEF 标签是只读的”
据我所知,您喜欢这里的一些代码是重要的部分:
session = NFCTagReaderSession(pollingOption: [.iso14443, .iso15693], delegate: self)
session?.alertMessage = "Bitte halten Sie das Gerät an den zu scannenden NFC Tag"
session?.begin()
...
func tagReaderSession(_ session: NFCTagReaderSession, didDetect tags: [NFCTag]) {
if tags.count > 1 {
// Restart polling in 500ms
let retryInterval = DispatchTimeInterval.milliseconds(500)
session.alertMessage = "Mehr als 1 NFC Tag gefunden. Bitte scannen Sie jeden Tag einzeln."
DispatchQueue.global().asyncAfter(deadline: .now() + retryInterval, execute: {
session.restartPolling()
})
return
}
let tag = tags.first!
// Connect to the found tag and perform NDEF message reading
session.connect(to: tag) { (error: Error?) in
if nil != error {
session.invalidate(errorMessage: "NFC Tag konnte nicht gelesen werden")
return
}
if case let NFCTag.iso15693(iso15693Tag) = tag{
iso15693Tag.queryNDEFStatus(completionHandler: { (ndefStatus: NFCNDEFStatus, capacity: Int, error: Error?) in
guard error == nil else {
session.invalidate(errorMessage: "Status des Tags konnte nicht gelesen werden")
return
}
switch ndefStatus {
case .notSupported:
//NDFEFFormatable tag is handled here !!!!
session.alertMessage = "Der Tag unterstützt das NFC Data Exchange Format (NDEF) nicht!"
session.invalidate()
case .readOnly:
//read tag
case .readWrite:
//read or write tag
@unknown default:
session.alertMessage = "Unbekannter Status"
session.invalidate()
}
})
} else if case let NFCTag.miFare(miFareTag) = tag { //check if we have a MiFare Tag
//other type of tags
} else {
session.invalidate(errorMessage: "Dieser Tag wird aktuell leider nicht unterstützt")
return
}
}
}
【问题讨论】:
-
那成功了吗?