本文共 4577 字,大约阅读时间需要 15 分钟。
对几种情况的说明
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);
原理说明:指纹识别只可认出‘活手指’,iPhone5s(及以后机型)上的指纹传感器是通过发出射频信号探测手指纹路的,而且只探测手指表皮下面的一层皮肤,这样可以防止指纹被复制、盗窃。
#import "ViewController.h"#import//指纹解锁需要加入这个引用@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad { [superviewDidLoad]; }- (void)evaluateAuthenticate{ QMWNWEAKSELF; //创建LAContext LAContext* context = [[LAContext alloc] init];//这个属性是设置指纹输入失败之后的弹出框的选项context.localizedFallbackTitle =@"密码输入登录";//指纹识别失败后弹出框最右边的按钮内容,左边是取消。 NSError* error =nil; NSString* result =@"请验证已有指纹"; //首先使用canEvaluatePolicy判断设备支持状态 if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) { //支持指纹验证 [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:result reply:^(BOOL success,NSError *error) { if (success) { //验证成功,主线程处理UI NSLog(@"指纹解锁成功"); [[NSOperationQueue mainQueue] addOperationWithBlock:^{ //用户选择输入密码,切换主线程处理 NSUserDefaults *def=[NSUserDefaults standardUserDefaults]; weakSelf.phonetf.text=[def objectForKey:@"username"]; weakSelf.verycodetf.text=[def objectForKey:@"password"];//*******测试用,上线的时候注释掉 }]; } else { NSLog(@"%@",error.localizedDescription); switch (error.code) { caseLAErrorSystemCancel: { //系统取消授权,如其他APP切入 break; } caseLAErrorUserCancel: { //用户取消验证Touch ID SLog(@"用户取消指纹解锁"); break; } caseLAErrorAuthenticationFailed: { //授权失败 break; } caseLAErrorPasscodeNotSet: { //系统未设置密码 SLog(@"为设置密码"); break; } caseLAErrorTouchIDNotAvailable: { //设备Touch ID不可用,例如未打开 SLog(@"为打开"); break; } caseLAErrorTouchIDNotEnrolled: { //设备Touch ID不可用,用户未录入 SLog(@"用户未录入指纹"); break; } caseLAErrorUserFallback: {//点击密码输入登录按钮调用这里的方法 //如果验证指纹失败,可以做其他操作,入跳转到手动输入密码页面 SLog(@"输入框失败后弹出的界面底部两个按钮右边一个的点击方法法"); [[NSOperationQueue mainQueue] addOperationWithBlock:^{ //用户选择输入密码,切换主线程处理 }]; break; } default: { [[NSOperationQueue mainQueue] addOperationWithBlock:^{ //其他情况,切换主线程处理 }]; break; } } } }]; } else { //不支持指纹识别,LOG出错误详情 NSLog(@"不支持指纹识别"); switch (error.code) { caseLAErrorTouchIDNotEnrolled: { SLog(@"TouchID is not enrolled"); break; } caseLAErrorPasscodeNotSet: { SLog(@"A passcode has not been set"); break; } default: { SLog(@"TouchID not available"); break; } } SLog(@"%@",error.localizedDescription); }}@end
转载地址:http://wdmgi.baihongyu.com/