iOS Touch ID(指紋識別)的應用

自從 Apple 大大發(fā)布 iPhone 5s 以后,指紋識別似乎成為了手機的標配,指紋識別的加入使得手機解鎖變得更加方便快捷。iOS 8發(fā)布以后,Apple 大大開放了 Touch ID 給第三方使用,最常見的場景就是應用的登錄,以及日常的支付,提高了應用日常的使用效率。

最近公司項目也準備接入指紋識別,于是花了點時間研究了一下,借機跟大家分享一下心得,如有不妥之處,歡迎指正。

在使用 Touch ID 的時候需要導入系統(tǒng)框架類:
#import <LocalAuthentication/LocalAuthentication.h>
為了展示效果,我只寫了一個按鈕,看效果圖:

首頁.png

點擊按鈕進行指紋驗證,在驗證指紋之前,首先要判斷系統(tǒng)版本是否大于8.0,因為在8.0以后,Touch ID 才開放給第三方使用:

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0){}

然后要判斷設備是否支持指紋,這一點很重要,如果返回為 NO 會同時返回對應的錯誤,要做進一步處理:

//獲取上下文
LAContext *myContext = [[LAContext alloc] init];
NSError *error = nil;
/*!
 *@abstract 判斷設備是否支持指紋識別
 *@param    LAPolicyDeviceOwnerAuthenticationWithBiometrics 指紋驗證
 *@return   YES:支持 NO:不支持
 */
if([myContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]){}

這里要說明的是如果返回為 NO,不一定是設備不支持指紋,也有可能是未錄入指紋或者未設置密碼:

NSString *message = @"";
switch (error.code)
{
       case LAErrorTouchIDNotEnrolled:  /// 支持指紋并已設置密碼,但未錄入指紋
       {
            message = @"用戶未錄入指紋!";
            break;
       }
       case LAErrorPasscodeNotSet:      /// 支持指紋但未設置密碼,并已錄入指紋
       {
            message = @"設備未設置密碼!";
            break;
       }
       default:
       {
            message = @"不支持指紋識別!";  /// 不支持指紋
            break;
       }
}

支持指紋后要進行指紋驗證,這個方法會有一個回調(diào)來告訴開發(fā)者驗證成功還是失敗,如果失敗會返回對應的錯誤:

/*!
 *@abstract 指紋驗證以及回調(diào)
 *@param    LAPolicyDeviceOwnerAuthenticationWithBiometrics 指紋驗證
 *@param    localizedReason 進行指紋驗證時的彈窗的展示內(nèi)容(該參數(shù)不能為nil或者空串,否則會拋出異常)
 *@param    reply:驗證后的回調(diào)block
 */
 [myContext evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
                  localizedReason:@"通過Home鍵驗證已有指紋"
                            reply:^(BOOL success, NSError * _Nullable error){}

這里要說明的是如果失敗,返回的錯誤有多種,針對每一種錯誤都要做處理:

switch (error.code)
{
      case LAErrorAuthenticationFailed: /// 連續(xù)三次指紋識別錯誤
      {
           message = @"授權失敗!";
      }
      break;
      case LAErrorUserCancel: /// 在TouchID對話框中點擊了取消按鈕
      {
           message = @"用戶取消驗證Touch ID!";
      }
      break;
      case LAErrorUserFallback: /// 在TouchID對話框中點擊了輸入密碼按鈕
      {
            dispatch_async(dispatch_get_main_queue(), ^
            {
                  message = @"用戶選擇輸入密碼!";
            });
       }
       break;
       case LAErrorSystemCancel: /// TouchID對話框被系統(tǒng)取消,例如按下Home或者電源鍵
       {
            message = @"系統(tǒng)取消授權,如其他應用進入前臺,用戶按下Home或者電源鍵!";
       }
       break;
       case LAErrorPasscodeNotSet: /// 已錄入指紋但設備未設置密碼
       {
            message = @"設備未設置密碼!";
       }
       break;
       case LAErrorTouchIDNotAvailable: /// TouchID不可用
       {
            message = @"Touch ID不可用!";
       }
       break;
       case LAErrorTouchIDNotEnrolled:/// 用戶未錄入指紋
       {
            message = @"用戶未錄入指紋!";
       }
       break;
       #if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_9_0
       case LAErrorTouchIDLockout: /// 連續(xù)五次指紋識別錯誤,TouchID功能被鎖定,下一次需要輸入系統(tǒng)密碼
       {
            message = @"Touch ID被鎖,需要用戶輸入密碼解鎖!";
       }
       break;
       case LAErrorAppCancel: /// 如突然來了電話,電話應用進入前臺,APP被掛起啦
       {
            message = @"用戶不能控制情況下APP被掛起!";
       }
       break;
       case LAErrorInvalidContext: /// -10 LAContext傳遞給這個調(diào)用之前已經(jīng)失效
       {
            message = @"LAContext傳遞給這個調(diào)用之前已經(jīng)失效!";
       }
       break;
       #endif
       default:
       {
            dispatch_async(dispatch_get_main_queue(), ^
            {
                 message = @"其他情況,切換主線程處理!";
            });
            break;
        }
}

整個 Demo 可點擊Touch ID Demo,還望多多支持,點個star?。?!
這里貼出幾張截圖,可對應著看(原諒我不知道怎么并排排列圖片,知道的簡友麻煩評論或私信告知一下,不甚感激! ):

未錄入指紋.jpg

驗證指紋.jpg
取消驗證指紋.jpg
驗證指紋失敗.jpg
三次驗證指紋失敗.jpg
五次驗證指紋失敗.jpg
用戶選擇輸入密碼.jpg
驗證通過.jpg
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

  • iOS 8 SDK向開發(fā)者公開了Touch ID指紋識別功能,允許App對用戶身份進行本地驗證。使用TouchID...
    走在路上的小二閱讀 1,053評論 0 4
  • 實用原理: 指紋識別技術就是把一個人同他的指紋對應起來,通過比較他的指紋和預先保存的指紋進行比較,就可以驗證他的真...
    艷曉閱讀 3,290評論 0 18
  • 簡述: 在類似支付寶為首的應用以及各種理財?shù)壬婕板X財對安全性要求較高的應用中,目前普遍對關鍵數(shù)據(jù)都做了安全訪問限制...
    C_HPY閱讀 3,188評論 0 18
  • Android 插件框架機制系列文章:Android 插件框架機制之預熱篇 引言 上一篇文章提到過Small,這次...
    mymdeep閱讀 580評論 0 0
  • 今天,又到了作別的時刻,那個名叫2016的朋友,有幾句話我們要對你說。 再見,2016,再見這一年我吃過的泡面雞腿...
    吹風的少年閱讀 321評論 0 0

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