SwiftUI ile Biyometrik Kimlik Doğrulama

Günümüzün dijital dünyasında, hassas bilgilerin güvenliğini sağlamak her zamankinden daha önemli hale geldi. Parmak izi ve yüz tanıma gibi biyometrik doğrulama yöntemleri, güçlü bir güvenlik çözümü sunar. SwiftUI ile biyometrik kimlik doğrulamayı iOS uygulamalarınıza entegre etmek oldukça basit ve etkilidir. Bu blog yazısında, SwiftUI ile biyometrik kimlik doğrulamanın nasıl uygulanacağını inceleyeceğiz.

1. Biyometrik Kimlik Doğrulamayı Anlamak

iOS’ta biyometrik kimlik doğrulama, temel olarak LocalAuthentication framework’ü aracılığıyla gerçekleştirilir. Bu framework, Touch ID, Face ID veya cihazın parola doğrulaması gibi yöntemlerle kullanıcıları kimlik doğrulamadan geçirmenizi sağlar. Bu framework’ün ana bileşenleri şunlardır:

  • LAContext: Kimlik doğrulama politikalarını değerlendirmek ve doğrulama isteklerini yönetmek için kullanılan ana arayüzdür.
  • LAPolicy: Kimlik doğrulama politikasını tanımlar, örneğin .deviceOwnerAuthentication veya .deviceOwnerAuthenticationWithBiometrics.
  • NSError: Kimlik doğrulama başarısız olursa ayrıntılı hata bilgisi sağlar.

2. Projenizi Hazırlama

Koda geçmeden önce, projenizin biyometrik kimlik doğrulamayı destekleyecek şekilde ayarlandığından emin olun. Uygulamanızın Info.plist dosyasına, biyometrik kimlik doğrulama istemek için gerekli olan şu anahtarı ekleyin:

<key>NSFaceIDUsageDescription</key>
<string>Face ID'yi kimlik doğrulama için kullanmamız gerekiyor.</string>

Bu mesaj, uygulama biyometrik kimlik doğrulama istediğinde kullanıcıya gösterilecektir.

3. SwiftUI ile Biyometrik Kimlik Doğrulama Uygulama

Şimdi SwiftUI kullanarak biyometrik kimlik doğrulamayı nasıl uygulayacağımızı görelim. Kullanıcının, Face ID veya Touch ID kullanarak korunan bir alana erişim sağladığı basit bir örnek oluşturacağız.

import SwiftUI
import LocalAuthentication

struct ContentView: View {
    @State private var isAuthenticated = false
    @State private var showAlert = false
    @State private var alertMessage = ""

    var body: some View {
        VStack {
            if isAuthenticated {
                Text("Hoş geldiniz! Kimlik doğrulamanız başarılı.")
                    .font(.headline)
                    .padding()
            } else {
                Text("Devam etmek için lütfen kimlik doğrulaması yapın.")
                    .font(.headline)
                    .padding()
                Button(action: {
                    Task {
                        await authenticate()
                    }
                }) {
                    Text("Kimlik Doğrula")
                        .font(.title)
                        .padding()
                        .background(Color.blue)
                        .foregroundColor(.white)
                        .cornerRadius(10)
                }
            }
        }
        .alert(isPresented: $showAlert) {
            Alert(title: Text("Kimlik Doğrulama Başarısız"), message: Text(alertMessage), dismissButton: .default(Text("Tamam")))
        }
    }

    func authenticate() async {
        let context = LAContext()
        var error: NSError?

        // Cihazın biyometrik kimlik doğrulama yeteneğini kontrol et
        if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) {
            let reason = "Hesabınıza giriş yapın"

            do {
                let success = try await context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: reason)
                if success {
                    isAuthenticated = true
                }
            } catch {
                alertMessage = error.localizedDescription
                showAlert = true
            }
        } else {
            // Biyometrik kimlik doğrulama mevcut değilse parola ile devam et
            alertMessage = error?.localizedDescription ?? "Biyometri mevcut değil"
            showAlert = true
        }
    }
}

Açıklamalar:

  • Task { await authenticate() } ile butona tıklandığında asenkron olarak authenticate fonksiyonu çağrılıyor.
  • authenticate() fonksiyonunu async olarak tanımladık. Bu fonksiyon asenkron çalışır ve await ile context.evaluatePolicy fonksiyonunu çağırır.
  • try await context.evaluatePolicy(...) kullanarak biyometrik kimlik doğrulamasını gerçekleştirdik. Eğer bu işlem başarısız olursa, catch bloğu çalışır ve hata mesajı alertMessage değişkenine atanır.

4. Biyometrik Kimlik Doğrulamayı Test Etme

Biyometrik kimlik doğrulamayı test etmek için, Touch ID veya Face ID destekleyen bir cihaz kullanmanız gerekecektir. iOS Simulator kullanıyorsanız, biyometrik kimlik doğrulamayı simüle etmek için Hardware > Face ID/Touch ID menüsüne gidip Enroll... seçeneğini kullanabilirsiniz.

5. Hataları ve Uç Durumları Yönetme

Biyometrik kimlik doğrulama, kullanıcının kimlik doğrulamayı iptal etmesi, cihazın biyometrik desteği olmaması veya kullanıcının biyometriyi kaydetmemesi gibi çeşitli nedenlerle başarısız olabilir. Bu hataları zarif bir şekilde yönetmek ve parola gibi bir yedekleme seçeneği sunmak önemlidir.

Yukarıdaki örnekte, biyometri mevcut değilse veya kimlik doğrulama başarısız olursa, kullanıcıya bir uyarı gösterilir. Ayrıca, kullanıcıdan parola istemek veya farklı bir ekrana yönlendirmek için ek mantık da ekleyebilirsiniz.

6. Sonuç

Biyometrik kimlik doğrulama, SwiftUI uygulamalarınızda güvenliği artırmak için güçlü bir araçtır. Sadece birkaç satır kodla, Touch ID ve Face ID’yi entegre ederek, kullanıcılarınıza sorunsuz ve güvenli bir deneyim sunabilirsiniz. Güvenlik endişeleri arttıkça, biyometrik kimlik doğrulama uygulamak doğru yönde bir adımdır.

Yorum yapın