TouchID使用以及特性說明

1.說明

iOS 8.0向第三方開放了TouchID的API,可以通過指紋進行登錄或者其他的安全校驗。在iOS 8以上的工程中,導入LocalAuthentication。

TouchID使用比較簡單,并不提供獲取指紋數據的信息,使用LocalAuthentication中的LAContext.h和LAError.h兩個頭文件,LAError.h提供錯誤碼,LAContext.h提供以下兩種方法:
1.canEvaluatePolicy,監測設備是否支持TouchID,返回BOOL,并且若不支持,則在error里面返回相應狀態;
2.evaluatePolicy,TouchID驗證狀態,在block里面返回驗證狀態BOOL和error。

2.使用

下面自定義了一個工具類,具體的情況查看Demo

2.1.導入頭文件

#import <LocalAuthentication/LocalAuthentication.h>

2.2.判斷系統版本

判斷當前系統版本是否支持TouchID的API,iOS 8.0以上的系統才支持,這里寫了一個宏判斷系統版本,在Version為輸入的版本。

#define Later(Version) [UIDevice currentDevice].systemVersion.floatValue >= Version

2.3.初始化LAContext對象

初始化LAContext對象,localizedCancelTitle自定義取消按鈕的文字,支持iOS 10以上系統,localizedFallbackTitle設置這個屬性后,取消按鈕旁邊會多一個按鈕,可在調起TouchID時,調用其他功能,內容為空時不顯示。

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

2.4.LAPolicy

在驗證設備是否支持TouchID之前,先說一下LAPolicy這個屬性,它是一個枚舉,這里根據自己的需要選擇LAPolicy,它提供兩個值:LAPolicyDeviceOwnerAuthenticationWithBiometrics和LAPolicyDeviceOwnerAuthentication。
1.LAPolicyDeviceOwnerAuthenticationWithBiometrics是支持iOS 8以上系統,使用該設備的TouchID進行驗證,當輸入TouchID驗證5次失敗后,TouchID被鎖定,只能通過鎖屏后解鎖設備時輸入正確的解鎖密碼來解鎖TouchID。
2.LAPolicyDeviceOwnerAuthentication是支持iOS9以上系統,使用該設備的TouchID或者設備密碼進行驗證,當輸入TouchID驗證5次失敗后,TouchID被鎖定,會觸發設備密碼頁面進行驗證。

2.5.canEvaluatePolicy

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

[context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]

error返回驗證錯誤碼,對errorCode進行處理,LAErrorTouchIDLockout 、LAErrorAppCancel 和LAErrorInvalidContext iOS 9后才提供的錯誤碼,具體的錯誤碼如下:

switch (error) {
        case LAErrorAuthenticationFailed://1
        {
            //身份驗證并不成功,因為用戶沒有提供有效的憑證。
            break;
        }
        case LAErrorUserCancel://2
        {
            //認證被取消了由用戶(例如了取消按鈕)。
            break;
        }
        case LAErrorUserFallback://3
        {
            //身份驗證被取消了,因為用戶點擊了后退按鈕(輸入密碼)。
            break;
        }
        case LAErrorSystemCancel://4
        {
            //身份驗證被系統取消了(如另一個應用程序去前臺)。
            break;
        }
        case LAErrorPasscodeNotSet://5
        {
            //身份驗證無法啟動,因為密碼不是在設備上設置的。
            break;
        }
        case LAErrorTouchIDNotAvailable://6
        {
            //身份驗證無法啟動,因為設備上無法使用Touch ID。
            break;
        }
        case LAErrorTouchIDNotEnrolled://7
        {
            //身份驗證無法啟動,因為Touch ID沒有注冊的手指。
            break;
        }
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_9_0
        case LAErrorTouchIDLockout://8
        {
            //連續五次指紋識別錯誤,TouchID功能被鎖定,下一次需要輸入系統密碼
            break;
        }
        case LAErrorAppCancel://9
        {
            //如突然來了電話,電話應用進入前臺,APP被掛起啦
            break;
        }
        case LAErrorInvalidContext://10
        {
            //LAContext傳遞給這個調用之前已經失效
            break;
        }
#else
#endif
        default:
        {
            break;
        }
    }

2.6.evaluatedPolicyDomainState

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

2.7.evaluatePolicy

evaluatePolicy進行TouchID校驗,Block回調,success為YES驗證成功,success為NO驗證失敗,對error進行處理。localizedReason是TouchID驗證時的文字提示。TouchID驗證時調用的是子線程,所以Block中要調用主線程處理。

[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:localizedReason reply:^(BOOL success, NSError * _Nullable error) {}]

3.最后

可在模擬器上測試TouchID,Simulator->Hardware->Touch ID,功能分別是指紋已經錄入,驗證成功,驗證失敗。

demo中實現功能:
1.判斷設置是否支持TouchID
2.校驗TouchID,對指紋是否修改進行判斷、錯誤碼處理、指紋5次校驗失敗被鎖定,調起設備密碼,輸入正確密碼,解鎖指紋,類似支付指紋登錄功能。

PS:這只是一個簡單的教程,具體深入靠大家了,附上Demo地址,源碼地址

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容