iOS 關於TouchID指紋解鎖的實現
一直想玩玩指紋解鎖,近期時間比較閑,就研究了一下這個指紋解鎖。這個功能實現起來還是很簡單的,雖然看起來比較高大上,但是對於開發來說,越是高大上的東西一般都有封裝好的,我們只需要調用就可以實現相當秀的功能。
廢話少說,直接貼教程。
蘋果公司推出的指紋識別,提供的功能很少,只要註意這兩個功能即可(驗證是否支持指紋以及指紋是否正確)。
第一步:導入解鎖必須的頭文件
#import <LocalAuthentication/LocalAuthentication.h>
第二步:(這一步主要是了解使用的方法,可以直接跳過看第三步的代碼)
這個方法是判斷設備是否支持TouchID的。
1 2 |
- ( BOOL )canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)
error __attribute__ ((swift_error(none)));
|
這個是用來驗證TouchID的,會有彈出框出來。
1 2 3 |
- ( void )evaluatePolicy:(LAPolicy)policy
localizedReason:(NSString *)localizedReason
reply:( void (^)( BOOL success, NSError * __nullable error))reply;
|
LAContext對象,這個主要設置的屬性是localizedFallbackTitle。這個是用於設置左邊的按鈕的名稱,默認是Enter Password.當你設置為@“”時會隱藏。還可以設置localizedReason這個屬性,這是用於設置提示語,表示為什麽要使用Touch ID。
第三步:(整體代碼)
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ //初始化上下文對象 LAContext* context = [[LAContext alloc] init]; //這個設置的使用密碼的字體,當[email protected]""時,按鈕將被隱藏
[email protected]"輸入密碼解鎖";
//這個設置的取消按鈕的內容 [email protected]"取消"; //錯誤對象 NSError* error = nil; NSString* result = @"需要驗證您的touch ID"; //首先使用canEvaluatePolicy 判斷設備支持狀態 if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) { NSLog(@"支持指紋識別"); [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:result reply:^(BOOL success, NSError * _Nullable error) { if (success) { NSLog(@"驗證成功 刷新主界面"); }else{ NSLog(@"%@",error.localizedDescription); switch (error.code) { case LAErrorSystemCancel: { NSLog(@"系統取消授權,如其他APP切入"); break; } case LAErrorUserCancel: { NSLog(@"用戶取消驗證Touch ID"); break; } case LAErrorAuthenticationFailed: { NSLog(@"授權失敗"); break; } case LAErrorPasscodeNotSet: { NSLog(@"系統未設置密碼"); break; } case LAErrorTouchIDNotAvailable: { NSLog(@"設備Touch ID不可用,例如未打開"); break; } case LAErrorTouchIDNotEnrolled: { NSLog(@"設備Touch ID不可用,用戶未錄入"); break; } case LAErrorUserFallback: { [[NSOperationQueue mainQueue] addOperationWithBlock:^{ NSLog(@"用戶選擇輸入密碼,切換主線程處理"); }]; break; } default: { [[NSOperationQueue mainQueue] addOperationWithBlock:^{ NSLog(@"其他情況,切換主線程處理"); }]; break; } } } }]; }else{ NSLog(@"不支持指紋識別"); switch (error.code) { case LAErrorTouchIDNotEnrolled: { NSLog(@"TouchID is not enrolled"); break; } case LAErrorPasscodeNotSet: { NSLog(@"A passcode has not been set"); break; } default: { NSLog(@"TouchID not available"); break; } } NSLog(@"%@",error.localizedDescription); } }
補充:
1.touch ID 在驗證連續錯誤三次的時候,會停止touch ID的使用,需要輸入手機的密碼以解鎖。還在研究。
2.在使用的過程中,在block回調中使用了LCProgressHUD,但是界面出現了卡死的現象,通過視圖層級下,發現是由於LCProgressHUD的界面沒有清除,導致整個界面被它覆蓋,形成卡死假象。這是別人遇到的問題,Mark一下,防止以後出錯。
參考鏈接:1.http://www.jianshu.com/p/0690a96ad5f6
2.http://blog.csdn.net/zzzzzdddddxxxxx/article/details/53513909
附件Demo:其中包含我的小demo和一個封裝好的類touchID.zip
iOS 關於TouchID指紋解鎖的實現