iOS 8使用Touch ID进行身份认证

来源:互联网 发布:ctf数据库截断 编辑:程序博客网 时间:2024/05/16 01:26

iOS 8使用Touch ID进行身份认证


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


依赖框架LocalAuthentication.framework

#import <LocalAuthentication/LocalAuthentication.h>


iOS 8以下版本适配时,务必进行API验证,避免调用相关API引起崩溃。


// 用来判断设备是否支持Touch ID

  - (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)error;

// 真正验证身份的函数

  - (void)evaluatePolicy:(LAPolicy)policy

       localizedReason:(NSString *)localizedReason

                 reply:(void(^)(BOOL success, NSError *error))reply;

如果canEvaluatePolicy返回YES,表示设备支持指纹识别,那么便可以调用evaluatePolicy函数进行指纹识别了。调用evaluatePolicy函数后会弹出一个alert

LAContextlocalizedFallbackTitle属性,如果不设置的话,默认是”Enter Password”,如果该属性设置为@“”(空字符串),该按钮会被隐藏。



- (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];

    }

}


//授权失败

LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed,


//用户取消Touch ID授权

LAErrorUserCancel           = kLAErrorUserCancel,


//用户选择输入密码

LAErrorUserFallback         = kLAErrorUserFallback,


//系统取消授权(例如其他APP切入)

LAErrorSystemCancel         = kLAErrorSystemCancel,


//系统未设置密码

LAErrorPasscodeNotSet       = kLAErrorPasscodeNotSet,


//设备Touch ID不可用,例如未打开

LAErrorTouchIDNotAvailable  = kLAErrorTouchIDNotAvailable,


//设备Touch ID不可用,用户未录入

LAErrorTouchIDNotEnrolled   = kLAErrorTouchIDNotEnrolled,

0 0
原创粉丝点击