android指紋認識開発

7241 ワード

android6.0以降googleは指紋認識を公式にサポートした.
関連クラスの紹介
1.FingerprintManager:主に指紋認識ハードウェアデバイスの管理とアクセスを調整するために使用されます.FingerprintManager.AuthenticationCallbackというcallbackインタフェースは、指紋認証後にシステムがこのインタフェースをコールバックしてapp認証の結果を通知します.FingerprintManager.AuthenticationResult認証結果を表すクラスで、コールバックインタフェースでパラメータで4を与える.FingerprintManager.CryptoObjectは暗号化されたオブジェクトクラスです.
必要な権限
<uses-permission android:name="android.permission.USE_FINGERPRINT"/>

mangerを取得するいくつかの方法
// Using the Android Support Library v4
fingerprintManager = FingerprintManagerCompat.from(this);
// Using API level 23:
fingerprintManager = (FingerprintManager)getSystemService(Context.FINGERPRINT_SERVICE);

FingerprintManagerCompatを使用すると、直接権限を迂回することができます(google推奨、apiはコード互換性の問題をいくつかしてくれます)もう一つのクラスF i ngerprintManagerCompatApi 23も機能を実現することができ、F i n gerprintManagerCompatとFingerprintManagerCompatApi 23の2つのクラスも指紋を識別する機能を実現することができますが、限界もあります.一般的な識別機能の2つのクラスはいずれもこの効果を実現することができるが、API Level 23が必要であり、到着しなければエラーが報告されず、これらのクラスは何もしない.
運転条件
1). API level 23指紋識別APIはapi level 23、すなわちandroid 6.0に組み込まれているため、私たちのappはこのシステムバージョン上で実行されなければならない.Googleは、Android Support Library v 4パッケージを使用してFingerprintManagerCompatオブジェクトを取得することをお勧めします.このパッケージは、取得時に現在のシステムプラットフォームのバージョンをチェックするためです.2). ハードウェアの指紋認識には、あなたのデバイスに指紋認識のあるハードウェアが必要です.そのため、実行時にシステムに指紋認識のあるハードウェアがあるかどうかを確認する必要があります.
fingerprintManager.isHardwareDetected()

3). 現在のデバイスはセキュリティ保護されている必要があります.
KeyguardManager keyguardManager =(KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);
if (keyguardManager.isKeyguardSecure()) {
    // this device is secure.
}

4). システムに登録された指紋があるかどうか
fingerprintManager.hasEnrolledFingerprints()

