iOS指紋登錄(TouchID)集成方案詳解
TouchID指紋識別是iPhone 5S設(shè)備中增加的一項(xiàng)重大功能.蘋果的后續(xù)移動設(shè)備也相繼添加了指紋功能,在實(shí)際使用中還是相當(dāng)方便的,比如快捷登錄,快捷支付等等.系統(tǒng)提供了相應(yīng)框架,使用起來還是比較方便的.使用LAContext對象即可完成指紋識別,提高用戶體驗(yàn).
提示:指紋識別必須用真機(jī)測試,并且在iOS8以上系統(tǒng).
TouchID API使用
1.添加頭文件
#import
2.判斷系統(tǒng)版本
//首先判斷版本 if (NSFoundationVersionNumber < NSFoundationVersionNumber_iOS_8_0) { NSLog(@"系統(tǒng)版本不支持TouchID"); return; }
3.LAPolicy
在這里簡單介紹一下LAPolicy,它是一個(gè)枚舉.我們根據(jù)自己的需要選擇LAPolicy,它提供兩個(gè)值:
LAPolicyDeviceOwnerAuthenticationWithBiometrics和LAPolicyDeviceOwnerAuthentication.
<1>. LAPolicyDeviceOwnerAuthenticationWithBiometrics是支持iOS8以上系統(tǒng),使用該設(shè)備的TouchID進(jìn)行驗(yàn)證,當(dāng)輸入TouchID驗(yàn)證5次失敗后,TouchID被鎖定,只能通過鎖屏后解鎖設(shè)備時(shí)輸入正確的解鎖密碼來解鎖TouchID。
<2>.LAPolicyDeviceOwnerAuthentication是支持iOS9以上系統(tǒng),使用該設(shè)備的TouchID或設(shè)備密碼進(jìn)行驗(yàn)證,當(dāng)輸入TouchID驗(yàn)證5次失敗后,TouchID被鎖定,會觸發(fā)設(shè)備密碼頁面進(jìn)行驗(yàn)證。
4. canEvaluatePolicy
使用canEvaluatePolicy方法判斷設(shè)備是否支持TouchID,返回BOOL為YES,該設(shè)備支持TouchID。
if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
error為返回驗(yàn)證錯誤碼.具體不解釋了.
5. evaluatedPolicyDomainState
context.evaluatedPolicyDomainState用于判斷設(shè)備上的指紋是否被更改,在LAContext被創(chuàng)建的時(shí)候,evaluatedPolicyDomainState才生效,可在TouchID驗(yàn)證成功時(shí),將它記錄下來,用于下次使用TouchID時(shí)校驗(yàn),提高安全性。
6. evaluatePolicy
evaluatePolicy方法是對TouchID進(jìn)行驗(yàn)證,Block回調(diào)中如果success為YES則驗(yàn)證成功,為NO驗(yàn)證失敗,并對error進(jìn)行解析.
- (IBAction)loginButtonClick:(UIButton *)sender { //首先判斷版本 if (NSFoundationVersionNumber < NSFoundationVersionNumber_iOS_8_0) { NSLog(@"系統(tǒng)版本不支持TouchID"); return; } LAContext *context = [[LAContext alloc] init]; context.localizedFallbackTitle = @"輸入密碼"; if (@available(iOS 10.0, *)) { // context.localizedCancelTitle = @"22222"; } else { // Fallback on earlier versions } NSError *error = nil; if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) { [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"通過Home鍵驗(yàn)證已有手機(jī)指紋" reply:^(BOOL success, NSError * _Nullable error) { if (success) { dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"TouchID 驗(yàn)證成功"); }); }else if(error){ switch (error.code) { case LAErrorAuthenticationFailed:{ dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"TouchID 驗(yàn)證失敗"); }); break; } case LAErrorUserCancel:{ dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"TouchID 被用戶手動取消"); }); } break; case LAErrorUserFallback:{ dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"用戶不使用TouchID,選擇手動輸入密碼"); }); } break; case LAErrorSystemCancel:{ dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"TouchID 被系統(tǒng)取消 (如遇到來電,鎖屏,按了Home鍵等)"); }); } break; case LAErrorPasscodeNotSet:{ dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"TouchID 無法啟動,因?yàn)橛脩魶]有設(shè)置密碼"); }); } break; case LAErrorTouchIDNotEnrolled:{ dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"TouchID 無法啟動,因?yàn)橛脩魶]有設(shè)置TouchID"); }); } break; case LAErrorTouchIDNotAvailable:{ dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"TouchID 無效"); }); } break; case LAErrorTouchIDLockout:{ dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"TouchID 被鎖定(連續(xù)多次驗(yàn)證TouchID失敗,系統(tǒng)需要用戶手動輸入密碼)"); }); } break; case LAErrorAppCancel:{ dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"當(dāng)前軟件被掛起并取消了授權(quán) (如App進(jìn)入了后臺等)"); }); } break; case LAErrorInvalidContext:{ dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"當(dāng)前軟件被掛起并取消了授權(quán) (LAContext對象無效)"); }); } break; default: break; } } }]; }else{ NSLog(@"當(dāng)前設(shè)備不支持TouchID"); } }
上面這個(gè)代碼, 是整個(gè)TouchID的核心,也幾乎是所有代碼了.
驗(yàn)證
驗(yàn)證必須使用真機(jī)
結(jié)果
輸入錯誤的時(shí)候
總結(jié):TouchID使用起來不難,重要的是使用流程邏輯.
以登錄為例,一般來說流程是這樣的:
- 開啟指紋登錄:首次登陸使用密碼登錄,登錄后,可以設(shè)置一個(gè)開啟指紋ID登錄的按鈕,來進(jìn)行指紋認(rèn)證.
- 驗(yàn)證:檢測是否支持TouchID.
- 生成設(shè)備賬號/密碼:TouchID驗(yàn)證通過后,根據(jù)當(dāng)前已登錄的賬號和硬件設(shè)備Token,生成設(shè)備賬號/密碼(規(guī)則可自定,密碼要長要復(fù)雜),并保存在keychain;
- 綁定:生成設(shè)備賬號/密碼后,將原賬號及設(shè)備賬號/密碼,加密后(題主使用的是RSA加密)發(fā)送到服務(wù)端進(jìn)行綁定;
- 成功:驗(yàn)證原賬號及設(shè)備賬號有效后,返回相應(yīng)狀態(tài),綁定成功則完成整個(gè)TouchID(設(shè)備)綁定流程。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
iOS Xcode8更新后輸出log日志關(guān)閉的方法
今天剛把xcode更新到了xcode8,運(yùn)行發(fā)現(xiàn)好多l(xiāng)og輸出,怎么關(guān)閉呢,不是很清楚,通過查閱相關(guān)資料順利關(guān)掉這些log日志,下面小編把方法共享下,需要的朋友參考下2016-09-09iOS開發(fā)教程之Status Bar狀態(tài)欄設(shè)置的方法匯總
iOS 的 Status Bar 狀態(tài)欄是一個(gè)比較坑的地方,所以下面這篇文章主要給大家介紹了關(guān)于iOS開發(fā)教程之Status Bar狀態(tài)欄設(shè)置的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-08-08IOS實(shí)戰(zhàn)之自定義轉(zhuǎn)場動畫詳解
這篇文章主要介紹了IOS實(shí)戰(zhàn)之自定義轉(zhuǎn)場動畫,CAAnimation的子類,用于做轉(zhuǎn)場動畫,能夠?yàn)閷犹峁┮瞥銎聊缓鸵迫肫聊坏膭赢嬓Ч?,感興趣的小伙伴們可以參考一下2016-02-02searchDisplayController 引起的數(shù)組越界處理辦法
這篇文章主要介紹了searchDisplayController 引起的數(shù)組越界處理辦法,需要的朋友可以參考下2015-07-07iOS實(shí)現(xiàn)點(diǎn)擊微信頭像(放大、縮放、保存)效果
最近公司產(chǎn)品需要實(shí)現(xiàn)點(diǎn)擊個(gè)人主頁頭像可以放大頭像、縮放頭像、保存頭像效果(和點(diǎn)擊微信個(gè)人頭像類似),故找個(gè)時(shí)間實(shí)現(xiàn)一下,記錄下來,供自己查看也給有需要的大家做個(gè)參考。下面來一起看看吧。2017-03-03IOS 聊天界面(自適應(yīng)文字)的實(shí)現(xiàn)
本文主要介紹一個(gè)實(shí)現(xiàn)聊天界面的思路過程,具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-03-03iOS WKWebView無法處理URL Scheme和App Store鏈接的問題解決
這篇文章主要給大家介紹了關(guān)于iOS WKWebView無法處理URL Scheme和App Store鏈接的問題解決的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-03-03iOS中關(guān)于模塊化開發(fā)解決方案(純干貨)
這篇文章主要介紹了iOS中關(guān)于模塊化開發(fā)解決方案(純干貨)的相關(guān)資料,非常不錯,具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09