亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Swift > 正文

Swift利用指紋識別或面部識別為應用添加私密保護功能

2020-03-09 17:41:54
字體:
來源:轉載
供稿:網友

前言

從最初做應用開始,我就密切關注用戶的反饋和評論。有時他們的要求確實并不合理,但當大多數人提到一項功能時,就該我們做產品的人反思了。 私密保護功能是用戶在評論中提到的,恰好像OneDay這樣比較私密的內容確實可以增加這項功能。

指紋識別和面部識別雖然是兩個很不相同的交互,但從開發的角度他們卻只需要一套代碼就可以搞定。在做之前我先解釋下整個實現過程的重要環節:

swift,指紋識別,人臉識別,應用

原理圖

1.我們需要一個數據來保存開關數據,在設置中心,用戶根據喜好選擇是否開啟保護

2.一旦用戶打開應用,通過判斷是否保護來加載遮擋頁面

3.在遮擋頁面自動實現解鎖過程,同時用戶也可以點擊后解鎖

4.根據機型的不同,在設置中心需要顯示不同的解鎖名稱

一、基礎配置工作

實現指紋識別與面部識別,都是通過添加LocalAuthentication Framework來實現的。

導入LocalAuthentication Framework

之后在需要用到認證的頁面,導入LocalAuthentication即可:

import LocalAuthentication

二、遮蓋頁創建與設置中心開關創建

在設置中心增加一欄開關,暫且叫做Touch ID,最后會進行標題文字的修復。 創建一個單獨的遮蓋頁,只需要放置一句話及按鈕即可,按鈕將調用認證過程,文件為LockViewContrller.swift/292074.html">swift/269454.html">swift。

swift,指紋識別,人臉識別,應用

為了方便調用,給遮蓋頁設置了StoryBoard ID為LockController。

swift,指紋識別,人臉識別,應用

四、設置中心實現數據的修改

利用CoreData將開關的數據存儲在ifProtect中,0表示開,1表示關。 設置數據的過程不會像其他數據那樣直接改變,必須判斷是否為用戶本人進行開關。所以在SettingViewController.swift中,需要添加認證的相關函數。

1.先導入LocalAuthentication:

import LocalAuthentication

2.操作函數:

