Gereksinimler ve Ön Hazırlık
Projeye başlamadan önce geliştirme ortamınızın güncel olduğundan emin olmalısınız. Flutter 3.24 ve üzeri sürümler, biyometrik kütüphanelerle daha uyumlu çalışmaktadır. Ayrıca, fiziksel bir cihaz üzerinde test yapmanız zorunludur; çünkü emülatörler biyometrik sensör simülasyonunda sınırlı yeteneklere sahiptir.
- Flutter SDK (En güncel kararlı sürüm).
- Android için
minSdkVersionen az 23 olmalıdır. - iOS için
Info.plistdosyasındaNSFaceIDUsageDescriptionizni tanımlanmalıdır. - Fiziksel bir Android veya iOS cihazı.
Bağımlılıkların Eklenmesi ve Yapılandırma
İlk adım olarak, projenizin pubspec.yaml dosyasına local_auth paketini eklememiz gerekiyor. Bu paket, cihazın yerel biyometrik API'leri ile doğrudan iletişim kurmamızı sağlar.
dependencies:
flutter:
sdk: flutter
local_auth: ^2.2.0 # Güncel sürümü kontrol edin
Paketi ekledikten sonra terminalde flutter pub get komutunu çalıştırarak bağımlılıkları projenize dahil edin. Paket, hem parmak izi hem de yüz tanıma gibi cihazın desteklediği tüm biyometrik yöntemleri kapsar.
Platform Özel İzinlerin Tanımlanması
Biyometrik veriler hassas olduğu için işletim sistemi düzeyinde izin almanız şarttır. Android tarafında android/app/src/main/AndroidManifest.xml dosyasına şu izni ekleyin:
iOS tarafında ise ios/Runner/Info.plist dosyasına kullanıcıya neden biyometrik izin istediğinizi açıklayan şu satırı eklemelisiniz:
NSFaceIDUsageDescription
Güvenli giriş için biyometrik kimlik doğrulamaya ihtiyacımız var.
Biyometrik Doğrulama Servisi Oluşturma
Kodunuzu temiz tutmak için biyometrik işlemleri ayrı bir servis sınıfında toplamak en iyi pratiktir. Aşağıdaki kod bloğu, cihazın biyometrik destek durumunu kontrol eder ve doğrulama işlemini başlatır.
import 'package:local_auth/local_auth.dart';
class BiometricService {
final LocalAuthentication _auth = LocalAuthentication();
Future authenticate() async {
try {
return await _auth.authenticate(
localizedReason: 'Lütfen parmak izinizi okutun',
options: const AuthenticationOptions(
biometricOnly: true,
stickyAuth: true,
),
);
} catch (e) {
return false;
}
}
}
Burada biometricOnly: true parametresi, kullanıcının PIN kodu yerine sadece parmak izi veya yüz tanıma kullanmasını zorunlu kılar. stickyAuth ise uygulamanın arka plana geçip tekrar açılması durumunda oturumun korunmasına yardımcı olur.
Cihaz Uyumluluk Kontrolü
Her cihaz parmak izi okuyucusuna sahip olmayabilir veya kullanıcı cihazında hiç biyometrik veri tanımlamamış olabilir. İşlemi başlatmadan önce bu kontrolleri yapmak, kullanıcıya anlamlı hata mesajları göstermenizi sağlar.
Future checkBiometrics() async {
final bool canAuthenticateWithBiometrics = await _auth.canCheckBiometrics;
final bool canAuthenticate = canAuthenticateWithBiometrics || await _auth.isDeviceSupported();
return canAuthenticate;
}
Bu fonksiyon, cihazın biyometrik donanımı destekleyip desteklemediğini döner. Eğer false dönerse, kullanıcıyı alternatif giriş yöntemlerine (şifre, PIN) yönlendirmelisiniz.
Biyometrik Yöntemlerin Karşılaştırılması
Aşağıdaki tablo, biyometrik yöntemlerin temel farklarını ve uygulama geliştiricisi olarak dikkat etmeniz gereken noktaları özetler.
| Yöntem | Güvenlik Seviyesi | Kullanıcı Deneyimi | Donanım Gereksinimi |
|---|---|---|---|
| Parmak İzi | Yüksek | Hızlı | Sensör |
| Yüz Tanıma | Çok Yüksek | Çok Hızlı | Derinlik Kamerası |
| PIN/Şifre | Orta | Yavaş | Yok |
Kritik Güvenlik Uyarısı: Biyometrik doğrulama, uygulamanızın "ikinci bir güvenlik katmanı" olmalıdır. Asla biyometrik veriyi uygulama içinde saklamayın veya sunucuya göndermeyin. Cihazın kendi güvenli bölgesi (Secure Enclave/Keystore) tarafından yönetilen bu süreci sadece "doğrulama başarılı" veya "başarısız" şeklinde bir boolean değer olarak kullanın.
Yaygın Hatalar ve Debug İpuçları
Geliştirme aşamasında en sık karşılaşılan sorun, Android'de FragmentActivity hatasıdır. Eğer uygulamanız FlutterActivity yerine FlutterFragmentActivity kullanmıyorsa biyometrik kütüphane çalışmayabilir. android/app/src/main/kotlin/.../MainActivity.kt dosyanızı şu şekilde güncelleyin:
import io.flutter.embedding.android.FlutterFragmentActivity
class MainActivity: FlutterFragmentActivity() {
// İçerik boş kalabilir
}
Bu değişiklik, Android'in biyometrik iletişim penceresini (dialog) doğru şekilde oluşturmasını sağlar.
Sıkça Sorulan Sorular
Biyometrik doğrulama başarısız olursa ne yapmalıyım?
Kullanıcıya hata mesajını gösterin ve 3 denemeden sonra alternatif bir giriş yöntemi (PIN veya şifre) sunun. Asla sonsuz döngüye girmeyin.
Emülatörde neden çalışmıyor?
Emülatörler biyometrik sensör donanımına sahip değildir. Uygulamanızı mutlaka gerçek bir cihazda test etmelisiniz.
Uygulama arka plana geçtiğinde oturum kapanmalı mı?
Güvenlik gereksinimlerinize bağlıdır. Bankacılık gibi uygulamalarda arka plana geçişte oturumu sonlandırıp tekrar biyometrik doğrulama istemek standarttır.
Yüz tanıma ve parmak izini nasıl ayırt ederim?
getAvailableBiometrics() metodunu kullanarak cihazda hangi türlerin tanımlı olduğunu öğrenebilirsiniz.
Bu yöntem verilerimi çalabilir mi?
Hayır, local_auth paketi biyometrik veriye erişemez. Sadece işletim sisteminden "doğrulama başarılı" bilgisini alır.
Biyometrik Veri Akışında Güvenlik ve Performans Optimizasyonu
Biyometrik doğrulama süreçleri, kullanıcı deneyimini hızlandırsa da arka planda ciddi bir işlem yükü oluşturabilir. Uygulamanızın performansını korumak ve güvenlik açıklarını minimize etmek için aşağıdaki stratejileri uygulamanız önerilir.
Doğrulama Sürecinde Bellek Yönetimi
Biyometrik doğrulama servisini her seferinde yeniden başlatmak yerine, bir Singleton yapısı kullanarak servis örneğini bellekte tutmak kaynak tüketimini azaltır. Ayrıca, doğrulama işlemi sırasında UI'ın donmasını engellemek için işlemleri asenkron olarak yönetmelisiniz.
class BiometricService {
static final BiometricService _instance = BiometricService._internal();
final LocalAuthentication _auth = LocalAuthentication();
factory BiometricService() => _instance;
BiometricService._internal();
Future authenticateUser() async {
try {
return await _auth.authenticate(
localizedReason: 'Güvenli giriş için parmağınızı okutun',
options: const AuthenticationOptions(
biometricOnly: true,
stickyAuth: true,
),
);
} catch (e) {
return false;
}
}
}
Gerçek Dünya Senaryosu: "Güvenli Oturum" Uygulaması
Bir bankacılık veya kişisel not uygulaması geliştirdiğinizi varsayalım. Sadece parmak izi okumak yeterli değildir; doğrulamadan sonra uygulamanın durumunu yönetmek kritik öneme sahiptir.
Doğrulama Sonrası Durum Yönetimi
Doğrulama başarılı olduktan sonra uygulamanın "kilitli" durumunu bir ChangeNotifier veya Bloc yapısı ile güncelleyerek ana ekrana geçişi sağlayabilirsiniz.
void handleLogin(BuildContext context) async {
final isAuthenticated = await BiometricService().authenticateUser();
if (isAuthenticated) {
if (context.mounted) {
Navigator.pushReplacementNamed(context, '/dashboard');
}
} else {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Kimlik doğrulama başarısız!')),
);
}
}
Güvenlik Katmanlarını Derinleştirme
Biyometrik doğrulama tek başına %100 güvenlik sağlamaz. Uygulamanızın güvenliğini artırmak için şu ek önlemleri almalısınız:
- Root/Jailbreak Kontrolü: Cihazın işletim sistemi güvenliğinin kırılıp kırılmadığını
flutter_jailbreak_detectionpaketi ile kontrol edin. - Zaman Aşımı: Biyometrik doğrulama başarılı olsa bile, kullanıcı bir süre işlem yapmazsa oturumu otomatik sonlandırın.
- Ekran Yakalama Koruması: Android tarafında
WindowManager.LayoutParams.FLAG_SECUREkullanarak ekran görüntüsü alınmasını engelleyin.
| Önlem | Etki Düzeyi | Kullanım Amacı |
|---|---|---|
| Biyometrik Auth | Yüksek | Kullanıcı kimlik doğrulaması |
| Secure Storage | Çok Yüksek | Şifreli veri saklama |
| Jailbreak Check | Orta | Cihaz bütünlüğü kontrolü |
İpucu: Biyometrik doğrulama sırasında kullanıcıya "Neden bu izni istediğinizi" net bir şekilde açıklayan, yerelleştirilmiş (localization) mesajlar kullanmak, kullanıcı güvenini ve uygulama onay oranlarını doğrudan artırır.
Sonuç
Flutter ile biyometrik parmak izi doğrulama sistemi, kullanıcı güvenliğini artırmanın en etkili yollarından biridir. Bu rehberde, local_auth paketinin kurulumundan platform özel yapılandırmalarına ve güvenlik önlemlerine kadar süreci tamamladık. Bir sonraki adım olarak, başarılı doğrulama sonrasında cihazın güvenli depolama birimi olan flutter_secure_storage kütüphanesini kullanarak kullanıcı oturum bilgilerini şifreli bir şekilde saklamayı öğrenebilirsiniz.
Sorumluluk Reddi: Bu makalede paylaşılan kod örnekleri eğitim amaçlıdır. Üretim (production) ortamındaki uygulamalarınızda, verilerin şifrelenmesi ve kimlik doğrulama süreçlerinin yönetimi için güvenlik standartlarına (OWASP Mobile Top 10) tam uyum sağlamanız ve profesyonel güvenlik denetimlerinden geçmeniz önerilir.


Yorumlar (0)
Yorum Yaz