iOS开发之Touch ID指纹验证
2016-02-01 14:26
495 查看
iOS8.0以上支持指纹验证,允许App对用户身份进行本地验证。
使用Touch ID 需要两步即可。
1、检查Touch ID是否可用
2、获得指纹验证结果
导入LocalAuthentication.framework
代码
使用Touch ID 需要两步即可。
1、检查Touch ID是否可用
2、获得指纹验证结果
集成
依赖框架导入LocalAuthentication.framework
#import <LocalAuthentication/LocalAuthentication.h>
代码
- (void)authenticateUser { //做iOS 8以下版本适配时,务必进行API验证,避免调用相关API引起崩溃。 if ([UIDevice currentDevice].systemVersion.floatValue < 8.0) return; //初始化上下文对象 LAContext *context = [[LAContext alloc] init]; //错误对象 NSError *error = nil; NSString *result = @"请验证已有指纹"; //首先使用canEvaluatePolicy 判断设备支持状态 if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) { //支持指纹验证 [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:result reply:^(BOOL success, NSError *error) { if (success) { //验证成功,主线程处理UI NSLog(@"..."); } else { 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 break; } case LAErrorUserFallback: { NSLog(@"User selected to enter custom password"); [[NSOperationQueue mainQueue] addOperationWithBlock:^{ //用户选择输入密码,切换主线程处理 }]; break; } case LAErrorAuthenticationFailed: { //授权失败(连续三次指纹识别错误) NSLog(@"Application retry limit exceeded"); break; } case LAErrorTouchIDLockout: { //iOS9第一次输错会锁住指纹验证功能,然后要求输入密码来激活指纹验证 NSLog(@"Biometry is locked out"); break; } case LAErrorAppCancel: { //用户不能控制的挂起,例如突然来了电话,电话应用进入前台,APP被挂起 NSLog(@""); } case LAErrorInvalidContext: { //授权过程中,LAContext对象被释放掉了,造成的授权失败 NSLog(@""); } case LAErrorTouchIDNotAvailable: { //设备Touch ID不可用,例如未打开 break; } default: { [[NSOperationQueue mainQueue] addOperationWithBlock:^{ //其他情况,切换主线程处理 }]; break; } } } }]; } else { //不支持指纹识别,打印出错误详情 switch (error.code) { case LAErrorTouchIDNotEnrolled: { //设备Touch ID不可用,用户未录入 //No fingers are enrolled with Touch ID NSLog(@"TouchID is not enrolled"); break; } case LAErrorPasscodeNotSet: { //系统未设置密码 NSLog(@"A passcode has not been set"); break; } default: { NSLog(@"TouchID not available"); break; } } NSLog(@"%@",error.localizedDescription); } }
相关文章推荐
- 起底多线程同步锁(iOS)
- ios证书
- iOS手势操作简介(三)
- iOS 顺传
- iOS7.0 修改状态栏字体的颜色
- iOS给页面中绘制一个不断扩大的圆形
- iOS 按键 抖动
- iOS开发中手势处理简介(二)
- 自定义控件之------仿ios下拉回弹效果
- iOS 定义具有位移操作的枚举的意义
- iOS手势操作简介(一)
- iOS 基于WebService开发
- iOS开发:深入理解GCD 第一篇
- ios 自己定义导航栏和切割线
- iOS开发:深入理解GCD 第二篇(dispatch_group、dispatch_barrier、基于线程安全的多读单写)
- Bugly iOS SDK 集成错误 _OBJC_CLASS_$_JSContext
- (NO.00005)iOS实现炸弹人游戏(十一):怪物之火精灵
- (NO.00005)iOS实现炸弹人游戏(十一):怪物之火精灵
- (NO.00005)iOS实现炸弹人游戏(十一):怪物之火精灵
- iOS 如何四舍五入