Touch IDsegmentfault
1.要求app
機型:iPhone 5s以上框架
系統:iOS8以上lua
框架:#import <LocalAuthentication/LocalAuthentication.h>線程
注意:作iOS 8如下版本適配時,務必進行API驗證,避免調用相關API引發崩潰。code
2.具體代碼實現:對象
//初始化上下文對象ip
LAContext* context = [[LAContext alloc] init];get
//錯誤對象it
NSError* error = nil;
NSString* result = @"Authentication is needed to access your notes.";
//首先使用canEvaluatePolicy 判斷設備支持狀態
/*
LAErrorAuthenticationFailed
LAErrorUserCancel
LAErrorUserFallback
LAErrorSystemCancel 被掛起取消了受權(用戶本身切到了別的應用)
LAErrorPasscodeNotSet
LAErrorTouchIDNotAvailable
LAErrorTouchIDNotEnrolled
LAErrorTouchIDLockout 屢次連續使用Touch ID失敗,Touch ID被鎖,須要用戶輸入密碼解鎖
LAErrorAppCancel 被掛起取消了受權(用戶不能控制的掛起)
LAErrorInvalidContext LAContext對象被釋放掉了
*/
if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
//支持指紋驗證
[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:result reply:^(BOOL success, NSError *error) {
if (success) {
//驗證成功,主線程處理UI
NSLog(@"success");
}
else
{
NSLog(@"%@",error.localizedDescription);
switch (error.code) {
case LAErrorAuthenticationFailed:
{
NSLog(@"用戶提供的指紋不對");
break;
}
case LAErrorUserCancel:
{
NSLog(@"用戶點擊了取消按鈕");
break;
}
case LAErrorUserFallback:
{
NSLog(@"用戶選擇輸入密碼");
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
//用戶選擇輸入密碼,切換主線程處理
}];
break;
}
case LAErrorSystemCancel:
{
NSLog(@"切換到其餘的app(按了Home按鍵),被系統取消");
break;
}
case LAErrorTouchIDLockout :
{
NSLog(@"用戶指紋錯誤屢次,TOuchID 被鎖定");
break;
}
case LAErrorAppCancel:
{
NSLog(@"被(突如其來的)應用(電話)取消");
break;
}
default:
{
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
//其餘狀況,切換主線程處理
}];
break;
}
}
}
}];
}
else
{
//不支持指紋識別,LOG出錯誤詳情
switch (error.code) {
case LAErrorPasscodeNotSet:
{
NSLog(@"在設置裏面沒有設置密碼");
break;
}
case LAErrorTouchIDNotAvailable:
{
NSLog(@"設備不支持TouchID");
break;
}
case LAErrorTouchIDNotEnrolled:
{
NSLog(@"在設置裏面沒有設置TouchId 指紋");
break;
}
case LAErrorInvalidContext:
{
NSLog(@"建立的指紋對象失效");
break;
}
default:
{
NSLog(@"TouchID not available");
break;
}
}
NSLog(@"%@",error.localizedDescription);
}