美文网首页
Touch ID使用详细分解

Touch ID使用详细分解

作者: DSA碼侬 | 来源:发表于2017-03-30 14:48 被阅读30次

    由于最近要使用指纹解锁app,就暂且了解了一下,注释非常详细。需要注意的是在successBlock里面代码是后台线程执行的。

    如果需要放在主线程,可添加到主线程上执行:

    1、点击屏幕,弹出Touch ID框

    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
    {
        // ios8.0以上 iphone5s之后才有touchID功能
        [self authenticateUser];
    
    }
    

    2、实现方法

    - (void)authenticateUser
    {
        //初始化上下文对象
        LAContext* context = [[LAContext alloc] init];
        
        //localizedFallbackTitle设置为@""代表指纹输错不会出现右侧“输入密码”字样
        context.localizedFallbackTitle = @"";
    
        //错误对象
        NSError* error = nil;
        NSString* result = @"xxx利用你的Touch ID解锁";
        
        //首先使用canEvaluatePolicy 判断设备是否支持Touch ID的状态
        if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) { // 主线程
            //支持指纹验证
            [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:result reply:^(BOOL success, NSError \*error) {
    #warning 后台线程
                if (success) {
                    //验证成功,后台线程
                    NSLog(@"验证成功");
                }
                else
                {
                    switch (error.code) {
                        case LAErrorSystemCancel:
                        {
                            //切换到其他APP,系统取消验证Touch ID 其他app切入
                            NSLog(@"切换到其他APP,系统取消验证Touch ID 其他app切入Authentication was cancelled by the system"); 
                            break;
                        }
                        case LAErrorAppCancel:
                        {
                            NSLog(@"用户不能控制的挂起 比如打电话");
                            break;
                        }
                        case LAErrorUserCancel:
                        {
                            //用户取消验证Touch ID
                            NSLog(@"用户取消验证Touch IDAuthentication was cancelled by the user"); 
                            break;
                        }
                        case LAErrorUserFallback:
                        {
                            NSLog(@"用户选择输入密码,切换主线程处理User selected to enter custom password");
                            [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                                //用户选择输入密码,切换主线程处理
                            }];
                            break;
                        }
                        case LAErrorTouchIDLockout:
                        {
                           NSLog(@"多次TouchID失败 Touch ID被锁");// 输入多次不正确 执行代码
                            break;
                        }
                        case LAErrorInvalidContext:
                        {
                            NSLog(@"LAContext对象被释放掉了,造成的授权失败");
                            break;
                        }
                        default:
                        {
                            [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                                //其他情况,切换主线程处理
                            }];
                            break;
                        }
                    }
                    NSLog(@"%@",error.localizedDescription);
                }
            }];
        }
        else{ //不支持指纹识别,LOG出错误详情。比如设备不支持或者指纹没开启(指纹没开启也包括输入错误多次被锁定Touch ID)
             #warning 主线程
            switch (error.code) {
                case LAErrorTouchIDNotEnrolled:
                {
                    // 设备Touch ID不可用 用户未录入
                    NSLog(@"设备Touch ID不可用 用户未录入TouchID is not enrolled"); 
                    break;
                }
                case LAErrorPasscodeNotSet:
                {
                    // 系统未设置密码
                    NSLog(@"系统未设置密码A passcode has not been set");
                    break;
                }
                case LAErrorTouchIDNotAvailable:
                {
                    // 设备Touch ID不可用,例如未打开
                    NSLog(@"设备Touch ID不可用,例如未打开A passcode has not been set");
                    break;
                }
                default:
                {
                    // Touch ID被锁定之后,点击屏幕跳到这里
                    NSLog(@"TouchID not available");
                    break;
                }
            }
            
            NSLog(@"%@",error.localizedDescription);
        }
    }

    相关文章

      网友评论

          本文标题:Touch ID使用详细分解

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