iOS Touch ID 身份認證
iOS Touch ID 身份認證
iOS 8 及以后錄了指紋的設(shè)備可以使用 touch ID 進行身份認證,指紋符合錄入的指紋才能認證成功。
步驟
- 導(dǎo)入 LocalAuthentication 框架:import LocalAuthentication
- 初始化 LAContext 對象:let context = LAContext()
- 調(diào)用 LAContext 對象的 canEvaluatePolicy(_ policy: LAPolicy, error: NSErrorPointer) -> Bool方法
- 上一步如果返回 false,表示不能進行認證,執(zhí)行相應(yīng)的失敗操作;如果返回 true,調(diào)用 LAContext 對象的evaluatePolicy(_ policy: LAPolicy, localizedReason: String, reply: @escaping (Bool, Error?) -> Void)方法,在 reply 中判斷是否認證成功來執(zhí)行相應(yīng)的操作(如果認證失敗,可以獲取錯誤碼 code,看看屬于 LAError.Code 的哪種類型錯誤來執(zhí)行相應(yīng)的失敗操作)
調(diào)用 LAContext 對象的 canEvaluatePolicy 和 evaluatePolicy 方法都要傳入 LAPolicy 枚舉類型的值,目前有兩種取值:deviceOwnerAuthenticationWithBiometrics 和 deviceOwnerAuthentication。前一種 deviceOwnerAuthenticationWithBiometrics 是進行指紋認證。后一種 deviceOwnerAuthentication 是 iOS 9.0 及以后才能使用,先進行指紋認證,如果指紋認證失敗可以通過輸入密碼進行認證。
調(diào)用 LAContext 對象的 evaluatePolicy 方法會彈出指紋認證對話框。對話框會顯示需要進行認證的原因(String),就是 localizedReason 參數(shù)的值。對話框有取消按鈕,iOS 10.0 及以后可以設(shè)置 LAContext 對象的 localizedCancelTitle 的值來改變?nèi)∠粹o顯示的字。如果指紋認證失敗,對話框還會顯示 fallback 按鈕,可以設(shè)置 LAContext 對象的 localizedFallbackTitle 的值來改變 fallback 按鈕顯示的字。
需要注意,evaluatePolicy 方法的 reply 回調(diào)不在主線程。如果需要更新 UI 的話,要調(diào)用主線程再更新。
代碼示例
代碼已上傳GitHub:https://github.com/Silence-GitHub/TouchIDDemo
在控制器中放置一個 label 顯示認證返回結(jié)果。
指紋認證代碼
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) }
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!
相關(guān)文章
Flutter Widgets粘合劑CustomScrollView NestedScrollVie
這篇文章主要為大家介紹了Flutter Widgets粘合劑CustomScrollView NestedScrollView滾動控件示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11iOS開發(fā)之如何通過PUT請求上傳數(shù)據(jù)
眾所周知一般的服務(wù)器上傳數(shù)據(jù)都是用POST請求,這樣通過AFNetworking的POST請求穩(wěn)穩(wěn)的,但是有一天遇到一個問題,服務(wù)器上傳數(shù)據(jù)用的是PUT請求,發(fā)現(xiàn)用AFNetworking并不是那么好用,下面這篇文章就來講一下如何通過PUT請求上傳數(shù)據(jù)。有需要的朋友們可以參考借鑒。2016-11-11iOS開發(fā)中實現(xiàn)hook消息機制的方法探究
這篇文章主要介紹了iOS開發(fā)中實現(xiàn)hook消息機制的方法探究,這里用到了一個Method Swizzling原理,需要的朋友可以參考下2015-10-10深入學(xué)習(xí)iOS7自定義導(dǎo)航轉(zhuǎn)場動畫
這篇文章主要為大家詳細介紹了iOS7自定義導(dǎo)航轉(zhuǎn)場動畫的相關(guān)資料,感興趣的小伙伴們可以參考一下2016-02-02iOS實時監(jiān)控網(wǎng)絡(luò)狀態(tài)的改變
這篇文章主要為大家詳細介紹了iOS實時監(jiān)控網(wǎng)絡(luò)狀態(tài)的改變的相關(guān)資料,感興趣的小伙伴們可以參考一下2016-08-08iOS開發(fā)技巧之狀態(tài)欄字體顏色的設(shè)置方法
有時候我們需要根據(jù)不同的背景修改狀態(tài)欄字體的顏色,下面這篇文章主要給大家介紹了關(guān)于iOS開發(fā)技巧之狀態(tài)欄字體顏色的設(shè)置方法,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧2018-08-08在iOS應(yīng)用中使用UIWebView創(chuàng)建簡單的網(wǎng)頁瀏覽器界面
這篇文章主要介紹了在iOS應(yīng)用中使用UIWebView創(chuàng)建簡單的網(wǎng)頁瀏覽器界面的方法,包括動態(tài)獲取UIWebView高度的實現(xiàn),需要的朋友可以參考下2016-01-01