LoginSignup
12
8

More than 3 years have passed since last update.

【Swift】 生体認証のやり方

Last updated at Posted at 2019-08-04

生体認証を初めて実装したので、次に実装する際に忘れないよう備忘録。

実装の準備

最初にLocalAuthenticationをimportする。

BiometricsTest.swift
import LocalAuthentication

続いてinfo.plistの中に、

Privacy - Face ID Usage Description

を設定する。位置情報等と同じでPrivacyの使用目的が必要。

実装

まずは、端末が生体認証に対応しているかどうかを確認する。

BiometricsTest.swift
/// 生体認証が利用可能かどうか
func canUseBiometrics() -> Bool {

        let context = LAContext()
        var error: NSError? = nil

        let result = context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error)

        guard !result else { return true }

        if let error = error {
            // iOS11以降とそれ以前ではErrorのコード名が異なるため、場合分け
            if #available(iOS 11.0, *) {
                switch error.code {
                case LAError.biometryNotEnrolled.rawValue, LAError.biometryLockout.rawValue:
                    return true
                default:
                    return false
                }
            } else {
                switch error.code {
                case LAError.touchIDNotEnrolled.rawValue, LAError.touchIDLockout.rawValue:
                    return true
                default:
                    return false
                }
            }
        }
        return false
    }

注意するのは、指紋または顔認証が設定されていない場合falseが返ってくること。また、端末にPassCodeが設定されていない場合もfalseが返ってくる。

続いて、実際に生体認証を実行する

BiometricsTest.swift
/// 生体認証を実行する
    func doBiometricsAuthentication() {
        let context = LAContext()

        // 生体認証を使う理由。空文字だと失敗扱いになるので、必ず文字を入れる
        let reason = "ロックを解除"

        context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: reason) { (success, evaluateError) in
            if success {
                print("Success!!")
            } else {
                guard let error = evaluateError as NSError? else {
                    print("Error")
                    return
                }
                print("\(error.code): \(error.localizedDescription)")
            }
        }
    }

以上で生体認証を使うことができる。

BiometricsTest.swift
    @IBAction func actionBiometricsAuthentication(_ sender: Any) {
        if canUseBiometrics() {
            doBiometricsAuthentication()
        }
    }
12
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
8