TouchID工具类

来源:互联网 发布:owncloud php网盘源码 编辑:程序博客网 时间:2024/06/05 18:46

引用

#import <LocalAuthentication/LocalAuthentication.h>

typedef void(^TouchIDFinish)(BOOL success, NSString * strAlter ,LAError errorCode);

判断

+(BOOL)isSupportTouchID{    //创建LAContext    LAContext* context = [[LAContext alloc] init];    NSError* error = nil;    if ([[[UIDevice currentDevice]systemVersion] floatValue]>=8.0) {        return [context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error];    }else{        return NO;    }}

初始化并回调

+(void)initWithNeedStr:(NSString *)needStr fallbackTitle:(NSString *)fallbackTitle touchID:(TouchIDFinish)touchFinish{    if (touchFinish) {        //创建LAContext        LAContext *context = [LAContext new];                //这个属性是设置指纹输入失败之后的弹出框的选项        context.localizedFallbackTitle = fallbackTitle;                NSError *error = nil;        if ([self isSupportTouchID]) {            NSLog(@"支持指纹识别");            [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:needStr reply:^(BOOL success, NSError * _Nullable error) {                NSString *strAlter = @"";                if (success) {                    strAlter = @"验证成功 刷新主界面";                }else{                    NSLog(@"%@",error.localizedDescription);                    switch (error.code) {                        case LAErrorSystemCancel:                        {                            strAlter = @"系统取消授权,如其他APP切入";                            break;                        }                        case LAErrorUserCancel:                        {                            strAlter = @"用户取消验证Touch ID";                            break;                        }                        case LAErrorAuthenticationFailed:                        {                            strAlter = @"授权失败";                            break;                        }                        case LAErrorPasscodeNotSet:                        {                            strAlter = @"系统未设置密码";                            break;                        }                        case LAErrorTouchIDNotAvailable:                        {                            strAlter = @"设备Touch ID不可用,例如未打开";                            break;                        }                        case LAErrorTouchIDNotEnrolled:                        {                            strAlter = @"设备Touch ID不可用,用户未录入";                            break;                        }                        case LAErrorUserFallback:                        {                            strAlter = @"用户选择输入密码,切换主线程处理";                            break;                        }                        default:                        {                            strAlter = @"其他情况,切换主线程处理";                            break;                        }                    }                }                touchFinish(success,strAlter,error.code);            }];        }else{            NSLog(@"不支持指纹识别");            NSString *strAlter = @"";            switch (error.code) {                case LAErrorTouchIDNotEnrolled:                {                    strAlter = @"TouchID is not enrolled";                    break;                }                case LAErrorPasscodeNotSet:                {                    strAlter = @"A passcode has not been set";                    break;                }                default:                {                    strAlter = @"TouchID not available";                    break;                }            }            touchFinish(0,strAlter,error.code);        }    }}

调用

    if ([TouchIDHelper isSupportTouchID]) {        [TouchIDHelper initWithNeedStr:@"请按home键指纹解锁" fallbackTitle:@"没有忘记密码" touchID:^(BOOL success, NSString *strAlter, LAError errorCode) {            if (success) {                NSLog(@"请求网络登录");            }else{                //比较常见的                NSLog(@"strAlter:%@",strAlter);                if (errorCode==LAErrorAuthenticationFailed) {                    NSLog(@"重复验证指纹失效");                }else if (errorCode==LAErrorUserCancel){                    NSLog(@"用户点击取消 一般什么都不做");                }else if (errorCode==LAErrorUserFallback){                    NSLog(@"用户第一次指纹失效 之后点击进入到密码登录");                }            }        }];    }