2017-06-15 3 views
1

だから私はWWDCでいたし、次のコードでアップルLabs社が提供するNFCカードを検出することができた:CoreNFCとISO/IEC 14443(Mifareの超軽量またはクラシック)NFCカードを検出

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タグ、を読むことができるタグが有効NDEFメッセージが含まれている場合は16の部門キー& Bの全てを工場出荷時のデフォルトのまま、とされています。 1つのキーが変更された場合、readerSessionInvalidationErrorUserCanceledを使用してリーダーが異常終了します。

私の経験では、タグを読む際にBeta 2のほうがずっと信頼できます。私の電話では、最初の読み取りは常に失敗し、リーダーセッションを停止して再起動する必要があります。それ以来、それは正常に動作します。ベータ1では、最初に電話機を再起動しなければならず、何度もキャンセル/再試行する必要がありました。

EDIT:MIFAREタグのベンダーであるNXPは、MIFAREクラシックタグ内にNDEFタグを格納する方法を説明する仕様を公開しています。私のテストでは、このようなタグは問題なくCoreNFCライブラリで読み取ることができます。 AdafruitはArduino用のライブラリを公開しており、この仕様に従ってMIFAREクラシックタグを再フォーマットすることができます。

私は別の方法を使用していた別のNDEF Arduinoライブラリを使用しましたが、仕様とインラインではありません。タグはとにかく読み取られることがありますが、信頼性の高いものではありません。

結論:公開された仕様に従って書式設定されたタグを使用することを100%確かめてください。あなたの引き出しにあるタグを読み取れない場合は、おそらくCoreNFCライブラリの欠陥ではありません。

+0

ありがとうMartin - 2つのコメント:1.)DESFireはType 4タグの1つの実装です。彼らはMIFARE Classicの直接の後継者ではありません。 NDEFはNFCライティングデバイス(Android Phoneなど)を持っている人なら誰でも変更できるため、すべてのキーを変更しないでおくことは悪い習慣です。だから、それをロックすることができ、タグを使用することが間違いなく良いです。あなたのコメントのための – ErikM

+0

ありがとう!とにかく暗号化キーに関する私の発言は間違っていた。 NDEF仕様は、キーAがNDEFの使用のための特定の値に変更されることを要求します。私の一般的なArduinoの読者は、これらの工場出荷時のデフォルト以外のキーはチェックしておらず、タグを読めないと報告しました。同時に、iPhoneはタグを読み取ることができませんでしたが、NDEF用に100%正しくフォーマットされていない可能性が高いためです。私は誤ってキーが読み取り失敗の理由であると結論付けました。 – Martin

2

https://github.com/hansemannn/iOS11-NFC-ExampleまたはiOSでNFCを使用する方法について説明している他のチュートリアル(http://jamesonquave.com/blog/core-nfc-tutorial-for-nfc-on-ios-devices/) いくつかの観察:最初のコードスニペットはNFCNDEFReaderSessionの代わりにNFCISO15693ReaderSessionと表示されます。

あなたのタグ/カードに有効なNDEFメッセージが含まれていることを確認する必要があります。私の観察これまでです:タグの

  • ませんNDEF - >タグに無効なNDEF
  • iPhone上のノーアクションが正常にアプリ内で取り扱われ、最悪の場合、クラッシュにつながるする必要があります。
関連する問題