func touchID(){  let context = LAContext()  var error: NSError?  if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) {   // 開始進入識別狀態,以閉包形式返回結果。閉包的 success 是布爾值,代表識別成功與否。error 為錯誤信息。   context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: "請用指紋解鎖", reply: {success, error in    if success {     // 成功之后的邏輯, 通常使用多線程來實現跳轉邏輯。     print("解鎖成功 success,允許設置")     if self.appDelegate.mysetting.ifProtect == Int64(1){      self.appDelegate.mysetting.ifProtect = Int64(0)     }else{      self.appDelegate.mysetting.ifProtect = Int64(1)     }     self.appDelegate.saveContext()    }else {     if let error = error as? NSError {      // 獲取錯誤信息      let message = self.errorMessageForLAErrorCode(errorCode: error.code)      print(message)     }     //失敗之后     print("失敗了")    }    self.SettingTableView.reloadData()   })  } }

當是用戶本人且認證成功時,開關數據被改變;當不是用戶本人或認證不成功,開關數據不會改變。 為了保持頁面與數據統一,函數執行后我們需要刷新頁面self.SettingTableView.reloadData() 。

3.獲取錯誤情況:

func errorMessageForLAErrorCode(errorCode: Int) -> String {  var message = ""  switch errorCode {  case LAError.appCancel.rawValue:   message = "Authentication was cancelled by application"  case LAError.authenticationFailed.rawValue:   message = "The user failed to provide valid credentials"  case LAError.invalidContext.rawValue:   message = "The context is invalid"  case LAError.passcodeNotSet.rawValue:   message = "Passcode is not set on the device"  case LAError.systemCancel.rawValue:   message = "Authentication was cancelled by the system"  case LAError.touchIDLockout.rawValue:   message = "Too many failed attempts."  case LAError.touchIDNotAvailable.rawValue:   message = "TouchID is not available on the device"   //   showPassWordInput()  case LAError.userCancel.rawValue:   message = "The user did cancel"  case LAError.userFallback.rawValue:   message = "The user chose to use the fallback"  default:   message = "Did not find error code on LAError object"  }  return message }

swift,指紋識別,人臉識別,應用

五、首頁加載遮蓋頁

來到首頁HomeViewController,在viewDidLoad中加入下面代碼,來判斷每一次打開應用是否需要認證解鎖。 如果不需要,首頁可以正常顯示; 如果需要,將直接跳轉到LockController。

if self.appDelegate.mysetting.ifProtect == Int64(1){ print(self.appDelegate.mysetting.ifProtect) print("需要解鎖")  if let lockVC = storyboard?.instantiateViewController(withIdentifier: "LockController") as? LockViewController {   self.present(lockVC,animated: false,completion: nil)  }else{  } }else{ print("不需要解鎖")}

六、在遮蓋頁中實現認證

遮蓋頁LockController的背景通過虛化處理,可以到達遮蓋的目的。同時擁有認證函數,當認證成功后頁面自動消失返回首頁。 因為需要認證過程,因此也需要三個核心步驟。

1.導入LocalAuthentication:

import LocalAuthentication

2.操作函數:

func touchID(){ let context = LAContext() var error: NSError? if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) {  // 開始進入識別狀態,以閉包形式返回結果。閉包的 success 是布爾值,代表識別成功與否。error 為錯誤信息。  context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: "請用指紋解鎖", reply: {success, error in   if success {    // 成功之后的邏輯, 通常使用多線程來實現跳轉邏輯。    print("解鎖成功 success")    self.dismiss(animated: true, completion: nil)   }else {    if let error = error as? NSError {     // 獲取錯誤信息     let message = self.errorMessageForLAErrorCode(errorCode: error.code)     print(message)    }    //失敗之后    print("失敗了")   }  }) }}

認證過程成功后,頁面會自動消失:self.dismiss(animated: true, completion: nil)

3.當用戶進入頁面時自動調取認證過程:

override func viewWillAppear(_ animated: Bool) {  touchID()}

4.或者通過手動點擊開始認證:

@IBAction func AuthenAction(_ sender: Any) {  touchID()}

5.捕獲錯誤跟設置頁面一樣。

swift,指紋識別,人臉識別,應用

七、根據屏幕尺寸修改開關標題

最后,我們來修復設置中心按鈕的標題文字。當判斷手機為iPhone X時,文字顯示為“面部識別”或“Touch ID”;當不是iPhone X時,顯示為“指紋識別”或“Touch ID”。這里我們用到了UIDevice來獲取了屏幕的高度:

if UIDevice().userInterfaceIdiom == .phone && UIScreen.main.nativeBounds.height == 2436 { cell.SwitchTitle.text = "Face ID" cell.SwitchImage.image = UIImage(named: "btn_setting_faceid")?.withRenderingMode(.alwaysTemplate)}else{ cell.SwitchTitle.text = "Touch ID" cell.SwitchImage.image = UIImage(named: "btn_setting_touchid")?.withRenderingMode(.alwaysTemplate)}

以上的過程便可實現私密保護,不過不會像系統解鎖那樣可以通過密碼解鎖。要實現密碼解鎖,還需要單獨開發該功能。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到swift教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品美女久久久久av超清| 亚洲欧洲在线免费| 欧美极品少妇xxxxⅹ免费视频| 午夜免费日韩视频| 777午夜精品福利在线观看| 国产美女久久精品| 欧美成人自拍视频| 日韩av网站大全| 91天堂在线视频| 97在线视频免费| 亚洲精品资源美女情侣酒店| 7m精品福利视频导航| 国产人妖伪娘一区91| 日韩中文字幕免费视频| 久久久久久久影院| 亚洲性线免费观看视频成熟| 久久久免费电影| 久久精品久久久久电影| 国产成人精品久久| 欧美黑人巨大xxx极品| 亚洲成人a级网| 亚洲国产福利在线| 播播国产欧美激情| 久久久久久久久久久久久久久久久久av| 国产精品吴梦梦| 国产综合香蕉五月婷在线| 欧美精品一区二区三区国产精品| 中文字幕在线观看日韩| 成人黄色免费看| 欧美性生交xxxxx久久久| 色综合亚洲精品激情狠狠| 亚洲片在线资源| 国语自产精品视频在线看抢先版图片| 国产精品久久久久久久久久ktv| 午夜精品www| 午夜精品久久久99热福利| 国产一区二区丝袜| 国内精品在线一区| 青草青草久热精品视频在线网站| 亚洲bt欧美bt日本bt| 欧美精品video| 麻豆国产va免费精品高清在线| 日韩欧美aⅴ综合网站发布| 最近中文字幕mv在线一区二区三区四区| 98视频在线噜噜噜国产| 亚洲美女av在线| 成人天堂噜噜噜| 中文字幕精品—区二区| 亚洲男人的天堂在线| 亚洲最大福利网站| 蜜臀久久99精品久久久久久宅男| 国产综合在线观看视频| 欧美做爰性生交视频| 国产精品三级久久久久久电影| 国产不卡视频在线| 亚洲天堂av女优| 亚洲最新中文字幕| 欧美日韩另类在线| 成人黄色av网| 国产精品十八以下禁看| 日韩美女免费视频| 国产精品丝袜久久久久久高清| 好吊成人免视频| 国产脚交av在线一区二区| 性色av香蕉一区二区| 久久精品影视伊人网| 日韩中文字幕av| 成人精品网站在线观看| 超碰日本道色综合久久综合| 精品日本高清在线播放| 韩国19禁主播vip福利视频| 欧洲精品毛片网站| 欧美性xxxx极品hd欧美风情| 亚洲免费成人av电影| 精品日韩视频在线观看| 久久精品视频在线播放| 黄色91在线观看| 综合网中文字幕| 亚洲男人天堂视频| 日韩av快播网址| 亚洲性视频网址| 狠狠综合久久av一区二区小说| 久久人人爽国产| 视频在线观看一区二区| 亚洲男人天堂2019| 欧美成人性生活| 亚洲国产古装精品网站| 久久久久成人精品| 国产精品免费观看在线| 日韩经典第一页| 欧美一级视频免费在线观看| 欧美激情女人20p| 亚洲激情在线观看视频免费| 久久夜色精品亚洲噜噜国产mv| 国产精品入口尤物| 国产精品7m视频| 成人在线视频网| 欧美性生活大片免费观看网址| 日本精品一区二区三区在线播放视频| 国产亚洲精品激情久久| 国产视频久久久| 日韩中文综合网| 国产激情综合五月久久| 久久精品视频网站| 欧美电影免费观看高清完整| 欧美激情一区二区三区久久久| 国产精品老牛影院在线观看| 午夜精品一区二区三区视频免费看| 日韩欧美一区二区三区久久| 成人亚洲欧美一区二区三区| 日本欧美爱爱爱| 欧美色欧美亚洲高清在线视频| 91精品国产综合久久香蕉| 国产精品678| 午夜精品一区二区三区在线视| 国产亚洲一级高清| 日韩高清免费观看| 国产精品www| 成人性生交xxxxx网站| 亚洲天堂影视av| 欧美日韩国产精品专区| 亚洲欧美在线第一页| 国产精品一香蕉国产线看观看| 日韩中文字幕精品| www.久久草.com| 久久久久久一区二区三区| 国产精品久久久久久久午夜| 一本色道久久88综合日韩精品| 亚洲欧美成人一区二区在线电影| 亚洲一区二区三区乱码aⅴ| 久久亚洲一区二区三区四区五区高| 91免费高清视频| 91亚洲午夜在线| 欧美亚洲视频在线观看| 国产亚洲精品成人av久久ww| 国产日韩精品在线观看| 精品亚洲永久免费精品| 亚洲偷熟乱区亚洲香蕉av| 亚洲精品不卡在线| 中文字幕亚洲第一| 91精品国产91久久久久久久久| 亚洲精品视频免费在线观看| 91丝袜美腿美女视频网站| 亚洲精品日韩激情在线电影| 97婷婷涩涩精品一区| 成人网在线免费看| 97国产真实伦对白精彩视频8| 97视频国产在线| 97国产真实伦对白精彩视频8| 欧洲成人午夜免费大片| 热久久这里只有| 欧美一区二区三区……| 国产婷婷97碰碰久久人人蜜臀| 国产精品久久综合av爱欲tv| 欧美日韩性生活视频| 久久艹在线视频| 亚洲伊人一本大道中文字幕| 亚洲欧美国产一本综合首页| 欧美电影免费观看电视剧大全| 午夜精品久久久久久久99热| 亚洲精品第一国产综合精品| 国产精品视频yy9099| 欧美国产日产韩国视频| 久久国产精品99国产精|