🏷️

【iOS】Core NFC入門 - NDEFメッセージの書き込み

2024/01/30に公開

前回の記事では、NFCタグに書き込まれているNDEFメッセージを読み込む方法について説明しました。本記事では、NFCタグにNDEFメッセージを書き込む方法と、NFCタグにロックをかけて、NFCタグを読み込み専用に変更する方法について説明します。
本記事を最後までお読みいただくことで、アプリ内で入力したデータをNFCタグに書き込み、書き込んだデータの書き換えを阻止する機能を実装することができるようになります。
NFCタグを検出するために必要なXcodeの設定や、NFCタグを検出するまでのプロセスについては、前回の記事を必要に応じてご参照ください。

前回の記事のおさらい

前回の記事で、NFCNDEFReaderSessionDelegate プロトコルには、NFCタグ検出時のリーダーセッションイベントを処理するためのデリゲートメソッドが4つ定義されていることを説明しました。

readerSessionDidBecomeActive(_:)
readerSession(_:didDetectNDEFs:)
readerSession(_:didDetect:)
readerSession(_:didInvalidateWithError:)

NDEFメッセージの読み込み機能のみを実現したい時は、readerSession(_:didDetectNDEFs:)を定義していましたが、NDEFメッセージの書き込み機能を実現したい時は、readerSession(_:didDetect:)を定義します。

実装

NFCタグの検出

NFCNDEFReaderSession を使用して、NFCタグの検出処理を実行します。

NFCNDEFReaderSessionreadingAvailable でアプリを起動しているiPhoneがNFCタグを検出する機能をサポートしているかどうかを確認し、begin()でリーダーセッションを開始します。

NDEFメッセージの書き込み

NDEFメッセージの書き込み機能を実現したい時は、readerSession(_:didDetect:)内に書き込み処理を記述します。

タグをリーダーセッションに接続

NFCNDEFReaderSessionconnect(to:completionHandler:) でタグをリーダーセッションに接続します。

タグのステータスを確認

NFCNDEFTagqueryNDEFStatus(completionHandler:) で検出したタグのステータスを確認し、タグがNDEFメッセージの書き込みをサポートしていることを確認した後に、NDEFメッセージの書き込み処理を行います。

NDEFメッセージの書き込み

書き込みたい文字列をString 型 -> Data 型 -> NFCNDEFPayload 型 -> NFCNDEFMessage 型の順に変換します。

上記で変換したNFCNDEFMessage オブジェクトを、NFCNDEFTagwriteNDEF(_:completionHandler:) の引数に指定することで、NFCタグにNDEFメッセージを書き込むことができます。

NFCタグにNDEFメッセージを書き込む方法についての説明は以上です。次にNFCタグにロックをかけて、読み込み専用に変更する方法を説明します。

NFCタグのロック

NFCNDEFTag プロトコルには、タグを読み込み専用に変更するためのwriteLock(completionHandler:) が定義されています。writeLock(completionHandler:) を実行すると、検出したNFCタグがロックされ、読み込み専用になります。

今回はNFCタグにNDEFメッセージを書き込む方法と、NFCタグを読み込み専用に変更する方法について説明しました。書き込み処理は読み込み処理とセットで使用されることが多いので、前回の記事とセットでお読みいただけると、NFCタグを使用したiOSアプリを開発できるようになりますので是非ご参照ください。

サンプルコード

https://github.com/NAOYA-MAEDA-DEV/CoreNFCSampler.git

参考資料

・Core NFC Enhancements
https://developer.apple.com/videos/play/wwdc2019/715/

Discussion