一直想玩玩指紋解鎖,近期時間比較閑,就研究了一下這個指紋解鎖。這個功能實現(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