iOS Touch ID 開發

Touch ID

Touch ID是iPhone5S後加入的一項新的功能,也就是大家熟知的指紋識別技術。大家用得最多的可能是手機的解屏操作,不用在和以前一樣輸入手機的四位數密碼進行驗證。一方面不用擔心密碼被別人看到,另一方面也方便了自己的操作。iOS8後蘋果開放了Touch ID的API給開發者,這也給我們的app帶來了新的體驗。

使用

Touch ID的API非常的簡單也好理解,在使用前我們需要導入LocalAuthentication這個庫。

1.png

1.png

首先來看下頭文件的定義:

//驗證設備是否支持Touch ID
- (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)error;
//進行驗證的回調
- (void)evaluatePolicy:(LAPolicy)policy
       localizedReason:(NSString *)localizedReason
                 reply:(void(^)(BOOL success, NSError *error))reply;
//取消Touch Id驗證的按鈕的標題,默認標題是輸入密碼
@property (nonatomic, copy) NSString *localizedFallbackTitle;

代碼使用示例

    LAContext *laContext = [[LAContext alloc] init];
    NSError *error;

    if ([laContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {

        [laContext evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
                       localizedReason:@"Touch Id Test"
                                 reply:^(BOOL success, NSError *error) {
                                     if (success) {
                                         NSLog(@"success to evaluate");
                                         //do your work
                                     }
                                     if (error) {
                                         NSLog(@"---failed to evaluate---error: %@---", error.description);
                                         //do your error handle
                                     }
                                 }];
    }
    else {
        NSLog(@"==========Not support :%@", error.description);
        //do your error handle
    }

這樣我們就完成了一個Touch ID的驗證功能。當我們點擊按鈕進行調用的時候,就會彈出驗證的對話框:

2.png

2.png

彈窗目前還不能自定義,都是統一的,第一行是app的名字+Touch ID, 第二行是需要用Touch ID的理由。在用戶進行操作後,我們可以在回調的block那邊處理自己的業務邏輯。

錯誤處理

typedef NS_ENUM(NSInteger, LAError)
{
    //用戶驗證沒有通過,比如提供了錯誤的手指的指紋
    LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed,

    // 用戶取消了Touch ID驗證
    LAErrorUserCancel           = kLAErrorUserCancel,

    //用戶不想進行Touch ID驗證,想進行輸入密碼操作
    LAErrorUserFallback         = kLAErrorUserFallback,

    // 系統終止了驗證
    LAErrorSystemCancel         = kLAErrorSystemCancel,

    // 用戶沒有在設備Settings中設定密碼
    LAErrorPasscodeNotSet       = kLAErrorPasscodeNotSet,

    // 設備不支持Touch ID
    LAErrorTouchIDNotAvailable  = kLAErrorTouchIDNotAvailable,

    // 設備沒有進行Touch ID 指紋註冊
    LAErrorTouchIDNotEnrolled   = kLAErrorTouchIDNotEnrolled,
} NS_ENUM_AVAILABLE(10_10, 8_0);

在block回調那邊,我們需要對每種錯誤進行處理,以便得到更好的用戶體驗。

總結

從上面的代碼中我們也可以看到,Touch ID驗證中我們並不能拿到標識,只有一個YES or NO的結果,只能用來表明當前用戶有權限使用這設備。正常情況下,我們的手機裏面的賬號信息都是自己的,所以在一定方面的確有加固安全,驗證和方便的功能。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章