AndroidでNFC開発・調べ物まとめ

仕事で本格的に使うことになりそうなので、以前よりももっと深く参考資料を探している。
最近、各社NFC扱える端末が増えてきてるから以前の記事に書いたのように訪ねてくる人もそこそこいるみたい。
でも、日本語資料殆ど無いのよね。

ほとんどがNFCのR/Wモード使ってIDm読んでみるってとこで終わっているっぽい。
本当に知りたいことは、その後カードにコマンド送って通信したいんだよね。

で、いろいろ調べてみたわけだ。
正しい情報かはわかんないんだけど英語資料含めて使い方探したので備忘録として書いていく。

まず、NFCとちゃんと通信しようとしたらAndroid標準の機能以外にAPI(プロトコルスタック)がいるっぽい。(ここんとこ詳しくわかんないんだけど、実際のリーダーのやり取りの仕様のところがプロトコルスタックで、それをプログラムから扱えるようにしたのがAPIってことでいいのかな、自分的にはほとんど同義で解釈しているんだけど)
で、これは各スマホに入っているNFCチップによって違うっぽい。
今デファクトスタンダードになってるっぽいNFCチップがNXP PN65でこれをAndroid上から扱えるようにしたAPIがOpen Mobile APIでオープンソースで扱えるライブラリとしてSEEK-for-Androidプロジェクトがある。
その他プロトコルスタックとして、Open NFCもありこちらはInside Secure社のチップが標準で扱えるらしい。
また、有償でいくつかのプロトコルスタックを扱えるものもあるらしい。
上記2つは、ソースをいじることで対応チップ増やすこともできそうだけど、seek-for-androidは他のチップに合わせるのが少し面倒らしい。
その点Open NFCは比較的簡単(ハード一番近いHALという部分を開発すればいいだけらしい)と謳っている。

んで、さっき述べたとおり今のところNXP PN65搭載のスマホがほとんどだから普通に開発する分にはseek-for-android使っていれば問題ないはず。

次にAPI(ライブラリ)を使った開発についてだけど、まだ実践してないけど一応少しだけ書いてみる。
ライブラリの導入はライブラリのページに方法書いてるから詳細は省くけど、普通にプロジェクトの参照にライブラリのjarがあればいいだけみたい。
使い方は多分ICカードの開発をしたことがある人なら普通に使えると思う。
readerクラスがあるから、reader一覧を取得してAPDUコマンド発行する流れになるかと(ココらへんあまり触ったことないので詳しくは書けない)

最近au(KDDI)からはカードエミュレーションに対応した端末が出てきているけど、スマホの中にあるカードモードとの通信もこのreaderが違うだけであとの操作は通常のカードと同様にできるみたい(ここも試してないので確定はできない)
多分外付けのR/Wとカードエミュレーションのリーダー名が違っていて、リーダー一覧を取得した時に2つ出てくるはずなのでそれで指定すればいい。

今のところわかっているのはここまで
またわかったことが出てきたら新しく記事を書きます。

この記事、自分の理解できる範囲で書いているので変なこと・間違ったこといっぱいあるかもしれません。
参考にするのはいいですがあまり鵜呑みにはしないでください。
またツッコミや訂正などがあれば気軽にコメントに書いてください。

コメント

タイトルとURLをコピーしました