项目中为了安全性,一般使用密码或iPhone手机的指纹识别Touch ID。
第一步,判断系统是否支持,iOS8.0及以上才支持。
第二步,判断手机是否支持,带Touch ID的手机iPhone5s及以上才支持。
代码如下:
- (void)openTouchID{
if ([UIDevice currentDevice].systemVersion.floatValue < 8.0) {
NSLog(@"系统版本过低,不支持");
return;
}
//创建安全验证对象
LAContext * ctx = [[LAContext alloc]init];
//判断是否支持密码验证
/**
*LAPolicyDeviceOwnerAuthentication 手机密码的验证方式
*LAPolicyDeviceOwnerAuthenticationWithBiometrics 指纹的验证方式
*/
BOOL isEnable = [ctx canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:NULL];
if (isEnable) {
ctx.localizedFallbackTitle = @""; // 去掉错误时显示【输入密码】
[ctx evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"指纹验证" reply:^(BOOL success, NSError * _Nullable error) {
if (success)
{
//输入成功 存储状态
// NSString *keyF = [NSString stringWithFormat:@"%@fingerKey",userInfomation().userId];
// [[NSUserDefaults standardUserDefaults] setObject:@"1" forKey:keyF];
// [[NSUserDefaults standardUserDefaults] synchronize];
NSLog(@"指纹验证成功");
dispatch_async(dispatch_get_main_queue(), ^{
// 进入风险评测
});
} else
{
// 失败
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"指纹验证失败----");
NSLog(@"%@",error.localizedDescription);
switch (error.code) {
case LAErrorSystemCancel:
{
NSLog(@"Authentication was cancelled by the system");
//切换到其他APP,系统取消验证Touch ID
break;
}
case LAErrorUserCancel:
{
NSLog(@"Authentication was cancelled by the user");
//用户取消验证Touch ID
// 进入风险评测
// [self enterRiskEvaluation];
break;
}
case LAErrorAuthenticationFailed:
{
NSLog(@"指纹错误:LAErrorAuthenticationFailed");
//切换到其他APP,系统取消验证Touch ID
[self timesLimited];
break;
}
case LAErrorPasscodeNotSet:
{
NSLog(@"指纹错误:LAErrorPasscodeNotSet");
break;
}
case LAErrorTouchIDNotAvailable:
{
NSLog(@"指纹错误:LAErrorTouchIDNotAvailable");
break;
}
case LAErrorTouchIDNotEnrolled:
{
NSLog(@"指纹错误:LAErrorTouchIDNotEnrolled");
break;
}
case LAErrorTouchIDLockout:
{
NSLog(@"指纹错误:LAErrorTouchIDLockout");
// [self timesLimited];
break;
}
case LAErrorAppCancel:
{
NSLog(@"指纹错误:LAErrorAppCancel");
break;
}
default:
{
// 次数受限
// [self timesLimited];
break;
}
}
//......
});
}
}];
}else{
// 密码验证的方式(不支持指纹) 可加弹窗提示
NSLog(@"不支持指纹");
}
}
效果图如下: