Android BiometricPrompt プロンプトが廃止予定に置き換えられました FingerprintManager 。FingerPrintManagerには2つの関数hasEnrolledFingerprints()
とisHardwareDetected()
があります。デバイスが指紋をサポートしているかどうか、およびユーザーが指紋認証を登録しているかどうかを確認します。
新しいBiometricPromptでは、BiometricPromptをプロンプト表示しないとこれをチェックする機能がないようです。 BiometricPrompt.AuthenticationCallback.onAuthenticationError(
これは、デバイスが生体認証をサポートしているかどうか、およびユーザーが生体認証を登録しているかどうかを示すエラーコードで呼び出されます。
そのため、ユーザーから認証を試みた場合にのみ、この情報を取得できます。デバイスがバイオメトリクスをサポートしており、ユーザーがバイオメトリクスを登録しているかどうかを確認するために認証を要求せずに確認する方法はありますか?
FingerPrintManager
には、フィンガーピント認証のみに関するデータがあるため、hasEnrolledFringers()
があります。ただし、BiometricPrompt
は、顔認証、ファインプリント、アイリスに使用されます。これは一般的なマネージャークラスのようなものです。 GoogleはcanAuthenticate
を追加しました。これは、Android Qをサポートしています。ただし、以下のAPIを使用してそれを確認できます。
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
val hasBiometricFeature :Boolean = context.packageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)
とにかく、Googleはそれをandroidxコンポーネントにも追加しましたandroidx.biometric:biometric
implementation 'androidx.biometric:biometric:1.0.0-alpha04'
許可を使用する
<uses-permission Android:name="Android.permission.USE_BIOMETRIC" />
「AuthenticationCallback」
public void onAuthenticationError(int errorCode, CharSequence errString) {}
エラーコードを確認することができます
/**
* The user does not have any biometrics enrolled.
*/
int BIOMETRIC_ERROR_NO_BIOMETRICS = 11;
CompileSdkVersion 29とbuildToolsVersion "29.0.1"を使用している場合。ネイティブチェックメソッドを使用できます。
この関数はKotlin用に作成しました。
fun checkForBiometrics() : Boolean {
Log.d(TAG, "checkForBiometrics started")
var canAuthenticate = true
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (Build.VERSION.SDK_INT < 29) {
val keyguardManager : KeyguardManager = applicationContext.getSystemService(KEYGUARD_SERVICE) as KeyguardManager
val packageManager : PackageManager = applicationContext.packageManager
if(!packageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)) {
Log.w(TAG, "checkForBiometrics, Fingerprint Sensor not supported")
canAuthenticate = false
}
if (!keyguardManager.isKeyguardSecure) {
Log.w(TAG, "checkForBiometrics, Lock screen security not enabled in Settings")
canAuthenticate = false
}
} else {
val biometricManager : BiometricManager = this.getSystemService(BiometricManager::class.Java)
if(biometricManager.canAuthenticate() != BiometricManager.BIOMETRIC_SUCCESS){
Log.w(TAG, "checkForBiometrics, biometrics not supported")
canAuthenticate = false
}
}
}else{
canAuthenticate = false
}
Log.d(TAG, "checkForBiometrics ended, canAuthenticate=$canAuthenticate ")
return canAuthenticate
}
さらに、dependencyとしてアプリグラドルファイルを実装する必要があります。
implementation 'androidx.biometric:biometric:1.0.0-alpha04'
また、最新のビルドツールを使用します。
compileSdkVersion 29
buildToolsVersion "29.0.1"
これは最近、beta01またはbeta02のandroidx oneに追加されました。
メソッドがあるBiometricManager
を使用
canAuthenticate()
戻る
BIOMETRIC_ERROR_NONE_ENROLLED if the user does not have any enrolled
BIOMETRIC_ERROR_HW_UNAVAILABLE if none are currently supported/enabled
BIOMETRIC_SUCCESS if a biometric can currently be used (enrolled and available)
BIOMETRIC_ERROR_NO_HARDWARE
公式ドキュメントをチェックしてください https://developer.Android.com/reference/Android/hardware/biometrics/BiometricManager.html