Swift — 玩玩 Touch ID & FaceID 驗證

在你的應用中加入 Touch ID 和 Face ID 的生物識別來進行身份驗證的功能。

Jeremy Xue
Jeremy Xue ‘s Blog
6 min readApr 1, 2019

--

Photo by Yura Fresh on Unsplash

前言:

😂 依舊是為了案子因素來研究新的項目,這次需要為 App 加上 Touch ID 以及 Face ID 的身份驗證,加上之前沒有碰過生物辨識這塊,因此想藉由這次機會來閱讀一下官方文件,並且將其流程實作一輪,當作案子執行前的事前預習和準備。

在許多 App 應用中,常常會使用生物辨識方式,來取代原本使用密碼或是類似於密碼的機制,如此一來不需要透過複雜且繁複的輸入或是記憶成堆的密碼,使用者只需要輕鬆的透過指紋、人臉等等其他生物辨識方式,即可輕鬆的進行身份認證來訪問功能。

若沒有看過官方文檔或是其他文件,可以參考我這篇 Apple 官方文檔中關於 LocalAuthentication & LAContext 的中文版本:

# 實作:

。 設置 Info.plist 文件

在我們使用任何生物辨識技術的專案中,我們需要在 App 中的 Info.plist 文件中加入 NSFaceIDUsageDescriptionkey。如果沒有這個 key,系統將不允許你的 App 使用 Face ID。這個 key 的值是系統在你的 App 首次嘗試使用 Face ID 時向用戶顯示的 String。此 String 應該清楚的解釋你的 App 需要訪問此身份驗證機制的原因。系統不需要 Touch ID 的類似用法說明。

NSFaceIDUsageDescription 支援 iOS 11及更高版本。

。 創建和配置上下文

你可以使用 LAContext 實例在 App 中執行生物識別身份驗證,該實例代理你的應用與 Secure Enclave 之間的交互。首先我們創建一個上下文:

你可以自定義上下文使用的訊息,來引導使用者完成流程。 例如:你可以為各種警報視圖中顯示的「取消」 按鈕設置自定義訊息:

這有助於使用者了解當他們點擊按鈕時,他們將恢復正常的身份驗證過程。

。 測試方案可用性

在嘗試進行身份驗證之前,請通過調用 canEvaluatePolicy 方法進行測試以確保確實能夠執行此操作:

因為該方法第二個 error 參數類型為 NSErrorPointer ,所以我們會先宣告一個 NSError? 的變數(可能為 nil)來接收返回的錯誤,若想忽略錯誤就將參數指定為 nil

如果方法失敗,它將使用此參數返回錯誤,詳細說明出錯的地方。 有關可能的錯誤代碼,請參閱 LAError.Code

。 評估指定方案

接下來我們可以透過 evaluatePolicy 方法,藉由該方法所回調中的 Success 這個 Bool 類型值來判斷方案是否執行成功,而其錯誤 error 如同上面的錯誤相同,一樣可以參考 LAError.Code

。身份驗證流程程式碼

#DEMO

接著讓我們測試一下是否能夠使用 Touch ID 進行登入吧,這邊小弟在下我是使用 iPhone 8 plus 進行 Demo:

Touch ID 登入&取消

#Github 連結:

後記:

原本以為這種生物辨識的技術寫起來會很繁複,但是實際上透過原生的 LocalAuthentication 框架實作起來好像沒有特別複雜,可見 Apple 爸爸幫我們做了多少事情,藉由一個方法就能知道身份認證是否成功。當然它不僅僅只有這種用途,他還有其他使用方式,像是可以配合 KeyChain 來使用,如果以後有機會再介紹。

關於使用 Touch ID 或是 Face ID 登入的方式,Apple 官方也有釋出官方的範例,有興趣的也能參考:

[Sample Code] Logging a User into Your App with Face ID or Touch ID

--

--

Jeremy Xue
Jeremy Xue ‘s Blog

Hi, I’m Jeremy. [好想工作室 — iOS Developer]