Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Skaner linii papilarnych działa w tle we własnym wątku, a po zakończeniu będzie raportować wyniki skanowania, wywołując jedną metodę FingerprintManager.AuthenticationCallback
w wątku interfejsu użytkownika. Aplikacja systemu Android musi udostępnić własną procedurę obsługi, która rozszerza tę abstrakcyjną klasę, implementuje wszystkie następujące metody:
OnAuthenticationError(int errorCode, ICharSequence errString)
— wywoływana, gdy występuje nieodwracalny błąd. Nie ma więcej aplikacji lub użytkownika może zrobić, aby poprawić sytuację, z wyjątkiem ewentualnie spróbować ponownie.OnAuthenticationFailed()
— Ta metoda jest wywoływana, gdy wykryto odcisk palca, ale nie został rozpoznany przez urządzenie.OnAuthenticationHelp(int helpMsgId, ICharSequence helpString)
– Wywoływany, gdy występuje błąd możliwy do odzyskania, taki jak palcem przesuwanym szybko nad skanerem.OnAuthenticationSucceeded(FingerprintManagerCompati.AuthenticationResult result)
— Jest to wywoływane po rozpoznaniu odcisku palca.
CryptoObject
Jeśli element został użyty podczas wywoływania Authenticate
metody , zaleca się wywołanie Cipher.DoFinal
metody w pliku OnAuthenticationSuccessful
.
DoFinal
zgłosi wyjątek, jeśli szyfr został naruszony lub nieprawidłowo zainicjowany, co oznacza, że wynik skanera linii papilarnych mógł zostać naruszony poza aplikacją.
Uwaga
Zaleca się, aby klasa wywołania zwrotnego była stosunkowo lekka i wolna od logiki specyficznej dla aplikacji. Wywołania zwrotne powinny działać jako "policjant ruchu" między aplikacją systemu Android a wynikami skanera linii papilarnych.
Przykładowa procedura obsługi wywołania zwrotnego uwierzytelniania
Poniższa klasa jest przykładem minimalnej FingerprintManager.AuthenticationCallback
implementacji:
class MyAuthCallbackSample : FingerprintManagerCompat.AuthenticationCallback
{
// Can be any byte array, keep unique to application.
static readonly byte[] SECRET_BYTES = {1, 2, 3, 4, 5, 6, 7, 8, 9};
// The TAG can be any string, this one is for demonstration.
static readonly string TAG = "X:" + typeof (SimpleAuthCallbacks).Name;
public MyAuthCallbackSample()
{
}
public override void OnAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result)
{
if (result.CryptoObject.Cipher != null)
{
try
{
// Calling DoFinal on the Cipher ensures that the encryption worked.
byte[] doFinalResult = result.CryptoObject.Cipher.DoFinal(SECRET_BYTES);
// No errors occurred, trust the results.
}
catch (BadPaddingException bpe)
{
// Can't really trust the results.
Log.Error(TAG, "Failed to encrypt the data with the generated key." + bpe);
}
catch (IllegalBlockSizeException ibse)
{
// Can't really trust the results.
Log.Error(TAG, "Failed to encrypt the data with the generated key." + ibse);
}
}
else
{
// No cipher used, assume that everything went well and trust the results.
}
}
public override void OnAuthenticationError(int errMsgId, ICharSequence errString)
{
// Report the error to the user. Note that if the user canceled the scan,
// this method will be called and the errMsgId will be FingerprintState.ErrorCanceled.
}
public override void OnAuthenticationFailed()
{
// Tell the user that the fingerprint was not recognized.
}
public override void OnAuthenticationHelp(int helpMsgId, ICharSequence helpString)
{
// Notify the user that the scan failed and display the provided hint.
}
}
OnAuthenticationSucceeded
sprawdza, czy Cipher
element został podany do FingerprintManager
momentu Authentication
wywołania. Jeśli tak, DoFinal
metoda jest wywoływana na szyfrze. Spowoduje to zamknięcie Cipher
elementu , przywrócenie go do stanu pierwotnego. Jeśli wystąpił problem z szyfrem, zgłosi wyjątek, a DoFinal
próba uwierzytelniania powinna zostać uznana za nieudaną.
Wywołania OnAuthenticationError
zwrotne i OnAuthenticationHelp
otrzymują liczbę całkowitą wskazującą, jaki był problem. W poniższej sekcji opisano każdą z możliwych kodów pomocy lub błędów. Dwa wywołania zwrotne służą podobnym celom — aby poinformować aplikację, że uwierzytelnianie odciskiem palca nie powiodło się. Czym się różnią, jest ważność. OnAuthenticationHelp
to błąd możliwy do odzyskania przez użytkownika, taki jak zbyt szybkie przesuwanie odcisku palca; OnAuthenticationError
jest bardziej poważnym błędem, takim jak uszkodzony skaner linii papilarnych.
Pamiętaj, że OnAuthenticationError
zostanie wywołana po anulowaniu skanowania odciskiem CancellationSignal.Cancel()
palca za pośrednictwem wiadomości. Parametr errMsgId
będzie miał wartość 5 (FingerprintState.ErrorCanceled
). W zależności od wymagań implementacja AuthenticationCallbacks
programu może traktować tę sytuację inaczej niż inne błędy.
OnAuthenticationFailed
jest wywoływany, gdy odcisk palca został pomyślnie zeskanowany, ale nie pasuje do żadnego odcisku palca zarejestrowanego w urządzeniu.
Kody pomocy i identyfikatory komunikatów o błędach
Listę i opis kodów błędów oraz kodów pomocy można znaleźć w dokumentacji zestawu Android SDK dla klasy FingerprintManager. Xamarin.Android reprezentuje te wartości z wyliczeniem Android.Hardware.Fingerprints.FingerprintState
:
AcquiredGood
— (wartość 0) Uzyskany obraz był dobry.AcquiredImagerDirty
– (wartość 3) Obraz odcisku palca był zbyt hałaśliwy ze względu na podejrzenie lub wykrycie brudu na czujniku. Na przykład rozsądnie jest zwrócić to po wielokrotnymAcquiredInsufficient
lub rzeczywistym wykryciu brudu na czujniku (zablokowane piksele, pokosy itp.). Oczekuje się, że użytkownik podejmie działania w celu oczyszczenia czujnika, gdy zostanie zwrócony.AcquiredInsufficient
– (wartość 2) Obraz odcisku palca był zbyt hałaśliwy do przetworzenia z powodu wykrytego stanu (tj. suchej skóry) lub ewentualnie zanieczyszczonego czujnika (patrzAcquiredImagerDirty
.AcquiredPartial
— (wartość 1) Wykryto tylko częściowy obraz odcisku palca. Podczas rejestracji użytkownik powinien być poinformowany o tym, co należy zrobić, aby rozwiązać ten problem, np. "mocno naciskać na czujnik".AcquiredTooFast
– (wartość 5) Obraz odcisku palca był niekompletny z powodu szybkiego ruchu. Chociaż w większości odpowiednie dla czujników macierzy liniowej, może się to zdarzyć również wtedy, gdy palec został przeniesiony podczas pozyskiwania. Użytkownik powinien zostać poproszony o przesunięcie palca wolniej (liniowego) lub pozostawienie palca na czujniku dłużej.AcquiredToSlow
– (wartość 4) Obraz odcisku palca był nieczytelny z powodu braku ruchu. Jest to najbardziej odpowiednie w przypadku czujników macierzy liniowej, które wymagają przesunięcia ruchu.ErrorCanceled
— (wartość 5) Operacja została anulowana, ponieważ czujnik odcisku palca jest niedostępny. Na przykład może się to zdarzyć, gdy użytkownik zostanie przełączony, urządzenie jest zablokowane lub inna oczekująca operacja uniemożliwia lub wyłącza go.ErrorHwUnavailable
— (wartość 1) Sprzęt jest niedostępny. Spróbuj ponownie później.ErrorLockout
— (wartość 7) Operacja została anulowana, ponieważ interfejs API jest zablokowany z powodu zbyt wielu prób.ErrorNoSpace
— (wartość 4) Stan błędu zwracany dla operacji, takich jak rejestracja; nie można ukończyć operacji, ponieważ nie ma wystarczającej ilości miejsca do ukończenia operacji.ErrorTimeout
— (wartość 3) Stan błędu zwracany, gdy bieżące żądanie działa zbyt długo. Ma to na celu uniemożliwienie programom oczekiwania na czujnik odcisku palca na czas nieokreślony. Limit czasu jest specyficzny dla platformy i czujnika, ale zazwyczaj wynosi około 30 sekund.ErrorUnableToProcess
— (wartość 2) Stan błędu zwracany, gdy czujnik nie może przetworzyć bieżącego obrazu.