Miałem ostatnio okazję pracować z nową funkcją API BiometricPrompt wydaną przez Google w tym roku. Podczas gdy wsparcie uwierzytelniania odcisków palców było dostępne od Androida 6.0, nowy BiometricPrompt obiecuje większą dokładność i spójny poziom bezpieczeństwa na wszystkich urządzeniach, na których działa nasza aplikacja.
Zaimplementowawszy ostatnio uwierzytelnianie biometryczne w aplikacji androidowej, pomyślałem, że podkreślę niektóre z podstawowych kroków wymaganych do wdrożenia tej funkcji w aplikacji androidowej.
Zacznijmy więc!
Krok 2: Sprawdź, czy urządzenie obsługuje uwierzytelnianie biometryczne
Specjalnie, zamierzamy sprawdzić, czy następujące warunki są spełnione:
- Urządzenie działa z systemem Android 6.0 lub nowszy
- Urządzenie posiada czujnik linii papilarnych
- Użytkownik udzielił Twojej aplikacji pozwolenia na dostęp do czujnika linii papilarnych.
- Użytkownik zarejestrował co najmniej jeden odcisk palca na swoim urządzeniu.
Możemy utworzyć osobną klasę util, aby sprawdzić, czy powyższe warunki są spełnione:
Krok 3: Wyświetl okno dialogowe BiometricPrompt
Po sprawdzeniu powyższych warunków możemy sprawdzić, czy wersja androida w urządzeniu to Android P. Okno dialogowe Biometric jest obsługiwane tylko w systemie Android P. Przyjrzyjmy się temu najpierw.
Poniższy kod ma za zadanie wyświetlić okno dialogowe BiometricPrompt:
Używając konstruktora BiometricPrompt możemy:
- setTitle() – Ustawić tytuł do wyświetlenia (Required)
- setSubtitle() – Ustawić podtytuł do wyświetlenia (Optional)
- setDescription() – Ustawić opis do wyświetlenia(Optional)
- setNegativeButton() – Ustawić tekst dla przycisku negatywnego(Required). Musisz także dostarczyć instancję Executora i słuchacza kliknięć dla przycisku negatywnego.
Uwaga: Nie możesz dostosować ikony lub komunikatu o błędzie, które są używane w oknie dialogowym.
Krok 4: Obsługa uwierzytelniania Callback
Następnie używamy BiometricPrompt.AuthenticationCallback do nasłuchiwania zdarzeń uwierzytelniania od użytkowników. Zawiera on 4 metody:
onAuthenticationSucceeded
Gdy odcisk palca zostanie pomyślnie dopasowany do jednego z odcisków palców zarejestrowanych na urządzeniu, wtedy to wywołanie zwrotne zostanie uruchomione. Obiekt AuthenticationResult zostanie przekazany do wywołania zwrotnego.
onAuthenticationFailed
Gdy odcisk palca nie pasuje do żadnego z odcisków palców zarejestrowanych w urządzeniu, zostanie wywołane to wywołanie zwrotne.
onAuthenticationError
Gdy napotkano nienaprawialny błąd i proces uwierzytelniania zakończył się bez powodzenia, zostanie wywołane to wywołanie zwrotne. Do wywołania zwrotnego przekazywany jest kod błędu identyfikujący przyczynę błędu wraz z komunikatem o błędzie. Różne typy kodów błędów, które mogą wystąpić, to:
- BIOMETRIC_ERROR_LOCKOUT – Operacja została anulowana, ponieważ interfejs API jest zablokowany z powodu zbyt wielu prób.
- BIOMETRIC_ERROR_LOCKOUT_PERMANENT – Operacja została anulowana, ponieważ BIOMETRIC_ERROR_LOCKOUT wystąpił zbyt wiele razy.
- BIOMETRIC_ERROR_NO_SPACE – Operacja nie może zostać zakończona, ponieważ pozostało zbyt mało pamięci masowej, aby zakończyć operację.
- BIOMETRIC_ERROR_TIMEOUT – Timeout wystąpił, ponieważ bieżące żądanie działało zbyt długo.
- BIOMETRIC_ERROR_UNABLE_TO_PROCESS – Czujnik nie był w stanie przetworzyć bieżącego obrazu.
- BIOMETRIC_ERROR_USER_CANCELED – Użytkownik anulował operację.
- BIOMETRIC_ERROR_VENDOR – Jeśli występują warunki, które nie należą do jednej z powyższych kategorii.
- BIOMETRIC_ERROR_NO_BIOMETRICS – Użytkownik nie ma żadnych danych biometrycznych zarejestrowanych w urządzeniu.
- BIOMETRIC_ERROR_CANCELED – Operacja została anulowana, ponieważ czujnik biometryczny jest niedostępny.
- BIOMETRIC_ERROR_HW_NOT_PRESENT – Urządzenie nie ma czujnika biometrycznego.
- BIOMETRIC_ERROR_HW_UNAVAILABLE – Sprzęt urządzenia jest niedostępny.
onAuthenticationHelp
Ta metoda jest wywoływana, gdy podczas procesu uwierzytelniania wystąpił błąd niefatalny. Wywołanie zwrotne zostanie zaopatrzone w kod pomocy, aby zidentyfikować przyczynę błędu, wraz z komunikatem pomocy. Różne typy kodów pomocy, które mogą wystąpić, to:
- BIOMETRIC_ACQUIRED_IMAGER_DIRTY – Obraz biometryczny był zbyt hałaśliwy z powodu podejrzenia zabrudzenia czujnika.
- BIOMETRIC_ACQUIRED_INSUFFICIENT – Obraz biometryczny był zbyt hałaśliwy, aby go przetworzyć. Może to być spowodowane wieloma różnymi przyczynami, ale generalnie jest to spowodowane tym, że obraz nie był czytelny.
- BIOMETRIC_ACQUIRED_PARTIAL – Wykryto tylko częściowy obraz biometryczny.
- BIOMETRIC_ACQUIRED_TOO_FAST – Obraz biometryczny był niekompletny, ponieważ użytkownik zbyt szybko przesuwał palec wokół czujnika.
- BIOMETRIC_ACQUIRED_TOO_SLOW – Obraz biometryczny był nieczytelny z powodu braku ruchu użytkownika wokół czujnika.
Jeśli masz urządzenie z systemem Android P, to właśnie to!
.