【iOS-Tips】Core NFCでNFCタグのシリアルナンバーを取得する
Core NFCを使用してNFCタグのシリアルナンバーを取得する方法についてのメモです。
NFCタグのスキャンを実施
NFCタグのスキャンはNFCTagReaderSession
を使用します。NFCタグのシリアルナンバーを取得する時は、NDEFメッセージの読み書きを行う時でも、NFCNDEFReaderSession
ではなく、NFCTagReaderSession
を使用するのがポイントです。
シリアルナンバーを取得する
NFCISO7816Tag
、NFCISO15693Tag
、NFCMiFareTag
オブジェクトが持つidentifier
でNFCタグのシリアルナンバーを取得することができます。
続けてNFCタグの読み書きを行う時
Core NFCを使用してNFCタグにデータを読み書きする方法は、ネイティブでNFCタグにアクセスしてデータの読み書きを行う方法と、NDEFフォーマットを使用してデータの読み書きを行う方法があります。
ネイティブアクセス
取得したNFCISO7816Tag
、NFCISO15693Tag
、NFCMiFareTag
オブジェクトが持つ、読み書きを行うためのメソッドを使用します。
例えば、NFCMiFareTag
オブジェクトはsendMiFareCommand(commandPacket:completionHandler:)
でデータの読み書きを行います。
NDEFフォーマット
NFCISO7816Tag
、NFCISO15693Tag
、NFCMiFareTag
オブジェクトを、NFCNDEFTag
オブジェクトへアップキャストします。
NFCMiFareTag
プロトコルのソースを見てみると、NFCNDEFTag
プロトコルを継承していることがわかります。
このことからNFCMiFareTag
オブジェクトは、NFCNDEFTag
オブジェクトへアップキャスト可能であることがわかります。
NFCNDEFTag
オブジェクトを生成した後は、writeNDEF(_:completionHandler:)
やreadNDEF(completionHandler:)
でNDEFメッセージの読み書きを行うことができます。
NDEFメッセージの読み書きについては、以下の記事をご参照ください。
当初、NFCTagReaderSession
でNFCタグをスキャンして、シリアルナンバーを取得した後に、NFCNDEFReaderSession
でNFCタグを再スキャンして、NDEFメッセージのやり取りを行っていました。
StackoverFlowでは別の方法が紹介されていました。こちらで紹介されていた方法は、リジェクトリスクが高いかつ煩雑な実装でした。
そんなことをする必要はなく、NFCISO7816Tag
、NFCISO15693Tag
、NFCMiFareTag
オブジェクトを、NFCNDEFTag
オブジェクトへアップキャストしてやればNFCタグのスキャンは一度で済ませることができます。
参考資料
・NFCISO7816Tag
・NFCISO15693Tag ・NFCMiFareTag ・identifier
Discussion