LocalAuthentication
Security
导入上面的两个库
逻辑有点喽 简单易懂
登录页面
- (void)exMainQueue:(void (^)())queue {
dispatch_async(dispatch_get_main_queue(), queue);
}
- (void)touch{
BOOL setOn = [[NSUserDefaults standardUserDefaults]boolForKey:@"Touch"];
if (setOn) {
LAContext * context = [[LAContext alloc] init];
NSString *hihihihi = @"123456789";
[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:hihihihi reply:
^(BOOL success, NSError *error) {
if (success) {
[self exMainQueue:^{
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
HomeViewController * home = [storyBoard instantiateViewControllerWithIdentifier:@"HomeViewController"];
[self.navigationController pushViewController:home animated:YES];
}];
}
}];
}
}
设置页面LAContext * context = [[LAContext alloc] init];
BOOL success;
NSError *error;
// .检查设备是否能用TouchID,返回检查结果BOOL类型success:
success = [context canEvaluatePolicy: LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error];
if (success) {
NSLog(@"支持");
_isSupport = YES;
} else {
_isSupport = NO;
NSLog(@"不支持");
}
if (_isSupport&&indexPath.row == 0) {
cell.textLabel.text = @"指纹解锁";
UISwitch * sw = [[UISwitch alloc]initWithFrame:CGRectMake(0, 0, 50, 30)];
[sw addTarget:self action:@selector(switchDragDownAD:) forControlEvents:UIControlEventValueChanged];
//本地拿到sw的状态
sw.on = [[NSUserDefaults standardUserDefaults]boolForKey:@"Touch"];
_setOn = sw.on;
cell.accessoryView = sw;
}else{
cell.textLabel.text = @"指纹123456789746546解锁";
}
- (void)switchDragDownAD:(UISwitch *)sw{
LAContext * context = [[LAContext alloc] init];
_setOn = [[NSUserDefaults standardUserDefaults]boolForKey:@"Touch"];
NSString *hihihihi = @"123456789";
//如果设备能使用TouchID,代码块中返回识别结果BOOL类型的success:
[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:hihihihi reply:
^(BOOL success, NSError *error) {
if (success) {
// 验证成功后执行的代码
if (_setOn) {
//存在
[[NSUserDefaults standardUserDefaults]removeObjectForKey:@"Touch"];
[[NSUserDefaults standardUserDefaults]synchronize];
[self exMainQueue:^{
sw.on = NO;
NSLog(@"取消指纹解锁了touch");
}];
} else {
[[NSUserDefaults standardUserDefaults]setBool:YES forKey:@"Touch"];
[[NSUserDefaults standardUserDefaults]synchronize];
[self exMainQueue:^{
sw.on = YES;
NSLog(@"添加指纹解锁了touch");
}];
}
} else {
if (_setOn) {
//存在
[[NSUserDefaults standardUserDefaults]setBool:YES forKey:@"Touch"];
[[NSUserDefaults standardUserDefaults]synchronize];
[self exMainQueue:^{
sw.on = YES;
NSLog(@"取消指纹解锁 失败了touch");
}];
} else {
[[NSUserDefaults standardUserDefaults]removeObjectForKey:@"Touch"];
[[NSUserDefaults standardUserDefaults]synchronize];
[self exMainQueue:^{
sw.on = NO;
NSLog(@"添加指纹解锁失败了 touch");
}];
}
NSLog(@"不支持,不能使用");
NSLog(@"error = %@",error);
switch (error.code) {
case -1:
NSLog(@"验证指纹失败");
break;
case -2:
NSLog(@"你点了取消");
break;
case -3:
NSLog(@"你点了输入密码");
break;
case -4:
NSLog(@"系统终止了验证");
break;
case -5:
NSLog(@"用户没有在设备Settings中设定密码");
break;
case -6:
NSLog(@"设备不支持Touch ID");
break;
case -7:
NSLog(@"设备没有进行Touch ID 指纹注册");
break;
default:
break;
}
}
}];
}
- (void)exMainQueue:(void (^)())queue {
dispatch_async(dispatch_get_main_queue(), queue);
}