Nedávno jsem měl možnost pracovat s novou funkcí BiometricPrompt API, kterou letos uvolnila společnost Google. Zatímco podpora ověřování otisků prstů je k dispozici již od Androidu 6.0, nová funkce BiometricPrompt slibuje větší přesnost a konzistentní úroveň zabezpečení na všech zařízeních, na kterých běží naše aplikace.
Jelikož jsem nedávno implementoval biometrické ověřování v aplikaci pro Android, napadlo mě, že upozorním na některé základní kroky potřebné k implementaci této funkce do aplikace pro Android.
Začněme tedy!
Krok 2: Zkontrolujte, zda zařízení podporuje biometrické ověřování
Konkrétně budeme kontrolovat, zda jsou splněny následující podmínky:
- Zařízení je vybaveno operačním systémem Android 6.0 nebo vyšší
- Zařízení je vybaveno snímačem otisků prstů
- Uživatel udělil vaší aplikaci oprávnění k přístupu ke snímači otisků prstů.
- Uživatel zaregistroval alespoň jeden otisk prstu ve svém zařízení.
Můžeme vytvořit samostatnou třídu util, která bude kontrolovat, zda jsou splněny výše uvedené podmínky:
Krok 3: Zobrazení dialogového okna BiometricPrompt
Po kontrole výše uvedených podmínek můžeme zkontrolovat, zda je verze systému Android v zařízení Android P. Dialogové okno Biometric je podporováno pouze v systému Android P. Podívejme se na to jako první.
Následující kód slouží k zobrazení dialogu BiometricPrompt:
Pomocí nástroje BiometricPrompt builder můžeme:
- setTitle() – Nastavit nadpis, který se má zobrazit (Povinné)
- setSubtitle() – Nastavit podnadpis, který se má zobrazit (Nepovinné)
- setDescription() – Nastavit popis, který se má zobrazit(Nepovinné)
- setNegativeButton() – Nastavit text pro negativní tlačítko(Povinné). Musíte také poskytnout instanci Executoru a posluchače kliknutí pro negativní tlačítko.
Poznámka: Nemůžete přizpůsobit ikonu nebo chybové hlášení, které jsou použity v dialogu.
Krok 4: Obsluha zpětného volání ověření
Dále používáme zpětné volání BiometricPrompt.AuthenticationCallback pro naslouchání událostem ověření od uživatelů. Obsahuje 4 metody:
onAuthenticationSucceeded
Když je otisk prstu úspěšně spárován s jedním z otisků prstů registrovaných v zařízení, pak se spustí toto zpětné volání. Zpětnému volání bude předán objekt AuthenticationResult.
onAuthenticationFailed
Když se otisk prstu neshoduje s žádným z otisků prstů registrovaných v zařízení, pak bude spuštěno toto zpětné volání.
onAuthenticationError
Když došlo k neopravitelné chybě a proces ověřování skončil bez úspěchu, pak bude spuštěno toto zpětné volání. Zpětné volání je opatřeno chybovým kódem, který identifikuje příčinu chyby, spolu s chybovou zprávou. Různé typy chybových kódů, které se mohou vyskytnout, jsou:
- BIOMETRIC_ERROR_LOCKOUT – Operace byla zrušena, protože rozhraní API je uzamčeno kvůli příliš mnoha pokusům.
- BIOMETRIC_ERROR_LOCKOUT_PERMANENT – Operace byla zrušena, protože BIOMETRIC_ERROR_LOCKOUT se vyskytl příliš mnohokrát.
- BIOMETRIC_ERROR_NO_SPACE – Operaci nelze dokončit, protože na dokončení operace nezbývá dostatek paměti.
- BIOMETRIC_ERROR_TIMEOUT – Časový limit nastal, protože aktuální požadavek běžel příliš dlouho.
- BIOMETRIC_ERROR_UNABLE_TO_PROCESS – Senzor nebyl schopen zpracovat aktuální snímek.
- BIOMETRIC_ERROR_USER_CANCELED – Uživatel zrušil operaci.
- BIOMETRIC_ERROR_VENDOR – Pokud se vyskytnou podmínky, které nespadají do žádné z výše uvedených kategorií.
- BIOMETRIC_ERROR_NO_BIOMETRICS – Uživatel nemá v zařízení registrovány žádné biometrické údaje.
- BIOMETRIC_ERROR_CANCELED – Operace byla zrušena, protože biometrický snímač není k dispozici.
- BIOMETRIC_ERROR_HW_NOT_PRESENT – Zařízení nemá biometrický senzor.
- BIOMETRIC_ERROR_HW_UNAVAILABLE – Hardware zařízení je nedostupný.
onAuthenticationHelp
Tato metoda je volána, když během procesu ověřování došlo k nefatální chybě. Zpětné volání bude opatřeno kódem nápovědy, který identifikuje příčinu chyby, spolu se zprávou nápovědy. Různé typy pomocných kódů, které se mohou vyskytnout, jsou:
- BIOMETRIC_ACQUIRED_IMAGER_DIRTY – Biometrický obraz byl příliš zašuměný kvůli podezření na znečištění snímače.
- BIOMETRIC_ACQUIRED_INSUFFICIENT – Biometrický obraz byl příliš zašuměný pro zpracování. To může být způsobeno různými důvody, ale obecně se jedná o to, že obraz nebyl čitelný.
- BIOMETRIC_ACQUIRED_PARTIAL – Byl zjištěn pouze částečný biometrický obraz.
- BIOMETRIC_ACQUIRED_TOO_FAST – Biometrický obraz byl neúplný, protože uživatel pohyboval prstem po snímači příliš rychle.
- BIOMETRIC_ACQUIRED_TOO_SLOW – Biometrický obraz byl nečitelný kvůli nedostatečnému pohybu prstu uživatele kolem snímače.
Pokud máte zařízení se systémem Android P, pak je to ono!