iOS 指紋驗證(Touch ID)

iOS 指紋驗證(Touch ID)

iOS的指紋識別是一個非常簡單的api系統(tǒng)已經(jīng)封好了,直接調(diào)起就行,非常簡單,蘋果的一貫作風(fēng),我們除了結(jié)果什么也拿不到,就一個bool結(jié)果和一個error,這里給一些比較懶的同學(xué)貼一下代碼

指紋驗證
   //初始化上下文對象
   LAContext* context = [LAContext new];
   
   NSError* error = nil;
   NSString* result = @"通過Home鍵驗證已有手機指紋";
   
   
   /*
    密碼驗證:
    LAPolicyDeviceOwnerAuthentication  手機數(shù)字密碼
    LAPolicyDeviceOwnerAuthenticationWithBiometrics  手機指紋密碼
    */
   
   if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error])
   {
       [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:result reply:^(BOOL success, NSError *error){
           if (success)
           {
               //識別是在子線程中進行的,這里如果用到UI操作就要到主線程進行操作
               NSLog(@"當(dāng)前線程:%@",[NSThread currentThread]);
               dispatch_async(dispatch_get_main_queue(), ^{
                   NSLog(@"當(dāng)前線程:%@",[NSThread currentThread]);
                   [self showMessage:@"驗證成功!"];
               });
           }
           else
           {
               [self TouchIDResult:error.code];
           }
       }];
   }
   else
   {
       [self TouchIDResult:error.code];
   }

這里需要注意一下:

  1. 驗證類型有2種:一種是系統(tǒng)的密碼(touchid被鎖時需要調(diào)用),一種是指紋
  2. 系統(tǒng)的密碼驗證和指紋識別實在子線程中進行的,我們在結(jié)果block的回調(diào)中如果要處理UI就要自己去回到主線程中去(系統(tǒng)不會幫我們回到主線程)
錯誤結(jié)果處理:
-(void)TouchIDResult:(LAError)code
{
   NSString *result = nil;
   
   switch (code)
   {
       case LAErrorAuthenticationFailed:
       {
           result = @"用戶驗證沒有通過,比如提供了錯誤的手指的指紋";
           break;
       }
       case LAErrorUserCancel:
       {
           result = @"用戶取消了Touch ID驗證";
           break;
       }
       case LAErrorUserFallback:
       {
           result = @"用戶不想進行Touch ID驗證,想進行輸入密碼操作";
           
           dispatch_async(dispatch_get_main_queue(), ^{
               //用戶選擇輸入密碼,可以調(diào)起app自己的密碼系統(tǒng),也可調(diào)起手機的密碼系統(tǒng)
               
           });
           break;
       }
       case LAErrorSystemCancel:
       {
           result = @"切換到其他APP,系統(tǒng)取消驗證Touch ID";
           break;
       }
       case LAErrorPasscodeNotSet:
       {
           result = @"用戶沒有在設(shè)備Settings中設(shè)定密碼";
           break;
       }
       case LAErrorTouchIDNotAvailable:
       {
           result = @"設(shè)備不支持Touch ID";
           break;
       }
       case LAErrorTouchIDNotEnrolled:
       {
           result = @"設(shè)備沒有進行Touch ID 指紋注冊";
           break;
       }
       case LAErrorTouchIDLockout:
       {
           result = @"touchid被鎖";
           
           // 這里是驗證錯誤次數(shù)上限了,touchid被鎖,這時候需要調(diào)起系統(tǒng)的密碼驗證就行解鎖touchid,不然touchid就不能使用了
           LAContext* context = [LAContext new];
           NSString* result = @"請輸入手機密碼";
           
           //LAPolicyDeviceOwnerAuthentication:手機密碼驗證
           [context evaluatePolicy:LAPolicyDeviceOwnerAuthentication localizedReason:result reply:^(BOOL success, NSError *error){
               if (success)
               {
                   [self touchIDAction];
               }
               else
               {
                   [self TouchIDResult:error.code];
               }
           }];
       }
       case LAErrorAppCancel:
       {
           result = @"應(yīng)用取消驗證";
           break;
       }
       case LAErrorInvalidContext:
       {
           result = @"驗證失效";
           break;
       }
   }
   
   //回到主線程
   dispatch_async(dispatch_get_main_queue(), ^{
       [self showMessage:result];
   });
}

這里需要注意:
錯誤類型LAErrorTouchIDLockout表示指紋驗證錯誤次數(shù)上限,這時需要調(diào)起手機密碼進行解鎖touchid

Touch ID 的東西簡單的就這些了,需要的同學(xué)拿去吧

本文Demo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容