ios11
iPhoneX
FaceID
LocalAuthentication

【iPhoneX】FaceIDを実装してみた【iOS11】

はじめに

こんにちは!
アドベントカレンダー初挑戦です!!
なんか共同で一つのものを作り上げている感じがして、
とても楽しくやっています!

さて本題ですが、今回はiPhoneXから新しい生体認証として導入された、
「FaceID」による認証をやってみようと思います。

まだまだSwift初心者ですので、間違っている部分があれば教えていただけると幸いです...!

開発環境

  • macOS High Sierra バージョン10.13.1
  • Xcode9.2
  • iPhoneX iOS11.2

さっそくやってみよう

新しいプロジェクトを作成して始めていきたいと思います!

顔認証が成功すればテキストが変わる無意味なアプリを作ってみますw
まあ生体認証の勉強なんでなんでもいいんですよ!

必要な準備

FaceIDを使用する場合、ユーザー側に使用許諾を得る必要があります。

info.plistに下記項目を追加してください。
スクリーンショット 2017-12-09 0.30.57.png

FrameWorkのImport

iOS8から実装された、認証系のFrameWorkであるLocalAuthenticationをImportします。

ViewController.swift
import LocalAuthentication

認証部分の実装

認証させるタイミング等、本来は考えないといけませんが、
今回は実験、かつとりあえず手を動かしてみようということで起動してすぐ認証させますw

ViewController.swift
    override func viewDidLoad() {
        super.viewDidLoad()

        let context = LAContext()
        var error: NSError?
        let description: String = "顔認証"

        // FaceIDが使用の使用可否を確認し、使用可能な場合のみ認証処理を行う
        if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) {
            context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: description, reply: {success, evaluateError in
                if (success) {
                    // 認証成功
                    print("顔見知りです。")
                } else {
                    // 認証失敗
                    print("初めまして。")
                }
            })
        }
    }

LocalAuthenticationのcanEvaluatePolicyで生体認証が可能かどうかを判定しています。

すごくシンプルですが、これだけで認証部分の実装は完了です。

動かしてみた

起動と同時にこのアプリにFaceIDを使用していいかどうかが聞かれました。

スクリーンショット 2017-12-09 1.10.07.png

OKを押すとFaceIDの認証が始まります。

スクリーンショット 2017-12-09 1.13.52.png

今回はSimulatorで動かしたので、メニューからマッチングしなかった場合を確認してみました。

スクリーンショット 2017-12-09 1.14.24.png

するとFaceIDをもう一度行うかキャンセルするかのダイアログが出てきました。

スクリーンショット 2017-12-09 1.14.50.png

ここで認証をやめたり再実行したりとできるみたいです。

最後に

こんな数行のコードで認証機能を実装できるとは思っていませんでした。
まあ簡潔に書きすぎたというのもありますが、生体認証を使用するハードルが高くないことが知れて良かったです!
iPhoneX...、まだまだ試してみたいことがいくつかあるので、次回以降記事にできればと思います!

最後までご覧いただきありがとうございました!

ではでは。