Подключитесь к тегу NFCTagReaderSession NFCISO7816Tag и отправьте команду в iOS 13 - PullRequest
1 голос
/ 01 октября 2019

Я работаю над 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}

Пожалуйста, предложите мне точную причину, по которой это произошло, и чтобы я мог изменить код в соответствии с решениями

...