您好,登錄后才能下訂單哦!
iOS Touch ID 身份認證
iOS 8 及以后錄了指紋的設備可以使用 touch ID 進行身份認證,指紋符合錄入的指紋才能認證成功。
步驟
調用 LAContext 對象的 canEvaluatePolicy 和 evaluatePolicy 方法都要傳入 LAPolicy 枚舉類型的值,目前有兩種取值:deviceOwnerAuthenticationWithBiometrics 和 deviceOwnerAuthentication。前一種 deviceOwnerAuthenticationWithBiometrics 是進行指紋認證。后一種 deviceOwnerAuthentication 是 iOS 9.0 及以后才能使用,先進行指紋認證,如果指紋認證失敗可以通過輸入密碼進行認證。
調用 LAContext 對象的 evaluatePolicy 方法會彈出指紋認證對話框。對話框會顯示需要進行認證的原因(String),就是 localizedReason 參數的值。對話框有取消按鈕,iOS 10.0 及以后可以設置 LAContext 對象的 localizedCancelTitle 的值來改變取消按鈕顯示的字。如果指紋認證失敗,對話框還會顯示 fallback 按鈕,可以設置 LAContext 對象的 localizedFallbackTitle 的值來改變 fallback 按鈕顯示的字。
需要注意,evaluatePolicy 方法的 reply 回調不在主線程。如果需要更新 UI 的話,要調用主線程再更新。
代碼示例
代碼已上傳GitHub:https://github.com/Silence-GitHub/TouchIDDemo
在控制器中放置一個 label 顯示認證返回結果。
指紋認證代碼
let context = LAContext() context.localizedFallbackTitle = "Fall back button" if #available(iOS 10.0, *) { context.localizedCancelTitle = "Cancel button" } var authError: NSError? if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &authError) { context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: "Localized reason for authentication with biometrics", reply: { (success, evaluateError) in // NOT in main thread DispatchQueue.main.async { if success { self.label.text = "Success" // Do something success } else if let error = evaluateError { self.label.text = error.localizedDescription // Deal with error if let code = LAError.Code(rawValue: (error as NSError).code) { switch code { case .userFallback: print("fall back button clicked") default: break } } } } }) } else if let error = authError { label.text = error.localizedDescription // Deal with error }
指紋和密碼認證代碼
if #available(iOS 9.0, *) { let context = LAContext() context.localizedFallbackTitle = "Fall back button" if #available(iOS 10.0, *) { context.localizedCancelTitle = "Cancel button" } var authError: NSError? if context.canEvaluatePolicy(.deviceOwnerAuthentication, error: &authError) { context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: "Localized reason for authentication", reply: { (success, evaluateError) in // NOT in main thread DispatchQueue.main.async { if success { self.label.text = "Success" // Do something success } else if let error = evaluateError { self.label.text = error.localizedDescription // When fall back button clicked, user is required to enter PIN. Error code will not be "userFallback" // Deal with error } } }) } else if let error = authError { label.text = error.localizedDescription // Deal with error } } else { let alert = UIAlertController(title: nil, message: "Authentication is available on iOS 9.0 or later", preferredStyle: .alert) alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil)) present(alert, animated: true, completion: nil) }
以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持億速云!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。