支持系统和机型:
iOS系统的指纹识别功能最低支持的机型为iPhone 5s
,最低支持系统为iOS 8
,虽然安装iOS 7
系统的5s机型可以使用系统提供的指纹解锁功能,但由于API
并未开放,所以理论上第三方软件不可使用。
依赖框架:
- LocalAuthentication.framework
-
- #import <LocalAuthentication/LocalAuthentication.h>
- LocalAuthentication.framework
- #import <LocalAuthentication/LocalAuthentication.h>
注意事项:做iOS 8
以下版本适配时,务必进行API验证,避免调用相关API引起崩溃。
使用类:LAContext
指纹验证操作对象
代码:
- - (void)authenticateUser
- {
- //初始化上下文对象
- LAContext* context = [[LAContext alloc] init];
- //错误对象
- NSError* error = nil;
- NSString* result = @"Authentication is needed to access your notes.";
-
- //首先使用canEvaluatePolicy 判断设备支持状态
- if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
- //支持指纹验证
- [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:result reply:^(BOOL success, NSError *error) {
- if (success) {
- //验证成功,主线程处理UI
- }
- 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;
- }
- default:
- {
- [[NSOperationQueue mainQueue] addOperationWithBlock:^{
- //其他情况,切换主线程处理
- }];
- break;
- }
- }
- }
- }];
- }
- else
- {
- //不支持指纹识别,LOG出错误详情
-
- switch (error.code) {
- case LAErrorTouchIDNotEnrolled:
- {
- 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);
- [self showPasswordAlert];
- }
- }
- typedef NS_ENUM(NSInteger, LAError)
- {
- //授权失败
- LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed,
-
- //用户取消Touch ID授权
- LAErrorUserCancel = kLAErrorUserCancel,
-
- //用户选择输入密码
- LAErrorUserFallback = kLAErrorUserFallback,
-
- //系统取消授权(例如其他APP切入)
- LAErrorSystemCancel = kLAErrorSystemCancel,
-
- //系统未设置密码
- LAErrorPasscodeNotSet = kLAErrorPasscodeNotSet,
-
- //设备Touch ID不可用,例如未打开
- LAErrorTouchIDNotAvailable = kLAErrorTouchIDNotAvailable,
-
- //设备Touch ID不可用,用户未录入
- LAErrorTouchIDNotEnrolled = kLAErrorTouchIDNotEnrolled,
- } NS_ENUM_AVAILABLE(10_10, 8_0);
- - (void)authenticateUser
- {
- //初始化上下文对象
- LAContext* context = [[LAContext alloc] init];
- //错误对象
- NSError* error = nil;
- NSString* result = @"Authentication is needed to access your notes.";
- //首先使用canEvaluatePolicy 判断设备支持状态
- if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
- //支持指纹验证
- [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:result reply:^(BOOL success, NSError *error) {
- if (success) {
- //验证成功,主线程处理UI
- }
- 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;
- }
- default:
- {
- [[NSOperationQueue mainQueue] addOperationWithBlock:^{
- //其他情况,切换主线程处理
- }];
- break;
- }
- }
- }
- }];
- }
- else
- {
- //不支持指纹识别,LOG出错误详情
- switch (error.code) {
- case LAErrorTouchIDNotEnrolled:
- {
- 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);
- [self showPasswordAlert];
- }
- }
- typedef NS_ENUM(NSInteger, LAError)
- {
- //授权失败
- LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed,
- //用户取消Touch ID授权
- LAErrorUserCancel = kLAErrorUserCancel,
- //用户选择输入密码
- LAErrorUserFallback = kLAErrorUserFallback,
- //系统取消授权(例如其他APP切入)
- LAErrorSystemCancel = kLAErrorSystemCancel,
- //系统未设置密码
- LAErrorPasscodeNotSet = kLAErrorPasscodeNotSet,
- //设备Touch ID不可用,例如未打开
- LAErrorTouchIDNotAvailable = kLAErrorTouchIDNotAvailable,
- //设备Touch ID不可用,用户未录入
- LAErrorTouchIDNotEnrolled = kLAErrorTouchIDNotEnrolled,
- } NS_ENUM_AVAILABLE(10_10, 8_0);
操作流程:首先判断系统版本,iOS 8
及以上版本执行-(void)authenticateUser
方法,方法自动判断设备是否支持和开启Touch ID
。
转载自:http://blog.csdn.net/haogaoming123/article/details/44194819