iOS 使用Touch ID 校验[新增 iOS9 三种错误]
iOS8后蘋果開放了Touch ID的API給開發(fā)者,這也給我們的app帶來了新的體驗(yàn)。開發(fā)者們可使用向第三方應(yīng)用開放了Touch ID權(quán)限的API,以便他們?cè)趹?yīng)用中使用指紋認(rèn)證來完成用戶認(rèn)證或支付購(gòu)買。本文主要介紹如何在應(yīng)用中集成Touch ID來校驗(yàn)用戶的身份和注意事項(xiàng)。
支持系統(tǒng)和機(jī)型
iOS系統(tǒng)的指紋識(shí)別功能最低支持的機(jī)型為iPhone 5s,最低支持系統(tǒng)為iOS 8,雖然安裝iOS 7系統(tǒng)的5s機(jī)型可以使用系統(tǒng)提供的指紋解鎖功能,但由于API并未開放,所以理論上第三方軟件不可使用。
依賴框架
在使用前我們需要導(dǎo)入?LocalAuthentication.framework?這個(gè)庫(kù)
這個(gè)庫(kù)必須要Xcode6并且連接的是真機(jī),才不會(huì)提示找不到的錯(cuò)誤。 如果是模擬器會(huì)提示找不到這個(gè)庫(kù)。
注意事項(xiàng)
做iOS 8以下版本適配時(shí),務(wù)必進(jìn)行API驗(yàn)證,避免調(diào)用相關(guān)API引起崩潰。
使用類
LAContext?指紋驗(yàn)證操作對(duì)象
代碼
- (void)authenticateButtonTapped{LAContext *context = [[LAContext alloc] init];context.localizedFallbackTitle = @"輸入密碼";NSError *error = nil;if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometricslocalizedReason:@"您是這設(shè)備的所有者嗎?"reply:^(BOOL success, NSError *error) {if (success) {dispatch_async (dispatch_get_main_queue(), ^{//在主線程更新 UI,不然會(huì)卡主UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Success"message:@"你是設(shè)備主人。"delegate:nilcancelButtonTitle:@"Ok"otherButtonTitles:nil];[alert show];});}else{/*// 用戶未提供有效證書,(3次機(jī)會(huì)失敗 --身份驗(yàn)證失敗)。LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed,// 認(rèn)證被取消,(用戶點(diǎn)擊取消按鈕)。LAErrorUserCancel = kLAErrorUserCancel,// 認(rèn)證被取消,用戶點(diǎn)擊回退按鈕(輸入密碼)。LAErrorUserFallback = kLAErrorUserFallback,// 身份驗(yàn)證被系統(tǒng)取消,(比如另一個(gè)應(yīng)用程序去前臺(tái),切換到其他 APP)。LAErrorSystemCancel = kLAErrorSystemCancel,// 身份驗(yàn)證無法啟動(dòng),因?yàn)槊艽a在設(shè)備上沒有設(shè)置。LAErrorPasscodeNotSet = kLAErrorPasscodeNotSet,// 身份驗(yàn)證無法啟動(dòng),因?yàn)橛|摸ID在設(shè)備上不可用。LAErrorTouchIDNotAvailable = kLAErrorTouchIDNotAvailable,// 身份驗(yàn)證無法啟動(dòng),因?yàn)闆]有登記的手指觸摸ID。 沒有設(shè)置指紋密碼時(shí)。LAErrorTouchIDNotEnrolled = kLAErrorTouchIDNotEnrolled,**/switch (error.code) {case LAErrorAuthenticationFailed:NSLog(@"身份驗(yàn)證失敗。");break;case LAErrorUserCancel:NSLog(@"用戶點(diǎn)擊取消按鈕。");break;case LAErrorUserFallback:{NSLog(@"用戶點(diǎn)擊輸入密碼。");[[NSOperationQueue mainQueue] addOperationWithBlock:^{//用戶選擇輸入密碼,切換主線程處理 }];break;}case LAErrorSystemCancel:NSLog(@"另一個(gè)應(yīng)用程序去前臺(tái)");break;case LAErrorPasscodeNotSet:NSLog(@"密碼在設(shè)備上沒有設(shè)置");break;case LAErrorTouchIDNotAvailable:NSLog(@"觸摸ID在設(shè)備上不可用");break;case LAErrorTouchIDNotEnrolled:NSLog(@"沒有登記的手指觸摸ID。");break;default:{NSLog(@"Touch ID沒配置");[[NSOperationQueue mainQueue] addOperationWithBlock:^{//其他情況,切換主線程處理 }];break;}}}}];} else {dispatch_async (dispatch_get_main_queue(), ^{UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"錯(cuò)誤提示"message:@"您的設(shè)備沒有觸摸ID."delegate:nilcancelButtonTitle:@"Ok"otherButtonTitles:nil];[alert show];});} }其中:
(1)localizedFallbackTitle:用于設(shè)置左邊的按鈕的名稱,默認(rèn)是輸入密碼。
(2)localizedReason:用于設(shè)置提示語(yǔ),表示為什么要使用Touch ID,如代碼中@"您是這設(shè)備的所有者嗎?"。
操作流程
首先判斷系統(tǒng)版本,iOS8及以上版本執(zhí)行-(void)authenticateButtonTapped方法,方法自動(dòng)判斷設(shè)備是否支持和開啟Touch ID。
iOS 9
iOS 9加入了三種新的錯(cuò)誤類型。
/// Authentication was not successful, because there were too many failed Touch ID attempts and/// Touch ID is now locked. Passcode is required to unlock Touch ID, e.g. evaluating/// LAPolicyDeviceOwnerAuthenticationWithBiometrics will ask for passcode as a prerequisite.LAErrorTouchIDLockout NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorTouchIDLockout,/// Authentication was canceled by application (e.g. invalidate was called while/// authentication was in progress).LAErrorAppCancel NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorAppCancel,/// LAContext passed to this call has been previously invalidated.LAErrorInvalidContext NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorInvalidContext其中,
LAErrorTouchIDLockout是在8.0中也會(huì)出現(xiàn)的情況,但并未歸為單獨(dú)的錯(cuò)誤類型,這個(gè)錯(cuò)誤出現(xiàn),源自用戶多次連續(xù)使用Touch ID失敗,Touch ID被鎖,需要用戶輸入密碼解鎖,這個(gè)錯(cuò)誤的交互LocalAuthentication.framework已經(jīng)封裝好了,不需要開發(fā)者關(guān)心。
LAErrorAppCancel和LAErrorSystemCancel相似,都是當(dāng)前軟件被掛起取消了授權(quán),但是前者是用戶不能控制的掛起,例如突然來了電話,電話應(yīng)用進(jìn)入前臺(tái),APP被掛起。后者是用戶自己切到了別的應(yīng)用,例如按home鍵掛起。
LAErrorInvalidContext很好理解,就是授權(quán)過程中,LAContext對(duì)象被釋放掉了,造成的授權(quán)失敗
?
官方文檔就是這么短短幾句話!!!
?
轉(zhuǎn)載于:https://www.cnblogs.com/zhangyang17/p/4221746.html
總結(jié)
以上是生活随笔為你收集整理的iOS 使用Touch ID 校验[新增 iOS9 三种错误]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 试解析Tomcat运行原理(一)---
- 下一篇: 消除软硬件鸿沟,芯客网完美支持智能硬件在