現(xiàn)在主要的登錄方式主要有以下幾種:
1:賬號密碼登錄晨汹;
2:指紋登錄;
3:手勢登錄;
4:面部識別讲婚;
5:聲音識別赵哲;
這篇文章就具體說下指紋登錄的實現(xiàn)以及其中的坑嘹狞。功能看起來很簡單,因為蘋果都封裝好了誓竿,只是有幾個需要注意的點磅网;
1.實現(xiàn)
1.1?首先引入指紋解鎖必須的頭文件
#import <?LocalAuthentication/LocalAuthentication.h>
1.2 判斷設備是否支付TouchID方法
-?(BOOL)canEvaluatePolicy:(LAPolicy)policy?error:(NSError?*?__autoreleasing?*)
error?__attribute__((swift_error(none)));
1.3?驗證TouchID方法
-?(void)evaluatePolicy:(LAPolicy)policy
???????localizedReason:(NSString?*)localizedReason
?????????????????reply:(void(^)(BOOLsuccess,?NSError?*?__nullable?error))reply;
1.4 具體實現(xiàn)代碼
? //初始化上下文對象
? ? LAContext* context = [[LAContext alloc] init];
? ? //這個設置的使用密碼的字體,當text=@""時筷屡,按鈕將被隱藏
? ? context.localizedFallbackTitle = @"手動輸入密碼";
? ? //這個設置的取消按鈕的字體
? ? context.localizedCancelTitle = @"取消";
? ? //錯誤對象
? ? NSError* error =nil;
? ? NSString* result = @"需要驗證您的touch ID";
? ? //首先使用canEvaluatePolicy 判斷設備支持狀態(tài)
? ? if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
? //支持指紋驗證
? ? ? ? [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:result reply:^(BOOL success, NSError *error) {
? ? ? ? ? ? if(success) {
? ? ? ? ? ? ? ? //驗證成功涧偷,主線程處理UI
?? ? ? ? ? ? ? ? NSLog(@"驗證成功 刷新主界面");
? ? ? ? ? ? }? ?else? {
? ? ? ? ? ? ? ? NSLog(@"%@",error.localizedDescription);
? ? ? ? ? ? ? ? switch(error.code) {
? ? ? ? ? ? ? ? ? ? caseLAErrorSystemCancel: {
? ? ? ? ? ? ? ? ? ? ? ? NSLog(@"系統(tǒng)取消授權簸喂,如其他APP切入");
? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? caseLAErrorUserCancel: {
? ? ? ? ? ? ? ? ? ? ? ? NSLog(@"用戶取消驗證Touch ID");
? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? case LAErrorAuthenticationFailed: {
? ? ? ? ? ? ? ? ? ? ? ? NSLog(@"授權失敗");
? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? caseLAErrorPasscodeNotSet:? {
? ? ? ? ? ? ? ? ? ? ? ? NSLog(@"系統(tǒng)未設置密碼");
? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? case LAErrorTouchIDNotAvailable:? ?{
? ? ? ? ? ? ? ? ? ? ? ? NSLog(@"設備Touch ID不可用,例如未打開");
? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? case LAErrorTouchIDNotEnrolled: {
? ? ? ? ? ? ? ? ? ? ? ? NSLog(@"設備Touch ID不可用燎潮,用戶未錄入");
? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? caseLAErrorTouchIDLockout: {
? ? ? ? ? ? ? ? ? ? ? ? NSLog(@"用戶錯誤次數(shù)太多喻鳄,現(xiàn)在被鎖住了");
? ? ? ? ? ? ? ? ? ? ? ? [self startTouchIDWithPolicy:LAPolicyDeviceOwnerAuthentication];
? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? caseLAErrorUserFallback: {
? ? ? ? ? ? ? ? ? ? ? ? [[NSOperationQueuemainQueue]addOperationWithBlock:^{
? ? ? ? ? ? ? ? ? ? ? ? ? ? NSLog(@"用戶選擇輸入密碼,切換主線程處理");
? ? ? ? ? ? ? ? ? ? ? ? }];
? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? default: {
? ? ? ? ? ? ? ? ? ? ? ? [[NSOperationQueuemainQueue]addOperationWithBlock:^{
? ? ? ? ? ? ? ? ? ? ? ? ? ? NSLog(@"其他情況确封,切換主線程處理");
? ? ? ? ? ? ? ? ? ? ? ? }];
? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }];
? ? } else {
? ? ? ? //不支持指紋識別除呵,LOG出錯誤詳情
? ? ? ? switch(error.code) {
? ? ? ? ? ? case LAErrorTouchIDNotEnrolled: {
? ? ? ? ? ? ? ? NSLog(@"TouchID is not enrolled");
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? ? ? case LAErrorPasscodeNotSet:{
? ? ? ? ? ? ? ? NSLog(@"A passcode has not been set");
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? ? ? default: {
? ? ? ? ? ? ? ? NSLog(@"TouchID not available");
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? NSLog(@"%@",error.localizedDescription);
? ? }
2.注意事項
2.1?localizedFallbackTitle
localizedFallbackTitle只有第一次指紋輸入錯誤后才會顯示出來。
2.2 ?LAPolicy
在這里簡單介紹一下LAPolicy,它是一個枚舉.我們根據(jù)自己的需要選擇LAPolicy爪喘,它提供兩個值:
LAPolicyDeviceOwnerAuthenticationWithBiometrics和LAPolicyDeviceOwnerAuthentication.
<1>. LAPolicyDeviceOwnerAuthenticationWithBiometrics是支持iOS8以上系統(tǒng),使用該設備的TouchID進行驗證,當輸入TouchID驗證5次失敗后,TouchID被鎖定,只能通過鎖屏后解鎖設備時輸入正確的解鎖密碼來解鎖TouchID颜曾。
<2>.LAPolicyDeviceOwnerAuthentication是支持iOS9以上系統(tǒng),使用該設備的TouchID或設備密碼進行驗證,當輸入TouchID驗證3次失敗后秉剑,會觸發(fā)設備密碼頁面進行驗證泛豪,此時點擊取消可以繼續(xù)進行TouchID驗證,不過此次只有2次機會侦鹏,驗證失敗后诡曙,TouchID被鎖定,觸發(fā)設備密碼頁面進行驗證略水。
* 但是使用LAPolicyDeviceOwnerAuthentication點擊手動輸入密碼按鈕也會觸發(fā)設備密碼頁面价卤,不會回調(diào)evaluatePolicy里面的方法。