Biometric في Kotlin: دليل شامل مع أمثلة عملية
أصبحت المصادقة البيومترية جزءًا لا يتجزأ من تطبيقات الهواتف المحمولة الحديثة. فهي تتيح للمستخدمين تأكيد هويتهم باستخدام بصمة الإصبع أو ماسح الوجه أو قزحية العين، مما يوفر راحة وأمانًا أكبر من إدخال كلمات المرور. توفر مكتبة Biometric الخاصة بـ Kotlin (كجزء من AndroidX) واجهة برمجة تطبيقات موحدة للتعامل مع جميع أجهزة الاستشعار البيومترية على أجهزة Android.
لماذا تحتاج هذه المكتبة؟ أولاً، تجرد المطور من الاختلافات في تنفيذ أجهزة الاستشعار البيومترية بين الشركات المصنعة المختلفة. ثانيًا، تعالج تلقائيًا السيناريوهات التي تكون فيها القياسات الحيوية غير متاحة (مثل عدم وجود ماسح ضوئي على الجهاز) أو محظورة. ثالثًا، تتكامل المكتبة بشكل وثيق مع Android Keystore، مما يسمح بإنشاء مفاتيح مشفرة لا يمكن استخدامها إلا بعد مصادقة المستخدم بنجاح.
في هذا المقال، سنشرح بالتفصيل جميع جوانب العمل مع مكتبة Biometric في Kotlin: بدءًا من التثبيت والمثال الأساسي وصولاً إلى التقنيات المتقدمة والأخطاء الشائعة. ستتعلم كيفية إضافة المصادقة البيومترية إلى تطبيقك وجعلها آمنة وسهلة الاستخدام.
التثبيت
لاستخدام مكتبة Biometric في مشروع Android الخاص بك بلغة Kotlin، أضف التبعية التالية إلى ملف build.gradle (على مستوى الوحدة):
dependencies {
implementation("androidx.biometric:biometric:1.2.0-alpha05")
}
تأكد أيضًا من الإعلان عن الإذن لاستخدام أجهزة الاستشعار البيومترية في ملف AndroidManifest.xml:
إذا كان تطبيقك يستهدف Android 12 (API 31) والإصدارات الأحدث، يُوصى بإضافة الإذن لتحديد نوع القياسات الحيوية بدقة:
بداية سريعة: مثال عملي بسيط
لنقم بإنشاء Activity بسيطة تبدأ المصادقة البيومترية عند الضغط على زر وتعرض النتيجة في Toast.
import android.os.Bundle
import android.widget.Button
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.biometric.BiometricManager
import androidx.biometric.BiometricPrompt
import androidx.core.content.ContextCompat
import java.util.concurrent.Executors
class MainActivity : AppCompatActivity() {
private lateinit var biometricPrompt: BiometricPrompt
private lateinit var promptInfo: BiometricPrompt.PromptInfo
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val authButton: Button = findViewById(R.id.auth_button)
// التحقق من توفر القياسات الحيوية على الجهاز
val biometricManager = BiometricManager.from(this)
when (biometricManager.canAuthenticate(BiometricManager.Authenticators.BIOMETRIC_STRONG)) {
BiometricManager.BIOMETRIC_SUCCESS -> {
// القياسات الحيوية متاحة، إعداد مربع الحوار
setupBiometricPrompt()
}
BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE -> {
Toast.makeText(this, "الجهاز لا يحتوي على مستشعر بيومتري", Toast.LENGTH_LONG).show()
}
BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE -> {
Toast.makeText(this, "المستشعر البيومتري غير متاح مؤقتًا", Toast.LENGTH_LONG).show()
}
BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED -> {
Toast.makeText(this, "لم يتم تسجيل أي بيانات بيومترية", Toast.LENGTH_LONG).show()
}
}
}
private fun setupBiometricPrompt() {
// تنفيذ إعداد BiometricPrompt هنا
}
}