ユーザーがまだ指紋を登録していない場合は、私たちのappはユーザーに指紋を使用するのが機能である場合は、settingに指紋を登録してくださいとヒントを与えることができます.Bluetoothの管理権限が宣言されている限り、bluetoothや他のデバイスの開発を行ったことがある場合は、intentを送信してbluetoothが開いているインタフェースを起動することができることを知っています.しかし、現在の位置までgoogleは通常のappに指紋登録インタフェースを起動させる権限を開放していない.
指紋認証
FingerprintManagerCompatを使用してもFingerprintManagerを使用しても、authenticateメソッドで検証されます.パラメータの説明:1.cryptoこれは暗号化クラスのオブジェクトであり、指紋スキャナはこのオブジェクトを使用して認証結果の合法性を判断します.このオブジェクトはnullであってもよいが,これはappが無条件に認証を信頼した結果,理論的にはこの過程が攻撃され,データが改ざんされる可能性があることを意味し,appがこの場合に負わなければならないリスクである.したがって、このパラメータをnullにしないことをお勧めします.このクラスのインスタンス化は少し面倒で、主にjavaxのsecurityインタフェースを使用して実現されます.2.cancelこれはCancellationsignalクラスのオブジェクトで、このオブジェクトは指紋識別器がユーザーの指紋をスキャンするときに現在のスキャン操作をキャンセルするために使用され、キャンセルしなければ指紋スキャナはタイムアウトまでスキャンを移植し(一般的には30 sで、器具のメーカーによって実現される)、そうすると比較的消費電力がかかります.このパラメータをnullにしないことをお勧めします.3.flagsはビットを識別し、上図のドキュメントの説明によると、このビットは一時的に0であるべきであり、このフラグビットは将来使用されるべきである.4.callbackこれはFingerprintManagerです.AuthenticationCallbackクラスのオブジェクトです.これはこのインタフェースで最初のパラメータを除いて最も重要なパラメータです.システムが指紋認証プロセスを完了すると(失敗したり成功したりする)、このオブジェクトのインタフェースがコールバックされ、app認証の結果が通知されます.このパラメータはNULLではありません.5.handlerこれはHandlerクラスのオブジェクトです.このパラメータがnullでない場合、FingerprintManagerはこのhandlerのlooperを使用して指紋認識ハードウェアからのメッセージを処理します.通常、開発はこのパラメータを提供する必要はありません.FingerprintManagerはappのmain looperをデフォルトで使用して処理するため、nullに直接設定できます.注意:Cancellationsignalクラスを使用して認証を取り消した後、appに再アクセスしない限りauthenticateを使用すると無効になります.
FingerprintManager.AuthenticationCallbackクラス:1.OnAuthenticationError(int errorCode,ICharSequence errString)というインタフェースは、システム指紋認証で回復不可能なエラーが発生した場合に呼び出され、パラメータerrorCodeはエラーコードを与え、エラーの原因を識別します.このときappでできることは、ユーザーにもう一度試してもらうことだけです.2.OnAuthenticationFailed()このインタフェースは、システムの指紋認証に失敗した場合にコールバックされます.ここでの認証失敗は、上記の認証エラーとは異なり、結果として認証できないことに注意してください.認証に失敗したのは、すべての情報が完全に収集され、異常はないが、この指紋は以前に登録された指紋と一致しないことを意味する.しかし、認証エラーとは、指紋センサの動作異常など、採取または認証の過程でエラーが発生したことを意味する.すなわち、認証失敗は予想される正常な状況であり、認証エラーは予想できない異常である.3.OnAuthenticationHelp(int helpMsgId,ICharSequence helpString)の認証に失敗したのは、認証中の例外です.リカバリ不可能なエラーが発生したためだと言いますが、ここでのOnAuthenticationHelpメソッドは、返信可能な例外が発生したために呼び出されます.回復できる異常とは何ですか?一般的な例として、指の移動が速すぎて、センサに指を置くと、指をすぐに移動すると、指紋センサは一部の情報しか収集できないため、認証に失敗する可能性があります.しかし、このエラーは復元できるので、ユーザーに指紋を再度押すように指示し、あまり早く移動しないようにすれば解決できます.4.OnAuthenticationSucceeded(F i n gerprintManagerCompati.AuthenticationResult result)このインタフェースは、認証に成功した後にコールバックします.この方法では,ユーザ認証の成功を促すことができる.ここでは、authenticateを呼び出すときにCryptoObjectがnullでない場合、このメソッドではAuthenticationResultによってCypherオブジェクトを取得し、doFinalメソッドを呼び出すことができます.doFinalメソッドは、結果がブロックされたり改ざんされたりしているかどうかをチェックし、そうであれば異常を投げ出します.私たちがこれらの異常を発見したとき、認証を失敗として処理すべきで、安全のために皆さんにそうすることをお勧めします.
  public class MyCallBack extends FingerprintManagerCompat.AuthenticationCallback {
        private static final String TAG = "MyCallBack";

        //              ,             ,errString     
        @Override
        public void onAuthenticationError(int errMsgId, CharSequence errString) {
            Log.d(TAG, "onAuthenticationError: " + errString);
        }

        //                 ,          ,                    sensor   
        @Override
        public void onAuthenticationFailed() {
            Log.d(TAG, "onAuthenticationFailed: " + "    ");
        }

        @Override
        public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
            Log.d(TAG, "onAuthenticationHelp: " + helpString);
        }

        //                ,        sensor
        @Override
        public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult
                                                      result) {
            Log.d(TAG, "onAuthenticationSucceeded: " + "    ");
        }
    }