- iphone 5s 以后推出指纹识别
- iOS8.0开放指纹识别
引入系统头文件
#import <LocalAuthentication/LocalAuthentication.h>
1. 判断版本
//1.判断版本
if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0) {
//可以使用指纹识别 5S 以后的机型
}
2. 判断是否可以使用指纹识别功能
if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:nil] ) {
}else{
NSLog(@"sorry!");
}
Policy两个参数解析
LAPolicyDeviceOwnerAuthenticationWithBiometrics : 生物指纹识别。验证弹框有两个按钮,第一个是取消按钮,第二个按钮可以自定义标题名称(输入密码)。只有在第一次指纹验证失败后才会出现第二个按钮,这种鉴定方式的第二个按钮的功能自定义。前三次指纹验证失败,指纹验证框不再弹出。再次重新进入验证,还有两次验证机会,如果还是验证失败,TOUCH ID 被锁住不再继续弹出指纹验证框。以后的每次验证都将会弹出设备密码输入框直至输入正确的设备密码方可解除TOUCH ID锁。
一般用这个
LAPolicyDeviceOwnerAuthentication: 生物指纹识别或系统密码验证。如果TOUCH ID 可用,且已经录入指纹,则优先调用指纹验证。其次是调用系统密码验证,如果没有开启设备密码,则不可以使用这种验证方式。指纹识别验证失败三次将弹出设备密码输入框,如果不进行密码输入。再次进来还可以有两次机会验证指纹,如果都失败则TOUCH ID被锁住,以后每次进来验证都是调用系统的设备密码直至输入正确的设备密码方可解除TOUCH ID锁。
3. 开始启用指纹识别
//3.开始启用指纹识别
[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"请验证指纹,以开启高级功能" reply:^(BOOL success, NSError * _Nullable error) {
//判断是否成功
if (success) {
NSLog(@"验证成功!");
//验证成功,主线程处理UI 因为指纹识别是在分线程里进行 dispatch_sync(dispatch_get_main_queue(), ^{
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"标题" message:@"你成功了" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles: nil];
[alert show];
});
}else if(error != nil)
{
/*
LAErrorAuthenticationFailed - 指纹无法识别
LAErrorUserCancel --用户点击了取消
LAErrorUserFallback --用户点击了输入密码
LAErrorSystemCancel --系统取消
LAErrorPasscodeNotSet --因为你设备上没有设置密码
LAErrorTouchIDNotAvailable --设备没有Touch ID
LAErrorTouchIDNotEnrolled --因为你的用户没有输入指纹
LAErrorTouchIDLockout --多次输入,密码锁定
LAErrorAppCancel-- 比如电话进入,用户不可控的
*/
NSLog(@"error:%@",error);
}
}];