Android6(Marshmallow)の指紋認証機能(開発者編)
Android 6.0の指紋認証に関して、開発者視点で具体的な実装のアプローチを解説していきます。
神原健一の技術で広がる世界 第9回
- 2016年04月20日公開
はじめに
Android 6.0「指紋認証機能」対応の基本的な考え方
前提として、指紋認証センサー(Nexus Imprintセンサー)を搭載したAndroid 6.0以上の端末を準備し、利用者の指紋があらかじめ端末に登録されていることとします。未設定の場合は、こちらを参考にあらかじめ登録しておきましょう。
それでは、具体的なアプリを題材に解説していきます。以下の図のとおり、ショッピングを行うアプリがあったとしましょう。
このアプリに機能を追加し、「購入」ボタンをタップすると、指紋認証機能が実行されるようにしましょう。アプリに指紋認証機能を追加する場合、主に2つのアプローチが存在します。
それぞれ、具体的な特徴と実装例を紹介します。
アプローチ(1)OS認証画面利用
最初は、OSの認証画面を活用するアプローチです。
以下の特徴があります。
- 指紋認証だけでなく、パターン/PIN認証を併用
- 対象バージョンは、Android 5.0 以上(指紋認証は、Android 6.0以上の対応機種のみ利用可能)
指紋認証に特化したものではなく、端末のロック解除画面を利用します。それでは、実装例を見てみましょう。以下リストに示すようなソースコードを書くことで実現できます。
KeyguardManagerのインスタンスを作成後、createConfirmDeviceCredentialIntent()メソッドを呼び出しています。この際、画面のタイトルと本文も指定し、Intentを作成しています。続いて、startActivityForResult()メソッドに、このIntentを渡すことで、先ほどの認証画面を表示できます。ユーザが同画面を表示後、その認証結果がonActivityResult()メソッドにコールバックされるという流れです。実際は、指紋未登録の場合などほかにも考慮すべきポイントがあることには注意してください。
指紋認証を実行する画面のカスタマイズなど細かいことはできない一方、比較的、容易に実装できるでしょう。
アプローチ(2)指紋認証API利用
次に、Android 6.0にて追加された指紋認証APIを用いるアプローチです。
以下の特徴があります。
- 指紋認証機能をAPIを用いて自前で実装
- 対象バージョンは、Android 6.0以上(指紋認証対応機種のみ)
実装例を見てみましょう。以下リストに示すようなソースコードを書くことで実現できます。
FingerprintManagerのインスタンスを作成後、authenticate()メソッドを呼び出しています。この際、CryptoObjectなど幾つかのパラメータを設定しています。詳細は割愛します。指紋認証を実行後、その結果が成功、失敗、エラーの場合に、それぞれ該当するメソッドがコールバックされる仕組みです。今回のソースコードは、あくまで指紋認証処理のビジネスロジックに関するものです。そのため、先ほどの画面内のダイアログなどUIに関しては、自分で実装する必要があります。
実装量は比較的多くはなりますが、画面のカスタマイズなど柔軟に仕様を実現できるというメリットはあります(ただし、公式の指紋アイコンは、変更せずに利用すべきとされています)。
おわりに
今回は、Android 6.0の指紋認証に関して、開発者視点で紹介しました。次回のテーマはまだ決めていませんが、旬のトピックを取り上げられたらと考えています。ぜひ、次回の記事も読んでいただけると幸いです。お楽しみに!
参考URL(当社サイト)
新技術開発を好み、Androidは正式版が出る前から試用するなど、公私にわたってモバイルの世界に没頭。 プライベートで開発した「セカイフォン」で、 Multi-Screen UX Competition優秀賞受賞。MWC(バルセロナ)/IFA(ベルリン)/CES(ラスベガス)へのプロダクト出展、 国内外(デブサミやDroidconなど)のセミナー講演や書籍執筆(単著・共著含め5冊)などの活動も行っている。NTTテクノクロスきってのモバイル技術者。 プライベートでは旅行が好きで、現地の外国人にセカイフォンをデモすることが密かな楽しみ。