Aggiungi l'autenticazione tramite impronta digitale alla tua app, usando BiometricPrompt

Autore: Lewis Jackson
Data Della Creazione: 13 Maggio 2021
Data Di Aggiornamento: 1 Luglio 2024
Anonim
Aggiungi l'autenticazione tramite impronta digitale alla tua app, usando BiometricPrompt - Applicazioni
Aggiungi l'autenticazione tramite impronta digitale alla tua app, usando BiometricPrompt - Applicazioni

Contenuto


Usiamo l'API BiometricPrompt per creare un'app che consentirà all'utente di confermare la propria identità utilizzando un'impronta digitale.

Apri Android Studio e crea un nuovo progetto, utilizzando il modello "Svuota attività". Quando richiesto, imposta l'SDK minimo del tuo progetto su 28 o superiore, in quanto ciò impedirà l'installazione dell'applicazione su Android Pie.

Se desideri rendere la tua app accessibile a una gamma più ampia di dispositivi Android, dovrai verificare su quale versione di Android è attualmente installata l'applicazione e quindi gestire l'autenticazione biometrica in modo diverso, a seconda del livello API del dispositivo.

Aggiungi la libreria biometrica

Per iniziare, apri il tuo file build.gradle a livello di modulo e aggiungi l'ultima versione della libreria Biometrica come dipendenza del progetto:

