在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玩一玩。