2017-06-15 220 views
1

所以我在WWDC,並能檢測NFC卡在蘋果實驗室用下面的代碼提供:檢測ISO/IEC 14443(的Mifare超輕型或經典)NFC卡與CoreNFC

nfcSession = NFCNDEFReaderSession(delegate: self, queue: nil, invalidateAfterFirstRead: false) 
nfcSession.begin() 

和委託方法:

func readerSession(_ session: NFCNDEFReaderSession, didInvalidateWithError error: Error) { 
    DispatchQueue.main.async { 
     print("Error:" + error.localizedDescription) 
    } 
} 

func readerSession(_ session: NFCNDEFReaderSession, didDetectNDEFs messages: [NFCNDEFMessage]) { 
    print("Did detect NDEFs.") 
    for message in messages { 
     for record in message.records { 
      print(record.identifier) 
      print(record.payload) 
      print(record.type) 
      print(record.typeNameFormat) 
     } 
    } 
} 

如何過,我要檢測的ISO/IEC 14443協議下的Mifare超輕(或經典)卡。

每當我得到掃描視圖,什麼都不會發生。也不會調用錯誤回調或成功塊。有沒有辦法看這張卡片?

非常感謝!

回答

3

MIFARE Classic 1k或4k芯片早於ISO/IEC 14443標準。在WWDC CoreNFC介紹中,MIFARE Classic沒有明確提及CoreNFC的支持。

支持MIFARE Ultralight或任何其他類型2標籤(例如NTAG 203)。我認爲,MIFARE Classic的繼任者將是Type 4(DESFire)。

話雖如此,我可以成功讀取MIFARE經典1K標籤,如果所有的16個扇區密鑰的& B以出廠默認留下的,如果標籤包含一個有效的NDEF消息。如果即使一個鍵被改變,閱讀器也會以readerSessionInvalidationErrorUserCanceled中止。

根據我的經驗,閱讀標籤時Beta 2更可靠。在我的手機上,第一次閱讀總是失敗,我必須停止並重新啓動閱讀器會話。從那時起,它工作正常。在測試版1中,我經常必須先重新啓動手機,然後再次取消/重試。

編輯:恩智浦 - MIFARE標籤的供應商 - 已經發布了一個規範,說明如何在MIFARE經典標籤內存儲NDEF標籤。我的測試表明,這樣的標籤可以在沒有問題的情況下通過CoreNFC庫讀取。 Adafruit已經發布了Arduino庫,允許根據此規範重新格式化MIFARE經典標籤。

早些時候,我使用了另一個NDEF Arduino庫,使用了不同的方法,不符合規範。有時標籤可以被讀取,但不可靠。

結論:100%確定您使用的是根據發佈的規範格式化的標籤。如果您無法讀取您在抽屜中找到的標籤,則可能不是CoreNFC庫的錯誤。

+0

感謝Martin - 兩條評論:1.)DESFire是Type 4標籤的一個實現;他們不是MIFARE Classic的直接接班人。 2.)將所有密鑰保持不變的做法是不好的做法,因爲任何使用NFC寫入設備(例如Android手機)的人都可以更改NDEF。所以,使用可以鎖定的標籤絕對會更好。 – ErikM

+0

感謝您的評論!無論如何,我對加密密鑰的評論都是錯誤的。 NDEF規範要求將密鑰A更改爲特定於NDEF使用情況的值。我的通用Arduino閱讀器沒有檢查這些非工廠默認鍵,並且將該標籤報告爲不可讀。同時,iPhone無法讀取標籤,但可能是因爲它沒有100%正確格式化爲NDEF。我錯誤地得出結論認爲鍵是讀取失敗的原因。 – Martin

2

你可以看看例如https://github.com/hansemannn/iOS11-NFC-Example或其他教程(http://jamesonquave.com/blog/core-nfc-tutorial-for-nfc-on-ios-devices/)討論使用NFC與iOS。 一些觀察:您的第一個代碼片段顯示NFCISO15693ReaderSession而不是NFCNDEFReaderSession

最重要的是,您需要確保您的標籤/卡片包含有效的NDEF消息。據我的觀察,到目前爲止是:

  • 沒有NDEF上的標籤 - >標籤上的iPhone
  • 無效NDEF沒有動作需要你的應用程序中要妥善處理,並導致在最壞的情況下崩潰。
相關問題