iOS Touch ID 简易开发教程

作者: 秋刀生鱼片 | 来源:发表于2015-11-27 11:03 被阅读460次

    基础知识

    支持系统和机型

    iOS系统的指纹识别功能最低支持的机型为iPhone 5s,最低支持系统为iOS 8,虽然安装iOS 7系统的5s机型可以使用系统提供的指纹解锁功能,但由于API并未开放,所以理论上第三方软件不可使用。

    依赖框架

    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);
    

    操作流程

    首先判断系统版本,iOS 8及以上版本执行-(void)authenticateUser方法,方法自动判断设备是否支持和开启Touch ID

    转载请注明出处

    相关文章

      网友评论

      本文标题:iOS Touch ID 简易开发教程

      本文链接:https://www.haomeiwen.com/subject/kjudhttx.html