iOS专题资源__系统知识点iOS技术交流园ios开发

iOS指纹解锁

2016-05-27  本文已影响3808人  白起2021

苹果iPhone5s后开始推出指纹解锁功能,很大的提升了用户在密码解锁中的用户体验,而且苹果的指纹解锁技术不但操作简单而且安全性极高。根据苹果发言人称,指纹识别只可认出‘活手指’,因为iPhone5s(及以后机型)上的指纹传感器是通过发出射频信号探测手指纹路的,而且只探测手指表皮下面的一层皮肤,这样可以防止指纹被复制、盗窃。由于本篇文章主要是记录iOS开发中如何集成指纹解锁功能,所以原理方面就不过多阐述了。

iOS8后苹果便开放了指纹解锁的API,允许开发者在自己的APP中集成指纹解锁功能了,而且集成也特别简单。

首先,引入依赖框架 LocalAuthentication.framework

#import <LocalAuthentication/LocalAuthentication.h>

然后,判断系统是否为iOS8及以上

    //iOS8.0后才支持指纹识别接口
    if ([UIDevice currentDevice].systemVersion.floatValue < 8.0) {
        return;
    }

最后,在APP启动时调用以下方法即可完成指纹解锁的全部功能集成

- (void)evaluateAuthenticate
{
    //创建LAContext
    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
            }
            else
            {
                NSLog(@"%@",error.localizedDescription);
                switch (error.code) {
                    case LAErrorSystemCancel:
                    {
                        //系统取消授权,如其他APP切入
                        break;
                    }
                    case LAErrorUserCancel:
                    {
                        //用户取消验证Touch ID
                        break;
                    }
                    case LAErrorAuthenticationFailed:
                    {
                        //授权失败
                        break;
                    }
                    case LAErrorPasscodeNotSet:
                    {
                        //系统未设置密码
                        break;
                    }
                    case LAErrorTouchIDNotAvailable:
                    {
                        //设备Touch ID不可用,例如未打开
                        break;
                    }
                    case LAErrorTouchIDNotEnrolled:
                    {
                        //设备Touch ID不可用,用户未录入
                        break;
                    }
                    case LAErrorUserFallback:
                    {
                        [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                            //用户选择输入密码,切换主线程处理
                            
                        }];
                        break;
                    }
                    default:
                    {
                        [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                            //其他情况,切换主线程处理
                        }];
                        break;
                    }
                }
            }
        }];
    }
    else
    {
        //不支持指纹识别,LOG出错误详情
        NSLog(@"不支持指纹识别");

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

这里有个地方需要提下,当用户连续多次使用Touch ID失败后,Touch ID会被锁,需要用户输入手机开机密码解锁,这一整套的交互iOS系统已经封装在LocalAuthentication.framework里了,系统会自动弹出相应的操作界面,不需要开发者去操心,这大大的简便了开发者的开发集成和逻辑处理。所以说为什么iOS系统用着就是爽,苹果对各种你能想到的和没想到的细节都处理得非常完美,用户就只管使用就好,不需要关心太多,能不好吗,哈哈,就不打广告了。

上一篇下一篇

猜你喜欢

热点阅读