项目中为了安全性,一般使用密码或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(@"不支持指纹"); } }
效果图如下: