Swift で Face ID や Touch ID を使って認証する方法

ここでは、Swift で Face ID や Touch ID を使って認証する方法をご説明します。

Swift で Face ID や Touch ID を使って認証する方法 1

Face ID・Touch ID を使う iOS アプリの準備をする

まずはテスト用にボタンをタップして、Face ID・Touch ID で認証するための、簡単な iOS アプリを作ります。

Xcode で [iOS] の [App] の新規プロジェクトを作成します。

デザインや場所などは適当で良いので、Main ストーリーボードの View Controller に Button をひとつ追加して、Title を Login with Face ID にしておきます。

Swift で Face ID や Touch ID を使って認証する方法 2


そのボタンから、loginButtonTapped という名前で TouchUpInside のアクションを作っておきます。

Swift で Face ID や Touch ID を使って認証する方法 3

import UIKit

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    @IBAction func loginButtonTapped(_ sender: Any) {
    }
}

ボタンの追加の方法や、アクションの作り方がわからない方は「基本的な iOS アプリの作り方」をご覧ください。


Swift で Face ID や Touch ID を使って認証する方法

今回は、Face ID や Touch ID で認証できない時は、パスコードでも認証できるようにします。

最初に Face ID を使用するために、Privacy - Face ID Usage Description を info.plist に追加しておきます。

Swift で Face ID や Touch ID を使って認証する方法 5


それでは、iOS アプリで Swift で Face ID や Touch ID を使って認証するコードを書いていきましょう。

LocalAuthentication framework を使うので、LocalAuthentication を import しておきます。

そして、loginButtonTapped() を次のように変更します。

import UIKit
import LocalAuthentication

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    @IBAction func loginButtonTapped(_ sender: Any) {
        let laContext = LAContext()
        var cepError:NSError?

        if laContext.canEvaluatePolicy(.deviceOwnerAuthentication, error: &cepError) {

            let reason = "Log in to your account"
            laContext.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: reason) {
                success, epError in

                if success {
                    print("Success!")
                } else {
                    print("Error A: \(epError?.localizedDescription ?? "Failed to evaluate policy")")
                }
            }
        } else {
            print("Error B: \(cepError?.localizedDescription ?? "Can't evaluate policy")")
        }
    }
}

Swift で Face ID や Touch ID を使って認証する方法 4


loginButtonTapped() のコードをご説明します。

11 行目で LAContext を定義します。 LAContext は Face ID や Touch ID を使って認証をハンドルするためのクラスです。

12 行目では、エラーを受け取るための変数を定義しています。


14 行目で canEvaluatePolicy(_:error:)メソッドを使って、deviceOwnerAuthentication ポリシーで認証できるかをチェックしています

Face ID や Touch ID で認証できない時はエラーにしたい時は deviceOwnerAuthenticationWithBiometrics ポリシーを指定してください。

ポリシーが評価できる時は canEvaluatePolicy(_:error:)メソッドが true を返します。

できない時は false を返し、cepError にエラーの内容が入ってくるので、27 行目でエラーを print しています。


続いて 17 行目で evaluatePolicy(_:localizedReason:reply:) メソッドを使って、deviceOwnerAuthentication ポリシーで、Face ID や Touch ID を使っての認証を評価しています。

Face ID や Touch ID の認証が失敗した時やサポートされていない時はパスコードでの認証が可能です。

Face ID や Touch ID の認証ができない時にエラーにしてしまいたい時は、deviceOwnerAuthenticationWithBiometrics ポリシーを指定してください。


認証が成功すると success が true になるので、21 行目で Success! を print しています。

ログインに使う時は、ログイン成功時の処理をここで行います。

エラーの時は、epError にエラーの内容が入ってくるので、23 行目でエラーを print しています。


Swift で Face ID や Touch ID を使って認証するコードは以上です。


iOS アプリを iPhone にインストールしてテストする

作ったアプリを iPhone や iPad にインストールしてテストします。

作った iOS アプリを iPhone にインストールする方法がわからない方は「Xcode からアプリを iPhone にインストールして実行する方法」をご覧ください。


フェイス ID をサポートしている iPhone を指定してこのアプリを実行すると、以下のような画面が表示されます。

Swift で Face ID や Touch ID を使って認証する方法 6


Login with Face ID ボタンをタップすると、一度目は Face ID を使う許可を求めるダイアログが表示されるので、OK を選択します。

Swift で Face ID や Touch ID を使って認証する方法 7

そうすると、フェイス ID の認証が実行され、認証に成功した時は Xcode の Output 画面に Success! と表示されます。

Swift で Face ID や Touch ID を使って認証する方法 1

Swift で Face ID や Touch ID を使って認証する方法 8


エラーのケースですが、ユーザーが認証を途中でキャンセルした時は Error A: Authentication canceled. が print されました。

canEvaluatePolicy に渡すポリシーを deviceOwnerAuthenticationWithBiometrics にして、Face ID を許可しないと Error B: Biometry is not available. が print されました。

localizedDescription ではなく、エラーのコードでエラーの内容を判別したい時は LAError.Code のリファレンスを参照してください。


この iOS アプリを、Face ID をサポートしておらず、Touch ID をサポートしているデバイスにインストールして実行すると、次のように Touch ID の認証が行われます。

Swift で Face ID や Touch ID を使って認証する方法 9

Swift で Face ID や Touch ID を使って認証する方法 10


以上、Swift で Face ID や Touch ID を使って認証する方法をご説明しました。

© 2024 iOS 開発入門