В настоящее время я работаю с некоторыми тегами NFC и iOS 13.
Одна проблема заключается в том, что некоторые из моих тегов NFC доставляются как NDEFFormatable
. Я знаю, что мне нужно сначала отформатировать тег для работы с NDEF. Я могу сделать это с помощью стороннего приложения для Android. Но как я могу сделать это с моим собственным приложением для iOS? В настоящее время тег распознается как тег «ISO15693», а результатом метода queryNDEFStatus является .notSupported
.
Я также пытался написать пустое сообщение в этот тег NFC, но 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
}
}
}