當前位置:
首頁 > 最新 > iOS 指紋登錄集成方案

iOS 指紋登錄集成方案

TouchID指紋識別是iPhone 5S設備中增加的一項重大功能.蘋果的後續移動設備也相繼添加了指紋功能,在實際使用中還是相當方便的,比如快捷登錄,快捷支付等等.系統提供了相應框架,使用起來還是比較方便的.使用LAContext對象即可完成指紋識別,提高用戶體驗.

TouchID

提示:指紋識別必須用真機測試,並且在iOS8以上系統.

TouchID API使用

1.添加頭文件

#import

2.判斷系統版本

//首先判斷版本

if(NSFoundationVersionNumber

NSLog(@"系統版本不支持TouchID");

return;

}

3.LAPolicy

在這裡簡單介紹一下LAPolicy,它是一個枚舉.我們根據自己的需要選擇LAPolicy,它提供兩個值:

LAPolicyDeviceOwnerAuthenticationWithBiometrics和LAPolicyDeviceOwnerAuthentication.

. LAPolicyDeviceOwnerAuthenticationWithBiometrics是支持iOS8以上系統,使用該設備的TouchID進行驗證,當輸入TouchID驗證5次失敗後,TouchID被鎖定,只能通過鎖屏後解鎖設備時輸入正確的解鎖密碼來解鎖TouchID。

.LAPolicyDeviceOwnerAuthentication是支持iOS9以上系統,使用該設備的TouchID或設備密碼進行驗證,當輸入TouchID驗證5次失敗後,TouchID被鎖定,會觸發設備密碼頁面進行驗證。

4. canEvaluatePolicy

使用canEvaluatePolicy方法判斷設備是否支持TouchID,返回BOOL為YES,該設備支持TouchID。

if([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometricserror:&error]) {

error為返回驗證錯誤碼.具體不解釋了.

5. evaluatedPolicyDomainState

context.evaluatedPolicyDomainState用於判斷設備上的指紋是否被更改,在LAContext被創建的時候,evaluatedPolicyDomainState才生效,可在TouchID驗證成功時,將它記錄下來,用於下次使用TouchID時校驗,提高安全性。

6. evaluatePolicy

evaluatePolicy方法是對TouchID進行驗證,Block回調中如果success為YES則驗證成功,為NO驗證失敗,並對error進行解析.

- (IBAction)loginButtonClick:(UIButton*)sender {

//首先判斷版本

if(NSFoundationVersionNumber

NSLog(@"系統版本不支持TouchID");

return;

}

LAContext *context = [[LAContext alloc] init];

context.localizedFallbackTitle =@"輸入密碼";

if(@available(iOS10.0, *)) {

// context.localizedCancelTitle = @"22222";

}else{

// Fallback on earlier versions

}

NSError*error =nil;

if([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {

[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"通過Home鍵驗證已有手機指紋"reply:^(BOOLsuccess,NSError* _Nullable error) {

if(success) {

dispatch_async(dispatch_get_main_queue(), ^{

NSLog(@"TouchID 驗證成功");

});

}elseif(error){

switch(error.code) {

caseLAErrorAuthenticationFailed:{

dispatch_async(dispatch_get_main_queue(), ^{

NSLog(@"TouchID 驗證失敗");

});

break;

}

caseLAErrorUserCancel:{

dispatch_async(dispatch_get_main_queue(), ^{

NSLog(@"TouchID 被用戶手動取消");

});

}

break;

caseLAErrorUserFallback:{

dispatch_async(dispatch_get_main_queue(), ^{

NSLog(@"用戶不使用TouchID,選擇手動輸入密碼");

});

}

break;

caseLAErrorSystemCancel:{

dispatch_async(dispatch_get_main_queue(), ^{

NSLog(@"TouchID 被系統取消 (如遇到來電,鎖屏,按了Home鍵等)");

});

}

break;

caseLAErrorPasscodeNotSet:{

dispatch_async(dispatch_get_main_queue(), ^{

NSLog(@"TouchID 無法啟動,因為用戶沒有設置密碼");

});

}

break;

caseLAErrorTouchIDNotEnrolled:{

dispatch_async(dispatch_get_main_queue(), ^{

NSLog(@"TouchID 無法啟動,因為用戶沒有設置TouchID");

});

}

break;

caseLAErrorTouchIDNotAvailable:{

dispatch_async(dispatch_get_main_queue(), ^{

NSLog(@"TouchID 無效");

});

}

break;

caseLAErrorTouchIDLockout:{

dispatch_async(dispatch_get_main_queue(), ^{

NSLog(@"TouchID 被鎖定(連續多次驗證TouchID失敗,系統需要用戶手動輸入密碼)");

});

}

break;

caseLAErrorAppCancel:{

dispatch_async(dispatch_get_main_queue(), ^{

NSLog(@"當前軟體被掛起並取消了授權 (如App進入了後台等)");

});

}

break;

caseLAErrorInvalidContext:{

dispatch_async(dispatch_get_main_queue(), ^{

NSLog(@"當前軟體被掛起並取消了授權 (LAContext對象無效)");

});

}

break;

default:

break;

}

}

}];

}else{

NSLog(@"當前設備不支持TouchID");

}

}

上面這個代碼, 是整個TouchID的核心,也幾乎是所有代碼了.

驗證

驗證必須使用真機

結果

輸入錯誤的時候

總結:TouchID使用起來不難,重要的是使用流程邏輯.

以登錄為例,一般來說流程是這樣的:

1.開啟指紋登錄:首次登陸使用密碼登錄,登錄後,可以設置一個開啟指紋ID登錄的按鈕,來進行指紋認證.

2.驗證:檢測是否支持TouchID.

3.生成設備賬號/密碼:TouchID驗證通過後,根據當前已登錄的賬號和硬體設備Token,生成設備賬號/密碼(規則可自定,密碼要長要複雜),並保存在keychain;

4.綁定:生成設備賬號/密碼後,將原賬號及設備賬號/密碼,加密後(題主使用的是RSA加密)發送到服務端進行綁定;

5.成功:驗證原賬號及設備賬號有效後,返回相應狀態,綁定成功則完成整個TouchID(設備)綁定流程。

作者:iOS_xuanhe

鏈接:https://www.jianshu.com/p/9990b0f48488


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Cocoa開發者社區 的精彩文章:

WWDC 18:開發者的最初觀感
10條Swift小提示

TAG:Cocoa開發者社區 |