🔐

SwiftUIでFaceIDと指紋認証をやってみた

2024/03/06に公開

読んでほしい人

  • SwiftUiを勉強してる人
  • 生体認証に興味がある人

補足情報

今回は、海外のサイトを参考に、info.plistの設定をして、コードを書いてみました。このサイトはSwiftを勉強するなら、ぜひみていただきたいです。

https://www.hackingwithswift.com/books/ios-swiftui/using-touch-id-and-face-id-with-swiftui

こちらの動画を参考に実機も使いつつ試してみたください。AppleDeveloperのアカウント持ってない人は実験できないかもしれないです😇
https://youtu.be/0Bcui9hyXhY

記事の内容

LocalAuthの機能は標準機能であるらしくimportすれば使えます。他のプロジェクトにコード書いてるので、私は別ファイルにログインページの構造体を書いてます。

import LocalAuthentication
import SwiftUI

struct LocalAuthView: View {
    @State private var isUnlocked = false
    
    var body: some View {
        VStack {
            if isUnlocked {
                Text("Unlocked")
            } else {
                Text("Locked")
            }
        }
        .onAppear(perform: authenticate)
    }
    
    func authenticate() {
        let context = LAContext()
        var error: NSError?

        // check whether biometric authentication is possible
        if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) {
            // it's possible, so go ahead and use it
            let reason = "We need to unlock your data."

            context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: reason) { success, authenticationError in
                // authentication has now completed
                if success {
                    // authenticated successfully
                    isUnlocked = true
                } else {
                    // there was a problem
                }
            }
        } else {
            // no biometrics
        }
    }
}

デフォルのファイルで呼び出してビルドすれば使えます。

import SwiftUI

struct ContentView: View {
    
    var body: some View {
        LocalAuthView()
    }
    
    struct ContentView_Previews: PreviewProvider {
        static var previews: some View {
            ContentView()
        }
    }
}

iPhoneSEだと、こんな感じですね

最後に

前回も生体認証の記事を書いたのですが、指紋認証がなかったので参考になりそうな資料を見つけて試すことができました!
最近ローカル環境で認証を使う技術の調査をしているので参考になりました。

https://zenn.dev/joo_hashi/articles/5da2841ccb9896

Discussion