Как добавить аутентификацию по отпечатку пальца в ваше приложение для Android?
Сегодня мы убедились, что большая часть наших телефонов 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" ?> < 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