Как добавить аутентификацию по отпечатку пальца в ваше приложение для Android?

Опубликовано: 30 Ноября, 2021

Сегодня мы убедились, что большая часть наших телефонов Android поддерживает аутентификацию по отпечатку пальца. И мы можем реализовать эту аутентификацию по отпечатку пальца в нашем приложении, чтобы максимально обезопасить наше приложение. В этой статье мы рассмотрим реализацию аутентификации по отпечатку пальца.

Что мы собираемся построить в этой статье?

Мы создадим простое приложение, в котором будем отображать изображение отпечатка пальца и кнопку входа в систему. После нажатия на кнопку входа мы применим наш отпечаток пальца. И если тот же отпечаток пальца будет добавлен в настройку безопасности, мы получим успешный вход в систему. Ниже приведен пример видео, чтобы понять, что мы собираемся делать в этой статье. Обратите внимание, что мы собираемся реализовать этот проект на языке Java.

Пошаговая реализация

Шаг 1. Создайте новый проект

Чтобы создать новый проект в Android Studio, обратитесь к разделу «Как создать / запустить новый проект в Android Studio». Обратите внимание, что выберите Java в качестве языка программирования.

Шаг 2: Добавьте зависимость и репозиторий JitPack

Перейдите к Gradle Scripts> build.gradle (Module: app) и добавьте приведенную ниже зависимость в раздел зависимостей.

implementation ‘androidx.biometric:biometric:1.0.1’

Добавьте репозиторий JitPack в свой файл сборки. Добавьте его в свой корневой build.gradle в конце репозиториев в разделе allprojects {} .

allprojects {

 repositories {

   …

   maven { url “https://jitpack.io” }

     }

}

После добавления этой зависимости синхронизируйте свой проект и теперь мы перейдем к его реализации.

Шаг 3. Работа с файлом AndroidManifst.xml

Добавьте следующую строку в файл AndroidManifst.xml.

<uses-permission android:name=”android.permission.USE_BIOMETRIC”/>

Шаг 4. Работа с файлом activity_main.xml

Перейдите к приложению> res> layout> activity_main.xml и добавьте в этот файл приведенный ниже код. Ниже приведен код файла activity_main.xml.

XML

<? xml version = "1.0" encoding = "utf-8" ?>
< LinearLayout
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:background = "@drawable/background"
android:gravity = "center"
android:orientation = "vertical"
tools:context = ".MainActivity" >
< TextView
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "GFG | First App"
android:textColor = "#fafafa"
android:textSize = "30dp" />
< TextView
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "Use your fingerprint to login"
android:textColor = "#fafafa"
android:textSize = "18sp" />
< ImageView
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_marginVertical = "20dp"
android:src = "@drawable/ic_fingerprint_black_24dp" />
< TextView
android:id = "@+id/msgtext"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = ""
android:textSize = "18sp" />
< Button
android:id = "@+id/login"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_marginVertical = "20dp"
android:background = "#fafafa"
android:text = "Login" />
</ LinearLayout >

Создайте новый файл ресурсов для рисования и назовите его как фон . Ниже приведен код файла background.xml.

XML

<? xml version = "1.0" encoding = "utf-8" ?>
< shape xmlns:android = " http://schemas.android.com/apk/res/android " >
< gradient
android:angle = "-90"
android:endColor = "#fff"
android:startColor = "#29DA2E" />
</ shape >

Шаг 4: Работа с файлом MainActivity.java

Перейдите в файл MainActivity.java и ознакомьтесь со следующим кодом. Ниже приведен код файла MainActivity.java. Комментарии добавляются внутри кода для более подробного понимания кода.

Ява

import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.biometric.BiometricManager;
import androidx.biometric.BiometricPrompt;
import androidx.core.content.ContextCompat;
import java.util.concurrent.Executor;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Initialising msgtext and loginbutton
TextView msgtex = findViewById(R.id.msgtext);
final Button loginbutton = findViewById(R.id.login);
// creating a variable for our BiometricManager
// and lets check if our user can use biometric sensor or not
BiometricManager biometricManager = androidx.biometric.BiometricManager.from( this );
switch (biometricManager.canAuthenticate()) {
// this means we can use biometric sensor
case BiometricManager.BIOMETRIC_SUCCESS:
msgtex.setText( "You can use the fingerprint sensor to login" );
msgtex.setTextColor(Color.parseColor( "#fafafa" ));
break ;
// this means that the device doesn't have fingerprint sensor
case BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE:
msgtex.setText( "This device doesnot have a fingerprint sensor" );
loginbutton.setVisibility(View.GONE);
break ;
// this means that biometric sensor is not available
case BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE:
msgtex.setText( "The biometric sensor is currently unavailable" );
loginbutton.setVisibility(View.GONE);
break ;
// this means that the device doesn't contain your fingerprint
case BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED:
msgtex.setText( "Your device doesn't have fingerprint saved,please check your security settings" );
loginbutton.setVisibility(View.GONE);
break ;
}
// creating a variable for our Executor
Executor executor = ContextCompat.getMainExecutor( this );
// this will give us result of AUTHENTICATION
final BiometricPrompt biometricPrompt = new BiometricPrompt(MainActivity. this , executor, new BiometricPrompt.AuthenticationCallback() {
@Override
public void onAuthenticationError( int errorCode, @NonNull CharSequence errString) {
super .onAuthenticationError(errorCode, errString);
}
// THIS METHOD IS CALLED WHEN AUTHENTICATION IS SUCCESS
@Override
public void onAuthenticationSucceeded( @NonNull BiometricPrompt.AuthenticationResult result) {
super .onAuthenticationSucceeded(result);
Toast.makeText(getApplicationContext(), "Login Success" , Toast.LENGTH_SHORT).show();
loginbutton.setText( "Login Successful" );
}
@Override
public void onAuthenticationFailed() {
super .onAuthenticationFailed();
}
});
// creating a variable for our promptInfo
// BIOMETRIC DIALOG
final BiometricPrompt.PromptInfo promptInfo = new BiometricPrompt.PromptInfo.Builder().setTitle( "GFG" )
.setDescription( "Use your fingerprint to login " ).setNegativeButtonText( "Cancel" ).build();
loginbutton.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
biometricPrompt.authenticate(promptInfo);
}
});
}
}

Выход:

Ссылка на GitHub: https://github.com/Anni1123/FingerprintAuthentication

Хотите более динамичную и конкурентную среду для изучения основ Android?
Щелкните здесь, чтобы перейти к уникальному руководству, составленному нашими экспертами с целью мгновенно подготовить вашу отрасль!