你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> Touch ID使用

Touch ID使用

編輯:IOS開發綜合

Touch ID簡介


Touch ID指紋識別作為iPhone 5s上的“殺手級”功能早已為人們所熟知,目前搭載的設備有iphone SE、iPhone 6、iPhone 6 Plus、iPhone 6s、iPhone 6s Plus、iPad Pro、iPad mini 4、iPad mini 3和iPad air 2 iOS 8.0開放了指紋驗證的API,為APP增添了新的解鎖姿勢,Touch ID在iPhone 6、iPhone 6 Plus上表現平平,識別效率低下成為眾多用戶的吐槽點 蘋果在2015新品發布會上提及全新的iPhone 6s、iPhone 6s Plus采用第二代Touch ID,新的Touch ID識別速度更快;實際體驗中只要輕輕觸碰一下即可,以往要按壓半秒鐘的指紋識別過程,現在基本是一觸即發 隨著安卓也有越來越多的設備配備了類似Touch ID的指紋識別裝置,今後會有越來越多的APP選擇使用指紋識別的驗證方式

Touch ID原理


Touch ID不存儲用戶的任何指紋圖像,只保存代表指紋的數字字符。iPhone 5s的A7處理器采用了新的高級安全架構,其中有一塊名為Secure Enclave的區域用以專門保護密碼和指紋數據。只有Secure Enclave可以訪問指紋數據,而且它還把這些數據同處理器和系統隔開,因而這些永遠不會被存儲在蘋果的服務器上,也不會被同步到iCloud或其他地方。除了Touch ID之外,它們不會被匹配到其他指紋庫中 相信很多人都知道,一個Touch ID傳感器和iPhone是一對一的關系,如果損壞,只能售後,無法自行更換,其中的原理比較復雜。一種可能的解釋是蘋果阻止了任何Touch ID和Secure Enclave之間的任何數據嗅探和截取,實現了特定處理器配對特定的Touch ID。 如果可以隨意更換,那麼有人將用戶的指紋傳感器更換,就可以在用戶不知情的情況下竊取到指紋數據。蘋果的技術降低了這一風險,這意味著不法之徒想要調包傳感器的話,需要單獨破解每台設備,對於重視安全性的用戶來說,這個發現當然是個好消息

 

Touch ID常用方法與枚舉解釋


首先蘋果提供了canEvaluatePolicy:error:來判斷運行的設備是否支持Touch ID

如果要讓其失效,可以調用invalidate,新特征:iOS 9.0和Mac OS 10.11

還提供了evaluatePolicy:localizedReason:reply:來驗證識別的情況,具體類型如下(以下枚舉類型出現的情況均已測試並標注):

    // 身份驗證沒有成功,因為用戶未能提供有效的憑據(連續3次驗證失敗時提示)
    LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed,

    // 身份驗證被用戶取消(當用戶點擊取消按鈕時提示)
    LAErrorUserCancel           = kLAErrorUserCancel,

    // 認證被取消了,因為用戶點擊回退按鈕(當用戶點擊輸入密碼時提示)
    LAErrorUserFallback         = kLAErrorUserFallback,

    // 身份驗證被系統取消(驗證時當前APP被移至後台或者點擊了home鍵導致驗證退出時提示)
    LAErrorSystemCancel         = kLAErrorSystemCancel,

    // Touch ID無法啟動,因為沒有設置密碼(當系統沒有設置密碼的時候,Touch ID也將不會開啟)
    LAErrorPasscodeNotSet       = kLAErrorPasscodeNotSet,

    // 無法啟動身份驗證(這種情況沒有檢測到,應該是出現硬件損壞才會出現)
    LAErrorTouchIDNotAvailable  = kLAErrorTouchIDNotAvailable,

    // 無法啟動身份驗證,因為觸摸沒有注冊的手指 (這個暫時沒檢測到)
    LAErrorTouchIDNotEnrolled   = kLAErrorTouchIDNotEnrolled,

    // 身份驗證是不成功的,因為有太多的失敗會要求密碼解除鎖定,(前提是使用 LAPolicyDeviceOwnerAuthenticationWithBiometrics)iOS9和MAC OS0.11新特征
    LAErrorTouchIDLockout   NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorTouchIDLockout,

    // 認證被取消的應用(如無效而認證進行調用)這個暫時沒有檢測到,可能是蘋果預留的 iOS9和MAC OS0.11新特征
    LAErrorAppCancel        NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorAppCancel,

    // LAContext通過這個電話已經失效(當LAContext失效時會調用)iOS9和MAC OS0.11新特征
    LAErrorInvalidContext   NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorInvalidContext

Touch 使用


首先,我們需要引入 LocalAuthentication 框架

    #import 

使用很簡單,先創建一個LAContext對象並配置必要的信息

    LAContext *context = [[LAContext alloc] init];
    // 當指紋識別失敗一次後,彈框會多出一個選項,而這個屬性就是用來設置那個選項的內容
    context.localizedFallbackTitle = @"使用密碼登錄";

配置好LAContext對象後,就需要判斷一下設備是否支持指紋識別功能

NSError *error = nil;

if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) { // 該設備支持指紋識別

}else {

}

當設備支持指紋識別的時候,實現如下

    [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"身份驗證需要解鎖指紋識別功能" reply:^(BOOL success, NSError * _Nullable error) {
        if (success) {  // 驗證成功

        }else {

            NSLog(@"%@", error.localizedDescription);
            switch (error.code) {
                case LAErrorSystemCancel:
                    NSLog(@"身份驗證被系統取消(驗證時當前APP被移至後台或者點擊了home鍵導致驗證退出時提示)");
                    break;
                case LAErrorUserCancel:
                    NSLog(@"身份驗證被用戶取消(當用戶點擊取消按鈕時提示)");
                    break;
                case LAErrorAuthenticationFailed:
                    NSLog(@"身份驗證沒有成功,因為用戶未能提供有效的憑據(連續3次驗證失敗時提示)");
                    break;
                case LAErrorPasscodeNotSet:
                    NSLog(@"Touch ID無法啟動,因為沒有設置密碼(當系統沒有設置密碼的時候,Touch ID也將不會開啟)");
                    break;
                case LAErrorTouchIDNotAvailable:
                    NSLog(@"無法啟動身份驗證");  // 這個沒有檢測到,應該是出現硬件損壞才會出現
                    break;
                case LAErrorTouchIDNotEnrolled:
                    NSLog(@"無法啟動身份驗證,因為觸摸標識沒有注冊的手指");  // 這個暫時沒檢測到
                    break;
                case LAErrorUserFallback:
                {
                    [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                        NSLog(@"用戶選擇輸入密碼,切換主線程處理");
                    }];
                    break;
                }
                default:
                {
                    [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                        NSLog(@"其他情況,切換主線程處理");   // 5次失敗進入,如果繼續驗證,則需要輸入密碼解鎖
                    }];
                    break;
                }
            }
        }
      }
    ];

如果不支持,實現如下

    NSLog(@"不支持指紋識別");
        switch (error.code) {
            case LAErrorTouchIDNotEnrolled:
                NSLog(@"設備Touch ID不可用");
                break;
            case LAErrorPasscodeNotSet:
                NSLog(@"系統未設置密碼");
                break;
            default:
                NSLog(@"TouchID不可用或已損壞");
                break;
    }

    NSLog(@"%@", error.localizedDescription);

github-Demo下載請點我

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved