我想检索 MiFare 卡的 UID。我使用的是 iPhone X、Xcode 11 和 iOS 13。
根据本网站,我知道在 iOS 13 之前这是不可能的(特别是读取 UID):https ://gototags.com/blog/apple-expands-nfc-on-iphone-in-ios-13/和这家伙:https ://www.reddit.com/r/apple/comments/c0gzf0/clearing_up_misunderstandings_and/
手机 NFC 读取器正确检测卡,但唯一标识符始终返回为空或 nil。但是我可以读取有效负载并且与 iOS 无关,但我可以在 Android 中执行此操作(确认卡没有故障或只是奇怪)
苹果示例项目:https ://developer.apple.com/documentation/corenfc/building_an_nfc_tag-reader_app
func tagReaderSession(_ session: NFCTagReaderSession, didDetect tags: [NFCTag]) {
if case let NFCTag.miFare(tag) = tags.first! {
session.connect(to: tags.first!) { (error: Error?) in
let apdu = NFCISO7816APDU(instructionClass: 0, instructionCode: 0xB0, p1Parameter: 0, p2Parameter: 0, data: Data(), expectedResponseLength: 16)
tag.queryNDEFStatus(completionHandler: {(status: NFCNDEFStatus, e: Int, error: Error?) in
debugPrint("\(status) \(e) \(error)")
})
tag.sendMiFareISO7816Command(apdu) { (data, sw1, sw2, error) in
debugPrint(data)
debugPrint(error)
debugPrint(tag.identifier)
debugPrint(String(data: tag.identifier, encoding: .utf8))
}
}
}
}
我知道这些类型的黑客:CoreNFC not reading UID in iOS
但它们已关闭,过去仅在短时间内适用于 iOS 11。