iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 14
0
Mobile Development

諸神黃昏下的 iOS 工程師系列 第 14

D14 - 摸一下,看一眼,讓使用者輕鬆登入

讓我們透過生物辨識的方式快速進行使用者的身份驗證吧!

? 隕石小故事

隕石開發期間被分發了一個生物驗證的需求,一開始以為是什麼新潮的技術,原來是使用 Touch ID 與 Face ID 驗證身份的功能(以 iOS 來說的話)。原本覺得加入這個生物驗證的功能挺不錯的,後來詳細詢問一下後,才發現不太對勁:

「這個生物驗證什麼時候點要觸發?」
-「 使用者登入之後啊。」
「恩?登入之後?」
-「對」
「....... OK」

Overview

這次的教學就是要來教大家如何使用 Touch ID 與 Face ID 來進行快速的身份認證,這種身份認證的方式讓使用可能夠快速的訪問到我們的 APP,取代手動輸入密碼的過程。


實作

這篇教學會跟著官方文件走,有興趣了解的朋友可以看看。

|設定 Face ID 使用說明

如果你的 App 有需要加入 Face ID 的話,那我們必須在 Info.plist 新增 NSFaceIDUsageDescription 的 key。

在我們使用任何生物辨識技術的專案中,我們需要在 App 中的 Info.plist 文件中加入 NSFaceIDUsageDescriptionkey。如果沒有使用描述,系統將不允許你的 App 使用 Face ID。

而這個 NSFaceIDUsageDescriptionvalue 是系統在你的 App 首次嘗試使用 Face ID 時向用戶顯示的字串。這個字串應該清楚的解釋你的 App 需要訪問此身份驗證機制的原因,而 Touch ID 不需要有類似的說明。

NSFaceIDUsageDescription 支援 iOS 11及更高版本。

|定義 LAContext

別忘了 import 所需的 LocalAuthentication 框架。

我們可以新增 LAContext 實例在 App 中執行生物識別身份驗證,該實例代理你的應用與 Secure Enclave 之間的交互。

接著透過 localizedCancelTitle 來設定 Alert 的取消標題:

|測試方案可用性 & 評估指定方案

在嘗試進行身份驗證之前,請通過調用 canEvaluatePolicy 方法進行測試以確保確實能夠執行此操作,並且宣告一個 error 來接收錯誤:

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

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

接著來我們可以透過 evaluatePolicy 方法,藉由該方法中回傳的 Bool 值判斷驗證是否成功,而其 Error 如同上面的錯誤相同,一樣可以參考 LAError.Code。而我們可以在 localizedReason 中加入使用原因:

接著我們透過 success 這個 Bool 來判斷是否驗證成功:

讓我們來看看我們整段程式碼是如何吧:

最後,到實機上使用看看吧~(我是 iPhone 8+,沒有辦法用 FaceID 給大家看 QQ):


Summary

原本以為生物辨識蠻難實作的,但 Apple 官方有提供這方面的框架真的是太佛心啦,我們可以透過裡面的一些方法來驗證使用者的身份,但是實際上我們是不會碰觸到使用者資料的部分,像是取得 TouchID/FaceID 的資料等等,我們只是單純透過這些方式判斷方案是否可行,以及方案驗證是否成功。那麼這次 Touch ID/Face ID 的教學就到這邊結束了,大家之後可以在專案中試著加入看看。


上一篇
D13 - 通通給我滑起來,滑動解鎖/操作
下一篇
D15 - 怎麼又滑起來了?滑出自己的手勢吧!
系列文
諸神黃昏下的 iOS 工程師31

尚未有邦友留言

立即登入留言