使用TouchID進行身份驗證

在App中經(jīng)常會使用TouchID進行身份驗證,那么怎么去實現(xiàn)驗證功能的開發(fā)呢?接下來一起來看一下它的實現(xiàn)。

LocalAuthentication

首先在項目中需要添加LocalAuthentication.framework,在需要實現(xiàn)的地方import

import LocalAuthentication

LAContext

先來看看LAContext都有什么東西,結(jié)果在API中我們發(fā)現(xiàn)了兩個方法:

// 檢查當前設(shè)備是否可用touchID,返回一個BOOL值;不會彈驗證指紋密碼框
open func canEvaluatePolicy(_ policy: LAPolicy, error: NSErrorPointer) -> Bool
// 驗證方法,會彈驗證指紋密碼框
open func evaluatePolicy(_ policy: LAPolicy, localizedReason: String, reply: @escaping (Bool, Error?) -> Swift.Void)  

LAPolicy是一個枚舉,在API中可以看到有兩種類型:

@available(iOS 8.0, *)
case deviceOwnerAuthenticationWithBiometrics  //iOS8可用,驗證錯誤三次之后則會被鎖定,再驗證就會返回不可用狀態(tài)
@available(iOS 9.0, *)
case deviceOwnerAuthentication  //iOS9可用,驗證錯誤三次或者鎖定之后會彈出輸入密碼頁面

先來看一下效果圖:


第一次彈出TouchID提示框.png
錯誤后彈出提示框.png

再來看看代碼的實現(xiàn)

let context = LAContext()
var error: NSError?
context.localizedCancelTitle = "取消"
// iOS 9 之后鎖定指紋識別之后,如果需要立即彈出輸入密碼界面需要使用deviceOwnerAuthentication這個屬性重新發(fā)起驗證
if context.canEvaluatePolicy(.deviceOwnerAuthentication, error: &error) {
     print("TouchID可用")
     context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: "指紋驗證解鎖") { [weak self](success, error) in
         if success {
             print("驗證成功")
         } else {
             if let error = error as NSError? {
                 switch error.code { //LAError的幾種錯誤信息
                 case LAError.authenticationFailed.rawValue:
                     print("驗證信息出錯")
                 case LAError.userFallback.rawValue:
                     print("用戶選擇了另一種方式")
                 case LAError.userCancel.rawValue:
                     print("用戶取消")
                 case LAError.systemCancel.rawValue:
                     print("切換到前臺被取消")
                 case LAError.passcodeNotSet.rawValue:
                     print("沒有設(shè)置TouchID")
                 case LAError.appCancel.rawValue:
                     print("在驗證中被其他app中斷")
                 case LAError.invalidContext.rawValue:
                     print("驗證出錯")
                 default:
                     print("驗證失敗")
                 }
             }
         }
     }
} else {
     print("TouchID不可用")
}
  • 注意:
    1.必須用真機測試下才會有TouchID的功能。
    2.指紋識別完成后,需要返回主線程進行相應(yīng)的操作,否者你會發(fā)現(xiàn)有時候識別完4-5秒才能返回結(jié)果。

到這里就完成了一個簡單的TouchID身份驗證的功能,感興趣的小伙伴可以自己寫個demo玩一玩。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容