![アンドロイドスタジオでの生体指紋認証| AndroidStudioで指紋を追加する方法](https://i.ytimg.com/vi/Jt-F7OSb_LU/hqdefault.jpg)
コンテンツ
- 生体認証ライブラリを追加する
- USE_BIOMETRIC権限を追加します
- アプリケーションのレイアウトを作成する
- ユーザーの身元を認証する
- 生体認証プロンプトインスタンスを作成する
- 認証コールバックを処理する
- 1. onAuthenticationSucceeded()
- 2. onAuthenticationFailed()
- 3. onAuthenticationError
- 4. onAuthenticationHelp
- Android Pieの生体認証の実装
- プロジェクトをテストする
- まとめ
BiometricPrompt APIを使用して、ユーザーが指紋を使用して身元を確認できるアプリを作成しましょう。
Android Studioを開き、「空のアクティビティ」テンプレートを使用して新しいプロジェクトを作成します。プロンプトが表示されたら、プロジェクトの最小SDKを28以上に設定します。これにより、Android Pieより前のバージョンにアプリケーションがインストールされなくなります。
幅広いAndroidデバイスからアプリにアクセスできるようにする場合は、アプリケーションが現在インストールされているAndroidのバージョンを確認し、デバイスのAPIレベルに応じて生体認証を異なる方法で処理する必要があります。
生体認証ライブラリを追加する
開始するには、モジュールレベルのbuild.gradleファイルを開き、プロジェクトの依存関係として最新バージョンの生体認証ライブラリを追加します。
依存関係{実装androidx.biometric:biometric:1.0.0-alpha03
USE_BIOMETRIC権限を追加します
BiometricPrompt APIを使用すると、単一の許可を介して、デバイスがサポートするすべての異なる生体認証方法を利用できます。
プロジェクトのマニフェストを開き、「USE_BIOMETRIC」権限を追加します。
アプリケーションのレイアウトを作成する
次に、アプリケーションのレイアウトを作成しましょう。タップすると指紋認証ダイアログを起動するボタンを1つ追加します。
プロジェクトのstrings.xmlファイルを開き、「auth」文字列リソースを追加します。
ユーザーの身元を認証する
次に、BiometricPromptを使用して、ユーザーのIDを認証する方法を見てみましょう。
生体認証プロンプトインスタンスを作成する
BiometricPromptクラスにはCompanion Builder()クラスが含まれており、これを使用してBiometricPromptインスタンスを作成し、認証を開始できます。
最終BiometricPrompt.PromptInfo promptInfo = new BiometricPrompt.PromptInfo.Builder()
BiometricPromptインスタンスを作成するときは、認証ダイアログに表示するテキストを定義し、ユーザーが認証をキャンセルできるボタンである「ネガティブボタン」をカスタマイズする必要があります。
認証ダイアログを構成するには、以下を提供する必要があります。
- setTitle。 指紋認証プロンプトのタイトル。 (必須)
- setSubtitle。 指紋認証プロンプトのサブタイトル。 (オプション)
- setDescription。 認証ダイアログに表示される追加の説明。 (オプション)
- setNegativeButton(text、executor、listener)。 これは、「キャンセル」や「終了」などのネガティブボタンのラベルです。ネガティブボタンを設定する場合、ユーザーが認証ダイアログを閉じることができるように、ExecutorインスタンスとOnClickListenerも提供する必要があります。
執筆時点では、認証ダイアログで使用されるアイコンまたはエラーをカスタマイズすることはできませんでした。
最後に、build()を呼び出す必要があります。これにより、次のことがわかります。
final BiometricPrompt.PromptInfo promptInfo = new BiometricPrompt.PromptInfo.Builder().setTitle( "Title text goes here").setSubtitle( "Subtitle goes here").setDescription( "This is the description").setNegativeButtonText( "Cancel") .build();
認証コールバックを処理する
BiometricPromptインスタンスには、認証プロセスの結果についてアプリに通知する認証コールバックメソッドのセットが割り当てられます。
これらすべてのコールバックをBiometricPrompt.AuthenticationCallbackクラスインスタンスにラップする必要があります。
final BiometricPrompt myBiometricPrompt = new BiometricPrompt(activity、newExecutor、new BiometricPrompt.AuthenticationCallback(){
次のステップでは、次のコールバックメソッドの一部またはすべてを実装します。
1. onAuthenticationSucceeded()
このメソッドは、デバイスに登録されている指紋のいずれかに指紋が正常に一致したときに呼び出されます。このシナリオでは、AuthenticationResultオブジェクトがonAuthenticationSucceededコールバックに渡され、アプリはこの成功した認証に応じてタスクを実行します。
物事をシンプルに保つために、アプリはAndroid StudioのLogcatに印刷して応答します:
@Override public void onAuthenticationSucceeded(@NonNull BiometricPrompt.AuthenticationResult result){super.onAuthenticationSucceeded(result); Log.d(TAG、「指紋は正常に認識されました」); }
2. onAuthenticationFailed()
このメソッドは、スキャンは正常に完了したが、指紋がデバイスに登録されているどのプリントとも一致しないときにトリガーされます。繰り返しますが、アプリはLogcatにを出力することにより、この認証イベントに応答します。
@Override public void onAuthenticationFailed(){super.onAuthenticationFailed(); Log.d(TAG、「指紋が認識されません」); }
3. onAuthenticationError
このコールバックは、回復不能なエラーが発生し、認証が正常に完了できない場合にトリガーされます。たとえば、デバイスのタッチセンサーが汚れやグリースで覆われている、ユーザーがこのデバイスに指紋を登録していない、完全な生体認証スキャンを実行するのに十分なメモリがないなどです。
アプリで使用するコードは次のとおりです。
@Override public void onAuthenticationError(int errorCode、@NonNull CharSequence errString){super.onAuthenticationError(errorCode、errString); if(errorCode == BiometricPrompt.ERROR_NEGATIVE_BUTTON){} else {Log.d(TAG、 "回復不能なエラーが発生しました"); }}
4. onAuthenticationHelp
onAuthenticationHelpメソッドは、致命的ではないエラーが発生するたびに呼び出され、エラーに関する詳細情報を提供するヘルプコードとが含まれます。
コードをわかりやすくするために、アプリでonAuthenticationHelpを使用しませんが、実装は次のようになります。
@Override public void onAuthenticationHelp(int helpCode、CharSequence helpString){super.onAuthenticationHelp(helpCode、helpString); biometricCallback.onAuthenticationHelp(helpCode、helpString); }
最後に、BiometricPromptインスタンスのauthenticate()メソッドを呼び出す必要があります。
myBiometricPrompt.authenticate(promptInfo);
Android Pieの生体認証の実装
上記の手順をすべて完了すると、MainActivityは次のようになります。
import androidx.appcompat.app.AppCompatActivity; import androidx.biometric.BiometricPrompt; import android.os.Bundle; import java.util.concurrent.Executor; import java.util.concurrent.Executors; import androidx.fragment.app.FragmentActivity; import android.util.Log; import android.view.View; import androidx.annotation.NonNull;パブリッククラスMainActivityはAppCompatActivityを拡張します{private static final String TAG = MainActivity.class.getName(); @Override protected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //単一のスレッドでスレッドプールを作成します// Executor newExecutor = Executors.newSingleThreadExecutor(); FragmentActivityアクティビティ=これ; //認証イベントのリッスンを開始// final BiometricPrompt myBiometricPrompt = new BiometricPrompt(activity、newExecutor、new BiometricPrompt.AuthenticationCallback(){@Override //致命的なエラーが発生したときにonAuthenticationErrorが呼び出される// public void onAuthenticationError(int errorCode、@NonNull CharSequence errString){super.onAuthenticationError(errorCode、errString); if(errorCode == BiometricPrompt.ERROR_NEGATIVE_BUTTON){} else {// Logcat // Log.d(TAG、 "回復不能なエラーが発生しました");}} // onAuthenticationSucceededは、指紋の照合に成功すると呼び出されます// @Override public void onAuthenticationSucceeded(@NonNull BiometricPrompt.AuthenticationResult result){super.onAuthenticationSucceeded(result); // Logcat // Log.d(TAG、 "Fingerprint正常に認識されました ");} // onAuthenticationFailedは、指紋が一致しない場合に呼び出されます// @Override public void onAuthenticationFailed(){super.onAuthenticationFailed(); //ログに出力cat // Log.d(TAG、 "指紋が認識されません"); }}); // BiometricPromptインスタンスを作成// final BiometricPrompt.PromptInfo promptInfo = new BiometricPrompt.PromptInfo.Builder()//ダイアログにテキストを追加// .setTitle( "Title text goes here").setSubtitle( "Subtitle goes here" ).setDescription( "これは説明です").setNegativeButtonText( "Cancel")//ダイアログの構築// .build(); // onClickListenerをアプリの「認証」ボタンに割り当てます// findViewById(R.id.launchAuthentication).setOnClickListener(new View.OnClickListener(){@Override public void onClick(View v){myBiometricPrompt.authenticate(promptInfo);} }); }}
プロジェクトをテストする
これでプロジェクトが作成できました。テストに移して、実際にアプリに指紋認証が追加されるかどうかを確認しましょう!
このプロジェクトを実行するには、Android Pieを実行している物理的なスマートフォンまたはタブレット、またはAndroid Pプレビュー以上を使用しているAndroid Virtual Device(AVD)が必要です。
また、デバイスに少なくとも1つの指紋を登録する必要があります。物理的なAndroidデバイスを使用している場合:
- まだ設定していない場合は、PIN、パスワード、またはパターンでロック画面を保護します([設定]> [ロック画面とセキュリティ]> [画面ロックの種類]> [パターン/ピン/パスワード]に移動し、画面の指示に従います)。
- デバイスの「設定」アプリケーションを起動します。
- 「ロック画面とセキュリティ」を選択します。
- 「指紋スキャナー」を選択します。
- 指示に従って、1つ以上の指紋を登録します。
Android仮想デバイスには物理的なタッチセンサーがないため、タッチイベントをシミュレートする必要があります。
- AVDをまだ起動していない場合は起動します。
- AVDの横には、一連のボタンが表示されます。 3つの点線の「詳細」ボタン(次のスクリーンショットでカーソルが置かれている場所)を見つけてクリックします。これにより、「拡張コントロール」ウィンドウが起動します。
- [拡張コントロール]ウィンドウで、[指紋]を選択します。これにより、さまざまなタッチイベントをエミュレートできる一連のコントロールが開きます。
- ドロップダウンメニューを開き、このデバイスに登録する指紋を選択します。 「指1」を使用しています
- それでは、エミュレートされたデバイスに注目しましょう。 AVDの「設定」アプリケーションを起動し、「セキュリティと場所」を選択します。
- PIN、パスワード、またはパターンをまだ設定していない場合は、[画面ロック]を選択し、画面の指示に従ってロック画面を保護してから、メインの[設定]> [セキュリティと場所]画面に戻ります。
- 「指紋」を選択してから、「指紋を追加」を選択します。
- タッチセンサーに指を押すように求められます。代わりに、「指紋が追加されました」と表示されるまで「タッチセンサー」をクリックし続けます。
- [完了]をクリックします。
- 追加の指紋を登録する場合は、すすいで上記の手順を繰り返します。
少なくとも1つの指紋を登録すると、アプリケーションをテストする準備が整います。アプリケーションが3つの異なるシナリオを処理する方法をテストします。
- ユーザーは、登録された指紋を使用して認証を試みます。
- ユーザーは、このデバイスに登録されていない指紋を使用して認証を試みます。
- ユーザーは、未登録の指紋を使用して、何度もすばやく連続して認証を試みます。
デバイスに登録したばかりの指紋を使用して認証を試みましょう。
- Android StudioのLogcat Monitorを表示していることを確認してください。これは、アプリケーションのさまざまなが表示される場所です。
- テストデバイスにアプリケーションをインストールします。
- アプリケーションの「指紋認証」ボタンをタップします。指紋認証ダイアログが表示されます。
- 物理的なデバイスを使用している場合は、デバイスのタッチセンサーに対して指先を押し続けます。 AVDを使用している場合は、「タッチセンサー」ボタンを使用してタッチイベントをシミュレートします。
- Logcat Monitorを確認してください。認証が成功した場合、次のように表示されます。「指紋が正常に認識されました」
次に、このデバイスに登録されていない指紋を使用して認証しようとするとどうなるか見てみましょう。
- アプリの[指紋で認証]ボタンをもう一度タップします。
- AVDを使用している場合は、「拡張コントロール」ウィンドウを使用して、 ではない このデバイスに登録。 「指2」を使用しています。「センサーにタッチ」ボタンをクリックします。
- 物理的なAndroidスマートフォンまたはタブレットを使用している場合は、デバイスのタッチセンサーに対して指先を押したままにします。このデバイスに登録されていない指を使用していることを確認してください。
- Android StudioのLogcatを確認すると、「指紋が認識されません」と表示されているはずです。
すでに述べたように、BiometricPrompt APIは、失敗した認証試行の過剰を自動的に処理します。この機能をテストするには:
- アプリの[指紋で認証]ボタンをタップします。
- 未登録の指紋を使用して、連続して複数回認証を試行します。
- 数回試行すると、ダイアログボックスが自動的に閉じます。 Android StudioのLogcatを確認すると、次のように表示されます。「エラーが発生しました。」
GitHubから完全なアプリケーションをダウンロードできます。
まとめ
この記事では、アプリに指紋認証を簡単に追加できるAndroid Pieの新しいBiometricPrompt APIについて説明しました。 BiometricPromptは、Androidの以前の指紋認証方法の改善だと思いますか?以下のコメントでお知らせください!