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