Я работаю над NFCTagReaderSession, недавно появившимся в iOS 13, я пытался соединить тег сеанса и отправлять команды apdu для связи.
когда я вызываю свойство connect, соединение выглядит долго, как 15 секундк тому времени, когда он подключен (издает звуковой сигнал), он показывает сообщение об ошибке
NFCError Code = 201 "Session timeout".
Каждый раз, когда tagReaderSession:didInvalidateWithError
вызываетпри подключении карты и я не смог отправить команды apdu.
код, который я пытался подключить и отправить команду apudu
var nfcSession: NFCTagReaderSession?
nfcSession = NFCTagReaderSession(pollingOption: [.iso14443], delegate: self, queue: DispatchQueue.main)
nfcSession?.alertMessage = "Hold your iPhone near an NFC."
nfcSession?.begin()
// MARK: - NFCTagReaderSessionDelegate
public func tagReaderSessionDidBecomeActive(_ session: NFCTagReaderSession) {
print("tagReaderSessionDidBecomeActive")
}
public func tagReaderSession(_ session: NFCTagReaderSession, didInvalidateWithError error: Error) {
print( "tagReaderSession:didInvalidateWithError - \(error)" )
}
public func tagReaderSession(_ session: NFCTagReaderSession, didDetect tags: [NFCTag]) {
let tag = tags.first!
var nfcTag7816: NFCISO7816Tag
switch tags.first! {
case let .iso7816(tag):
nfcTag7816 = tag
@unknown default :
session.invalidate(errorMessage: "Tag not valid.")
return
}
session.connect(to: tags.first!) { (error: Error?) in
if error != nil {
session.invalidate(errorMessage: "Connection error. Please try again.")
return
}
else {
let myAPDU = NFCISO7816APDU(instructionClass:0, instructionCode:0xB0, p1Parameter:0, p2Parameter:0, data: Data(), expectedResponseLength:16)
nfcTag7816.sendCommand(apdu: myAPDU) { (response: Data, sw1: UInt8, sw2: UInt8, error: Error?)
in
guard error != nil && !(sw1 == 0x90 && sw2 == 0) else {
session.invalidate(errorMessage: "Applicationfailure")
return
}
}
}
}
}
При подключении обнаружена ошибка:
tagReaderSession:didInvalidateWithError - Error Domain=NFCError Code=201 "Session timeout" UserInfo={NSLocalizedDescription=Session timeout}
Пожалуйста, предложите мне точную причину, по которой это произошло, и чтобы я мог изменить код в соответствии с решениями