1、引入头文件import <LocalAuthentication/LocalAuthentication>
2、.h中定义好:typedef void(^TouchIdValidationFailureBack)(LAError result);
.m中可以封装一下:
- (void)evaluatePolicy:(NSString *)localizedReason fallbackTitle:(NSString *)title SuccesResult:(void(^)())backSucces FailureResult:(TouchIdValidationFailureBack)backFailure
{
LAContext* context = [[LAContext alloc] init];//初始化上下文对象
NSError* error = nil;//错误对象
//首先使用canEvaluatePolicy 判断设备支持状态
if ([context canEvaluatePolicy: LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error])
{
//支持指纹验证
[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
localizedReason:localizedReason
reply:
^(BOOL succes, NSError *error) {
if (succes) {
NSLog(@"验证成功");//验证成功,返回主线程处理
dispatch_async(dispatch_get_main_queue(), ^{
backSucces(succes);
});
} else {
NSLog(@"验证失败");
NSLog(@"%@",error.localizedDescription);
dispatch_async(dispatch_get_main_queue(), ^{
backFailure(error.code);
});
}
}];
}else
{
NSLog(@"不支持指纹识别,LOG出错误详情");
NSLog(@"%@",error.localizedDescription);
dispatch_async(dispatch_get_main_queue(), ^{
backFailure(error.code);
});
}
}
3、返回错误类型
typedef NS_ENUM(NSInteger, LAError)
{
//授权失败
LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed,
//用户取消Touch ID授权
LAErrorUserCancel = kLAErrorUserCancel,
//用户选择输入密码
LAErrorUserFallback = kLAErrorUserFallback,
//系统取消授权(例如其他APP切入)
LAErrorSystemCancel = kLAErrorSystemCancel,
//系统未设置密码
LAErrorPasscodeNotSet = kLAErrorPasscodeNotSet,
//设备Touch ID不可用,例如未打开
LAErrorTouchIDNotAvailable = kLAErrorTouchIDNotAvailable,
//设备Touch ID不可用,用户未录入
LAErrorTouchIDNotEnrolled = kLAErrorTouchIDNotEnrolled,
} NS_ENUM_AVAILABLE(10_10, 8_0);
iOS9中加入了新的错误类型:
LAErrorTouchIDLockout:iOS8.0也有这个错误的出现,这个错误出现,源自用户多次连续使用Touch ID失败,Touch ID被锁,需要用户输入密码解锁,这个错误的交互LocalAuthentication.framework已经封装好了,不需要开发者关心。
LAErrorAppCancel和LAErrorSystemCancel相似,都是当前软件被挂起取消了授权,但是前者是用户不能控制的挂起,例如突然来了电话,电话应用进入前台,APP被挂起。后者是用户自己切到了别的应用,例如按home键挂起。
LAErrorInvalidContext很好理解,就是授权过程中,LAContext对象被释放掉了,造成的授权失败。
网友评论