Сканирование отпечатков пальцев

Теперь, когда мы видели, как подготовить приложение Xamarin.Android для использования проверки подлинности отпечатков пальцев, давайте вернемся к FingerprintManager.Authenticate методу и обсудим его место в проверке подлинности отпечатков пальцев Android 6.0. Краткий обзор рабочего процесса для проверки подлинности по отпечаткам пальцев:

  1. Вызов FingerprintManager.Authenticate, передача CryptoObject и экземпляра FingerprintManager.AuthenticationCallback. CryptoObject используется, чтобы убедиться, что результат проверки подлинности по отпечаткам пальцев не был изменен.
  2. Подкласс класса FingerprintManager.AuthenticationCallback. Экземпляр этого класса будет предоставлен для FingerprintManager при запуске проверки подлинности по отпечаткам пальцев. После завершения сканирования отпечатков пальцев он будет вызывать один из методов обратного вызова для этого класса.
  3. Написание кода для обновления пользовательского интерфейса, чтобы сообщить пользователю о том, что устройство запустило сканер отпечатков пальцев и ожидает взаимодействия с пользователем.
  4. По завершении сканирования отпечатков пальцев Android вернет результаты в приложение, вызвав метод на экземпляре FingerprintManager.AuthenticationCallback, который был предоставлен на предыдущем шаге.
  5. Приложение будет уведомлять пользователя о результатах проверки подлинности по отпечаткам пальцев и реагировать на результаты надлежащим образом.

В следующем фрагменте кода приведен пример метода в действии, который начнет сканирование отпечатков пальцев:

protected void FingerPrintAuthenticationExample()
{
    const int flags = 0; /* always zero (0) */

    // CryptoObjectHelper is described in the previous section.
    CryptoObjectHelper cryptoHelper = new CryptoObjectHelper();    
    
    // cancellationSignal can be used to manually stop the fingerprint scanner. 
    cancellationSignal = new Android.Support.V4.OS.CancellationSignal();
    
    FingerprintManagerCompat fingerprintManager = FingerprintManagerCompat.From(this);
    
    // AuthenticationCallback is a base class that will be covered later on in this guide.
    FingerprintManagerCompat.AuthenticationCallback authenticationCallback = new MyAuthCallbackSample(this);

    // Start the fingerprint scanner.
    fingerprintManager.Authenticate(cryptoHelper.BuildCryptoObject(), flags, cancellationSignal, authenticationCallback, null);
}

Давайте рассмотрим каждый из этих параметров в методе Authenticate более подробно:

  • Первый параметр — это криптографический объект, который сканер отпечатков пальцев будет использовать для проверки подлинности результатов сканирования отпечатков пальцев. Этот объект может быть null, в этом случае приложение должно быть надежным и результаты сканирования отпечатка пальца не должны быть изменены. Рекомендуется создавать экземпляры CryptoObject и предоставлять их FingerprintManager, а не NULL. В статье Создание CryptObject объясняется, как создать экземпляр CryptoObject на основе Cipher.
  • Второй параметр всегда равен нулю. Документация по Android определяет его как набор флагов и, скорее всего, он зарезервирован для использования в будущем.
  • Третий параметр, cancellationSignal — это объект, используемый для отключения сканера отпечатков пальцев и отмены текущего запроса. Это Android CancellationSignal, а не тип из .NET Framework.
  • Четвертый параметр является обязательным и является классом, подклассом которого является абстрактный класс AuthenticationCallback. Методы в этом классе будут вызываться для передачи клиентам сигнала о завершении работы FingerprintManager и о ее результатах. О реализации AuthenticationCallback доступно множество информации, поэтому она будет изложена в отдельном разделе.
  • Пятый параметр является необязательным экземпляром Handler. Если объект Handler предоставлен, FingerprintManager будет использовать Looper из этого объекта при обработке сообщений с устройства для сканирования отпечатков пальца. Как правило, не требуется предоставлять Handler, и FingerprintManager будет использовать Looper из приложения.

Отмена сканирования отпечатков пальцев

Может потребоваться, чтобы пользователь (или приложение) отменил сканирование отпечатков пальцев после запуска. В этом случае вызовите метод IsCancelled на CancellationSignal, который был предоставлен для FingerprintManager.Authenticate при вызове для запуска сканирования отпечатков пальцев.

Теперь, когда мы видели метод Authenticate, давайте внимательнее рассмотрим некоторые наиболее важные параметры. Сначала обратим внимание на статью Ответ на обратные вызовы проверки подлинности, в которой обсуждается подкласс FingerprintManager.AuthenticationCallback, который позволяет приложению Android реагировать на данные, предоставленные сканером отпечатков пальцев.