iOS Coding项目片段记录(七)

1.指纹解锁

今天项目中需要加入指纹解锁功能,之前没有了解过,只知道iOS8 新特性中有这么回事。

既然要搞,直接下载官方的demo,结合官方文档来看。

官方demo地址:https://developer.apple.com/library/content/samplecode/KeychainTouchID/Introduction/Intro.html

主要代码也就下面这些:

 1 - (void)evaluatePolicy {
 2     LAContext *context = [[LAContext alloc] init];
 3     __block  NSString *message;
 4     
 5     // Show the authentication UI with our reason string.
 6     [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"Unlock access to locked feature" reply:^(BOOL success, NSError *authenticationError) {
 7          if (success) {
 8              message = @"evaluatePolicy: succes";
 9          }
10          else {
11              message = [NSString stringWithFormat:@"evaluatePolicy: %@", authenticationError.localizedDescription];
12          }
13 
14          [self printMessage:message inTextView:self.textView];
15      }];
16 }

接下来解释下 都是在干啥:

在使用过程中,需要导入的头文件是:
#import <LocalAuthentication/LocalAuthentication.h> 

接下来根据自己的实例,注释说明:

//初始化上下文对象  
    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) {  
                //验证成功, 
            }  
            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);  
        
    }  
}  


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);  
原文地址:https://www.cnblogs.com/741162830qq/p/6222937.html