讓我們透過生物辨識的方式快速進行使用者的身份驗證吧!
隕石開發期間被分發了一個生物驗證的需求,一開始以為是什麼新潮的技術,原來是使用 Touch ID 與 Face ID 驗證身份的功能(以 iOS 來說的話)。原本覺得加入這個生物驗證的功能挺不錯的,後來詳細詢問一下後,才發現不太對勁:
「這個生物驗證什麼時候點要觸發?」
-「 使用者登入之後啊。」
「恩?登入之後?」
-「對」
「....... OK」
這次的教學就是要來教大家如何使用 Touch ID 與 Face ID 來進行快速的身份認證,這種身份認證的方式讓使用可能夠快速的訪問到我們的 APP,取代手動輸入密碼的過程。
這篇教學會跟著官方文件走,有興趣了解的朋友可以看看。
如果你的 App 有需要加入 Face ID 的話,那我們必須在 Info.plist 新增 NSFaceIDUsageDescription
的 key。
在我們使用任何生物辨識技術的專案中,我們需要在 App 中的 Info.plist 文件中加入 NSFaceIDUsageDescription
的 key
。如果沒有使用描述,系統將不允許你的 App 使用 Face ID。
而這個 NSFaceIDUsageDescription
的 value
是系統在你的 App 首次嘗試使用 Face ID 時向用戶顯示的字串。這個字串應該清楚的解釋你的 App 需要訪問此身份驗證機制的原因,而 Touch ID 不需要有類似的說明。
NSFaceIDUsageDescription
支援 iOS 11及更高版本。
別忘了 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):
原本以為生物辨識蠻難實作的,但 Apple 官方有提供這方面的框架真的是太佛心啦,我們可以透過裡面的一些方法來驗證使用者的身份,但是實際上我們是不會碰觸到使用者資料的部分,像是取得 TouchID/FaceID 的資料等等,我們只是單純透過這些方式判斷方案是否可行,以及方案驗證是否成功。那麼這次 Touch ID/Face ID 的教學就到這邊結束了,大家之後可以在專案中試著加入看看。