dipendenze {implementazione androidx.biometric: biometric: 1.0.0-alpha03

Aggiungi l'autorizzazione USE_BIOMETRIC

L'API BiometricPrompt ti consente di accedere a tutti i diversi metodi di autenticazione biometrica supportati dal dispositivo, tramite un'unica autorizzazione.


Apri il manifest del tuo progetto e aggiungi l'autorizzazione "USE_BIOMETRIC":

Crea il layout della tua applicazione

Quindi, creiamo il layout della nostra applicazione. Ho intenzione di aggiungere un singolo pulsante che, una volta toccato, avvierà la finestra di dialogo di autenticazione dell'impronta digitale:

Apri il file strings.xml del tuo progetto e aggiungi la risorsa stringa "auth":

BiometricPromptSample Autenticare con l'impronta digitale

Autenticazione dell'identità dell'utente

Ora diamo un'occhiata a come autenticheresti l'identità dell'utente, usando BiometricPrompt.


Creare un'istanza di prompt biometrico

La classe BiometricPrompt include una classe Builder () di accompagnamento, che è possibile utilizzare per creare un'istanza di BiometricPrompt e avviare l'autenticazione:

prompt BiometricPrompt.PromptInfo finaleInfo = new BiometricPrompt.PromptInfo.Builder ()

Quando crei l'istanza di BiometricPrompt, dovrai definire il testo che dovrebbe apparire nella finestra di dialogo di autenticazione e personalizzare il "pulsante negativo", che è il pulsante che consente all'utente di annullare l'autenticazione.

Per configurare la finestra di dialogo di autenticazione, devi fornire quanto segue:

  • setTitle. Il titolo del prompt di autenticazione dell'impronta digitale. (Necessario)
  • setSubtitle. Sottotitolo del prompt di autenticazione dell'impronta digitale. (Opzionale)
  • setDescription. Una descrizione aggiuntiva che verrà visualizzata nella finestra di dialogo di autenticazione. (Opzionale)
  • setNegativeButton (testo, esecutore, listener). Questa è l'etichetta del pulsante negativo, ad esempio "Annulla" o "Esci". Durante la configurazione del pulsante negativo, dovrai anche fornire un'istanza Executor e un OnClickListener in modo che l'utente possa chiudere la finestra di autenticazione.

Al momento della scrittura, non era possibile personalizzare l'icona o l'errore utilizzati nella finestra di dialogo di autenticazione.

Infine, dovrai chiamare build (). Questo ci dà quanto segue:

finale BiometricPrompt.PromptInfo promptInfo = new BiometricPrompt.PromptInfo.Builder () .setTitle ("Il testo del titolo va qui") .setSubtitle ("Il sottotitolo va qui") .setDescription ("Questa è la descrizione") .setNegativeButtonText ("Annulla") .costruire();

Gestire i callback di autenticazione

All'istanza di BiometricPrompt viene assegnato un set di metodi di callback di autenticazione che notificherà alla tua app i risultati del processo di autenticazione.

Dovrai racchiudere tutti questi callback in un'istanza della classe BiometricPrompt.AuthenticationCallback:

final BiometricPrompt myBiometricPrompt = new BiometricPrompt (attività, newExecutor, nuovo BiometricPrompt.AuthenticationCallback () {

Il passaggio successivo consiste nell'implementare alcuni o tutti i seguenti metodi di callback:

1. onAuthenticationSucceeded ()

Questo metodo viene chiamato quando l'impronta digitale viene correttamente associata a una delle impronte digitali registrate sul dispositivo. In questo scenario, un oggetto AuthenticationResult viene passato al callback onAuthenticationSucceeded e l'app eseguirà quindi un'attività in risposta a questa autenticazione riuscita.

Per semplificare le cose, la nostra app risponderà stampando un logcat su Android Studio:

@Override public void onAuthenticationSucceeded (risultato @NonNull BiometricPrompt.AuthenticationResult) {super.onAuthenticationSucceeded (risultato); Log.d (TAG, "Impronta digitale riconosciuta correttamente"); }

2. onAuthenticationFailed ()

Questo metodo viene attivato quando la scansione viene completata correttamente ma l'impronta digitale non corrisponde a nessuna delle stampe registrate sul dispositivo. Ancora una volta, la nostra app risponderà a questo evento di autenticazione, stampando a Logcat:

@Override public void onAuthenticationFailed () {super.onAuthenticationFailed (); Log.d (TAG, "Impronta digitale non riconosciuta"); }

3. onAuthenticationError

Questo callback viene attivato ogni volta che si verifica un errore irreversibile e l'autenticazione non può essere completata correttamente. Ad esempio, forse il sensore a sfioramento del dispositivo è coperto da sporco o grasso, l'utente non ha registrato impronte digitali su questo dispositivo o non è disponibile memoria sufficiente per eseguire una scansione biometrica completa.

Ecco il codice che userò nella mia app:

@Override public void onAuthenticationError (int errorCode, @NonNull CharSequence errString) {super.onAuthenticationError (errorCode, errString); if (errorCode == BiometricPrompt.ERROR_NEGATIVE_BUTTON) {} else {Log.d (TAG, "Si è verificato un errore irreversibile"); }}

4. onAuthenticationHelp

Il metodo onAuthenticationHelp viene chiamato ogni volta che si verifica un errore non irreversibile e include un codice di aiuto e un codice che fornisce ulteriori informazioni sull'errore.

Per aiutare a mantenere semplice il nostro codice, non userò onAuthenticationHelp nella nostra app, ma un'implementazione sarebbe simile a questa:

@Override public void onAuthenticationHelp (int helpCode, CharSequence helpString) {super.onAuthenticationHelp (helpCode, helpString); biometricCallback.onAuthenticationHelp (helpCode, helpString); }

Infine, dobbiamo chiamare il metodo authenticate () dell'istanza BiometricPrompt:

myBiometricPrompt.authenticate (promptInfo);

Implementazione dell'autenticazione biometrica di Android Pie

Una volta completati tutti i passaggi precedenti, MainActivity dovrebbe assomigliare a questo:

import androidx.appcompat.app.AppCompatActivity; import androidx.biometric.BiometricPrompt; import android.os.Bundle; import java.util.concurrent.Executor; import java.util.concurrent.Executors; import androidx.fragment.app.FragmentActivity; import android.util.Log; import android.view.View; import androidx.annotation.NonNull; classe pubblica MainActivity estende AppCompatActivity {stringa statica privata finale TAG = MainActivity.class.getName (); @Override protetto void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); // Crea un pool di thread con un singolo thread // Executor newExecutor = Executors.newSingleThreadExecutor (); FragmentActivity activity = this; // Inizia l'ascolto per eventi di autenticazione // final BiometricPrompt myBiometricPrompt = new BiometricPrompt (attività, newExecutor, nuovo BiometricPrompt.AuthenticationCallback () {@Override // onAuthenticationError viene chiamato quando si verifica un errore irreversibile // public void onAuthenticationError (int errorCull, @Non CharSequence errString) {super.onAuthenticationError (errorCode, errString); if (errorCode == BiometricPrompt.ERROR_NEGATIVE_BUTTON) {} else {// Stampa a su Logcat // Log.d (TAG, "Si è verificato un errore irreversibile");}} // onAuthenticationSucceeded viene chiamato quando un'impronta digitale viene abbinata correttamente // @Override public void onAuthenticationSucceeded (risultato @NonNull BiometricPrompt.AuthenticationResult) {super.onAuthenticationSucceeded (risultato); // Stampa a Logcat // Log.d (TAG, "Impronta digitale riconosciuto correttamente ");} // onAuthenticationFailed viene chiamato quando l'impronta digitale non corrisponde // @Override public void onAuthenticationFailed () {super.onAuthenticationFailed (); // Stampa un registro cat // Log.d (TAG, "Impronta digitale non riconosciuta"); }}); // Crea l'istanza di BiometricPrompt // final BiometricPrompt.PromptInfo promptInfo = new BiometricPrompt.PromptInfo.Builder () // Aggiungi del testo alla finestra di dialogo // .setTitle ("Il testo del titolo va qui") .setSubtitle ("Sottotitoli va qui" ) .setDescription ("Questa è la descrizione") .setNegativeButtonText ("Annulla") // Crea la finestra di dialogo // .build (); // Assegna un onClickListener al pulsante "Autenticazione" dell'app // findViewById (R.id.launchAuthentication) .setOnClickListener (new View.OnClickListener () {@Override public void onClick (View v) {myBiometricPrompt.authenticate (promptInfo);} }); }}

Testare il tuo progetto

Ora che hai creato il tuo progetto, è tempo di metterlo alla prova e vedere se aggiunge effettivamente l'autenticazione delle impronte digitali alla tua app!

Per eseguire questo progetto, avrai bisogno di uno smartphone o un tablet fisico con Android Pie o un dispositivo virtuale Android (AVD) che utilizza l'anteprima di Android P o superiore.

Dovrai anche registrare almeno un'impronta digitale sul tuo dispositivo. Se stai utilizzando un dispositivo Android fisico, quindi:

  • Proteggi il tuo lockscreen con un PIN, una password o una sequenza, se non l'hai già fatto (navigando su "Impostazioni> Blocca schermata e sicurezza> Tipo di blocco schermo> Sequenza / Pin / Password" e quindi seguendo le istruzioni su schermo).
  • Avvia l'applicazione "Impostazioni" del tuo dispositivo.
  • Seleziona "Blocca schermo e sicurezza".
  • Seleziona "Scanner di impronte digitali".
  • Seguire le istruzioni per registrare una o più impronte digitali.

I dispositivi virtuali Android non dispongono di un sensore tattile fisico, quindi dovrai simulare un evento tattile:

  • Avvia il tuo AVD, se non l'hai già fatto.
  • Accanto all'AVD, vedrai una striscia di pulsanti. Trova il pulsante "Altro" a tre punte (in cui è posizionato il cursore nella schermata seguente) e fai un clic. Ciò avvia la finestra "Controlli estesi".
  • Nella finestra Controlli estesi, seleziona "Impronta digitale". Questo apre una serie di controlli, in cui puoi emulare vari eventi touch.
  • Apri il menu a discesa e scegli l'impronta digitale che desideri registrare su questo dispositivo; Sto usando "Finger 1."
  • Ora spostiamo la nostra attenzione sul dispositivo emulato. Avvia l'applicazione "Impostazioni" di AVD e seleziona "Sicurezza e posizione".
  • Se non hai già impostato un PIN, una password o una sequenza, seleziona "Blocco schermo" e segui le istruzioni sullo schermo per proteggere la schermata di blocco, quindi torna alla schermata principale "Impostazioni> Sicurezza e posizione".
  • Seleziona "Impronta digitale", seguito da "Aggiungi impronta digitale".
  • Ti verrà ora richiesto di premere il dito sul sensore a sfioramento. Invece, continua a fare clic su "Tocca il sensore" fino a quando non viene visualizzata una "Impronta digitale aggiunta".

  • Fai clic su "Fine".
  • Se si desidera registrare altre impronte digitali, quindi risciacquare e ripetere i passaggi precedenti.

Dopo aver registrato almeno un'impronta digitale, sei pronto per testare la tua domanda. Ho intenzione di testare come la nostra applicazione gestisce tre diversi scenari:

  • L'utente tenta di autenticarsi utilizzando un'impronta digitale registrata.
  • L'utente tenta di autenticarsi utilizzando un'impronta digitale non registrata su questo dispositivo.
  • L'utente tenta di autenticarsi utilizzando impronte digitali non registrate, più volte e in rapida successione.

Proviamo ad autenticare utilizzando l'impronta digitale che abbiamo appena registrato sul nostro dispositivo:

  • Assicurati di visualizzare Logcat Monitor di Android Studio, poiché è qui che verranno visualizzate le varie applicazioni.

  • Installa la tua applicazione sul dispositivo di prova.
  • Tocca il pulsante "Autentica con impronta digitale" dell'applicazione. Verrà visualizzata la finestra di dialogo di autenticazione delle impronte digitali.
  • Se stai utilizzando un dispositivo fisico, tieni premuta la punta del dito contro il sensore a sfioramento del dispositivo. Se stai utilizzando un AVD, utilizza il pulsante "Tocca il sensore" per simulare un evento touch.
  • Controllare Logcat Monitor. Se l'autenticazione ha avuto esito positivo, dovresti vedere quanto segue: "Impronta digitale riconosciuta correttamente"

Quindi, vediamo cosa succede se proviamo a eseguire l'autenticazione utilizzando un'impronta digitale non registrata su questo dispositivo:

  • Tocca di nuovo il pulsante "Autentica con impronta digitale" dell'app.
  • Se stai utilizzando un AVD, utilizza la finestra "Controlli estesi" per selezionare un'impronta digitale non è registrato su questo dispositivo; Sto usando "Finger 2." Fai clic sul pulsante "Touch the sensor".
  • Se stai utilizzando uno smartphone o un tablet Android fisico, tieni premuta la punta del dito contro il sensore a sfioramento del dispositivo: assicurati di utilizzare un dito non registrato su questo dispositivo!
  • Controlla Logcat di Android Studio, ora dovrebbe essere visualizzato un "Impronta digitale non riconosciuta".

Come già accennato, l'API BiometricPrompt gestisce automaticamente eccessivi tentativi di autenticazione non riusciti. Per testare questa funzionalità:

  • Tocca il pulsante "Autentica con impronta digitale" della tua app.
  • Tentare di eseguire l'autenticazione più volte in rapida successione, utilizzando un'impronta digitale non registrata.
  • Dopo alcuni tentativi, la finestra di dialogo dovrebbe chiudersi automaticamente. Controlla Logcat di Android Studio e dovresti vedere quanto segue: "Si è verificato un errore irreversibile".

Puoi scaricare l'applicazione completa da GitHub.

Avvolgendo

In questo articolo, abbiamo esplorato la nuova API BiometricPrompt di Android Pie, che ti consente di aggiungere facilmente l'autenticazione tramite impronta digitale alla tua app. Pensi che BiometricPrompt sia un miglioramento rispetto ai precedenti metodi di autenticazione delle impronte digitali di Android? Fateci sapere nei commenti qui sotto!

Una delle caratteritiche alienti di Pixel Bud di Google è la ua capacità di tradurre le converazioni in tempo reale. Dopo averlo portato per la prima volta u tutte le cuffie Aitant di Google...

Non importa quante intervite di lavoro fai, è difficile non eere nervoi. Non temere, queto pacchetto di padronanza delle intervite dovrebbe fare proprio il trucco per aiutarti blocca il lavoro ch...

Interessante