2
2

More than 1 year has passed since last update.

[Flutter][iOS] nfc-manager を使ってNFC タグを読み込む

Last updated at Posted at 2023-01-08

Flutterで作成した iOS アプリから NFCタグを読み込むのに、 nfc-manager パッケージを利用してみました。

読み込むタグの種類としては両方のOSで読み込むことができる NDEF(NFC Data Exchange Format)を対象としました。

nfc-manager の説明によると、

  • Near Field Communication Tag Reader Session Formats Entitlements を追加
  • NFCReaderUsageDescription を Info.plist に追加
  • com.apple.developer.nfc.readersession.felica.systemcodes と com.apple.developer.nfc.readersession.iso7816.select-identifiers を Info.plist に追加(必要なら)

と書いてあります。
今回は NDEF のみが対象なので、3つ目は不要かと思っていましたが、これが無いと NFCタグ読み込みのポップアップが表示されません。

実装のポイント

Entitlements

com.apple.developer.nfc.readersession.formats を .entitlements ファイルに追加するのですが、xcode UI からは複数の選択肢があります。
今回は NDEFが対象なので、"NDEF" を値として設定すれば良いかと思ったら、読み込みポップアップが表示せず・・・ "TAG" を値として設定しなければならないようです。
以下の Apple のサイトを見ると、有効な値は "TAG" しか書かれてません。。。
https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_developer_nfc_readersession_formats

ということで com.apple.developer.nfc.readersession.formats には ”TAG” を指定しましょう!

com.apple.developer.nfc.readersession.* の Info.plist への追加

色々と検索すると、felica.systemcodes と iso7816.select-identifiers を追加しないといけないと書かれています。それぞれのキーには多くの値が書かれていて、意味もよくわからないので、本当に必要か疑問でした。
様々なフォーマット(タグ?カード?)に対応するのであれば、その対応する値を書かないといけないようなのですが、今回対応したいのは NDEF のみです。
調べた結果、 felica.systemcodes キーのみ、かつ値も1つあれば読み取ることができるとわかりました。(対象のNFCタグによっては不足する可能性は高いですが・・・)

Info.plist
    <key>com.apple.developer.nfc.readersession.felica.systemcodes</key>
    <array>
      <string>12fc</string>
    </array>

ちなみに、値の "12fc" は、ソニーのドキュメントによると
NFC Forum が規定する NFC Data Exchange Format (NDEF)が格納されたシステム
とのこと。ただ、それ以外の値でも問題なさそうでした。
このキーがあることが必要なのかもしれません。

ということで、NDEFを読み込むだけであれば、最低条件として com.apple.developer.nfc.readersession.felica.systemcodes キーを追加。値は最低一つ。となりました。

後記

Android では割とすんなりと読み込めましたが、iOS は手こずりました。
対応するNFCの種類によって、色々と対応が異なるようで難しいですね。

追記(2023/1/9)

実装のポイントで書いた2点は、nfc-manager パッケージの中で NFCTagReaderSession を使っているためのようです。

com.apple.developer.nfc.readersession.formats に "NDEF" を指定した場合は、多分 NFCNDEFReaderSession を使うのではないかと。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2