iOS 關于TouchID指紋解鎖的實現(xiàn)

一直想玩玩指紋解鎖,近期時間比較閑,就研究了一下這個指紋解鎖。這個功能實現(xiàn)起來還是很簡單的,雖然看起來比較高大上,但是對于開發(fā)來說,越是高大上的東西一般都有封裝好的,我們只需要調用就可以實現(xiàn)相當秀的功能。

廢話少說,直接貼教程。

蘋果公司推出的指紋識別,提供的功能很少,只要注意這兩個功能即可(驗證是否支持指紋以及指紋是否正確)。

第一步:導入解鎖必須的頭文件

#import<LocalAuthentication/LocalAuthentication.h>

第二步:(這一步主要是了解使用的方法,可以直接跳過看第三步的代碼)

這個方法是判斷設備是否支持TouchID的。

-?(BOOL)canEvaluatePolicy:(LAPolicy)policy?error:(NSError?*?__autoreleasing?*)

error__attribute__((swift_error(none)));

這個是用來驗證TouchID的,會有彈出框出來。

-?(void)evaluatePolicy:(LAPolicy)policy

localizedReason:(NSString?*)localizedReason

reply:(void(^)(BOOLsuccess,?NSError?*?__nullable?error))reply;

LAContext對象,這個主要設置的屬性是localizedFallbackTitle。這個是用于設置左邊的按鈕的名稱,默認是Enter?Password.當你設置為@“”時會隱藏。還可以設置localizedReason這個屬性,這是用于設置提示語,表示為什么要使用Touch ID。

第三步:(整體代碼)

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{//初始化上下文對象LAContext* context =[[LAContext alloc] init];//這個設置的使用密碼的字體,當text=@""時,按鈕將被隱藏

context.localizedFallbackTitle=@"輸入密碼解鎖";

//這個設置的取消按鈕的內容context.localizedCancelTitle=@"取消";//錯誤對象NSError* error =nil;

NSString* result =@"需要驗證您的touch ID";//首先使用canEvaluatePolicy 判斷設備支持狀態(tài)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) {caseLAErrorSystemCancel:

{

NSLog(@"系統(tǒng)取消授權,如其他APP切入");break;

}caseLAErrorUserCancel:

{

NSLog(@"用戶取消驗證Touch ID");break;

}caseLAErrorAuthenticationFailed:

{

NSLog(@"授權失敗");break;

}caseLAErrorPasscodeNotSet:

{

NSLog(@"系統(tǒng)未設置密碼");break;

}caseLAErrorTouchIDNotAvailable:

{

NSLog(@"設備Touch ID不可用,例如未打開");break;

}caseLAErrorTouchIDNotEnrolled:

{

NSLog(@"設備Touch ID不可用,用戶未錄入");break;

}caseLAErrorUserFallback:

{

[[NSOperationQueue mainQueue] addOperationWithBlock:^{

NSLog(@"用戶選擇輸入密碼,切換主線程處理");

}];break;

}default:

{

[[NSOperationQueue mainQueue] addOperationWithBlock:^{

NSLog(@"其他情況,切換主線程處理");

}];break;

}

}

}

}];

}else{

NSLog(@"不支持指紋識別");switch(error.code) {caseLAErrorTouchIDNotEnrolled:

{

NSLog(@"TouchID is not enrolled");break;

}caseLAErrorPasscodeNotSet:

{

NSLog(@"A passcode has not been set");break;

}default:

{

NSLog(@"TouchID not available");break;

}

}

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

}

}

補充:

1.touch ID 在驗證連續(xù)錯誤三次的時候,會停止touch ID的使用,需要輸入手機的密碼以解鎖。這個要如何實現(xiàn)呢?這個是要通過一個枚舉修改的。

第一個枚舉LAPolicyDeviceOwnerAuthenticationWithBiometrics就是說,用的是手指指紋去驗證的;NS_ENUM_AVAILABLE(NA, 8_0)iOS8 可用

第二個枚舉LAPolicyDeviceOwnerAuthentication少了WithBiometrics則是使用TouchID或者密碼驗證,默認是錯誤兩次指紋或者鎖定后,彈出輸入密碼界面;NS_ENUM_AVAILABLE(10_11, 9_0)iOS 9可用

[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationlocalizedReason:result reply:^(BOOL success, NSError *_Nullable error) {

}

2.在使用的過程中,在block回調中使用了LCProgressHUD,但是界面出現(xiàn)了卡死的現(xiàn)象,通過視圖層級下,發(fā)現(xiàn)是由于LCProgressHUD的界面沒有清除,導致整個界面被它覆蓋,形成卡死假象。這是別人遇到的問題,Mark一下,防止以后出錯。

3.feedback按鈕顯示

默認第一次識別只有取消按鈕

錯誤一次之后,會顯示 feedBack 按鈕

如果不想顯示 feedback 按鈕;可以設置feedBackTitle = @""

4.CancelTitle按鈕顯示

該屬性, iOS 10 才可以進行設置,iOS 以前是不可以進行設置的

參考鏈接:

1.http://www.lxweimin.com/p/0690a96ad5f6

2.http://blog.csdn.net/zzzzzdddddxxxxx/article/details/53513909

3.http://blog.csdn.net/ZzzzzzXJ/article/details/43989235

附件Demo:其中包含我的小demo和一個封裝好的類touchID.zip

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

推薦閱讀更多精彩內容