今天來玩玩裝置生物識別的功能,
也就是TouchID or FaceID
雖然現在主要大多數有應用的APP基本上都是金融業居多。
但也是有部分的APP有引入此功能,
假設您的APP非一次性登入加入驗證生物識別可大大提升使用者體驗...
下面直接就來寫重點拉!
從基本設定開始,第一步先開啟info.plist
加入Privacy - Face ID Usage Description 後面字串就自行發揮吧!
例如:使用TouchID/FaceID進行登入
此加入僅限於FaceID,TouchID是不用加入該授權的。
接下來在要引用的ViewController加入import LocalAuthentication
然後宣告一個變數 並init. var context = LAContext()
接下來就是實作了,網路上我看過的範例多數都是直接寫一個Action執行,
我則是另外寫了一個方法進行,你可以依照你習慣的方式去進行不同的改變。
首先先檢查裝置是否可使用生物識別
if context.canEvaluatePolicy(.deviceOwnerAuthentication, error: &error) {
//省略
} else {
if let error = error {
errorCode(error)
}
}
如果error直接跳錯誤訊息,成功則進行生物辨識,如下:
//此文字會顯示於辨識時訊息
let reason = "使用TouchID或FaceID進行驗證"
// 使用哪種方法進行生物驗證
context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: reason) { (success, error) in
if success {
DispatchQueue.main.async { [unowned self] in
//成功直接執行login
showAlert(title: "成功", "您已驗證成功")
}
} else {
DispatchQueue.main.async { [unowned self] in
if let error = error {
errorCode(error)
}
}
}
}
reason所使用文字建議你們使用一個通用的文字..
順帶一提官方提供的生物辨識有兩種方法,deviceOwnerAuthenticationWithBiometrics
跟deviceOwnerAuthentication 而我引用後者,金融業都是使用前者。兩種方法玩起來不一樣,我引用的當您失敗過多次後仍然可透過裝置所設定密碼執行驗證,前者則無法...這邊再由各位自己去玩看看吧!
而驗證可直接寫在檢查裝置是否可使用生物識別的判斷內,也可跟我一樣拆開寫。看當下案子需求能做不同的變化。
在此再附上我的errorCode(錯誤有很多種可以自己完)基本上我的error因使用的是deviceOwnerAuthentication的方法照理說都用不太到,
要研究error建議使用deviceOwnerAuthenticationWithBiometrics
func errorCode(_ error:Error) {
switch error {
case LAError.authenticationFailed:
print("Authentication failed")
case LAError.passcodeNotSet:
showAlert(title: "錯誤", "您未設定密碼")
case LAError.systemCancel:
showAlert(title: "錯誤", "授權過程中被系統取消")
case LAError.userCancel:
showAlert(title: "錯誤", "授權被用戶取消")
case LAError.userFallback:
showAlert(title: "提示", "用戶取消生物辨識使用密碼驗證")
case LAError.biometryNotAvailable:
if context.biometryType == .faceID {
showAlert(title: "提示", "您已關閉FaceID授權,請至系統設定中開啟。")
} else if context.biometryType == .touchID {
showAlert(title: "提示", "您已關閉TouchID授權,請至系統設定中開啟。")
} else if context.biometryType == .none {
showAlert(title: "提示", "您未授權TouchID或FaceID於APP中,請至系統設定中開啟。")
}
case LAError.biometryNotEnrolled:
showAlert(title: "提示", "沒有登入生物識別,無法使用")
case LAError.biometryLockout:
showAlert(title: "錯誤", " 您已多次登入失敗,請使用一般登入。")
case LAError.appCancel:
print("APP取消驗證")
default:
print(error.localizedDescription)
}
}
錯誤訊息內你有注意到有個biometryType嗎?此方法是用來判斷它屬於哪種生物辨識驗證,至於none我個人覺得現在應該是不太會發生,因為iPhone 5s後的機種不是touchID就是FaceID所以照理說不會執行到none
以上很廢的分享文,提供您參考...希望能幫助到剛好有要使用沒玩過的朋友。