在游戏开发中,因为有帐号密码,并且再加上QQ登录这些功能之后,就不怎么用的到TouchID这个指纹解锁功能,但是如果是单机App应用的话,倒是可以加上这个功能,来为本地加个锁。

 title=

指纹解锁开发很简单,只用两步,引用头文件,接收返回结果

一、引入库和头文件

在项目中引入LocalAuthentication.framework这个系统库,然后在需要用的地方导入头文件

#import <LocalAuthentication/LocalAuthentication.h>

二、加入TouchID功能

TouchID只用这两个函数

//判断是否支持TouchID功能
- (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)error __attribute__((swift_error(none)));
//指纹解锁
- (void)evaluatePolicy:(LAPolicy)policy  localizedReason:(NSString *)localizedReason  reply:(void(^)(BOOL success, NSError * __nullable error))reply;

使用的时候首先判断手机是否支持touchID功能,如果支持,就开始指纹解锁,然后在指纹解锁的代码块中,实现解锁成功和解锁失败的逻辑。需要真机调试,模拟器不支持

//创建
    LAContext *lacontext = [[LAContext alloc] init];
    NSError* error;
    /**
     LAPolicyDeviceOwnerAuthentication  9.0以上可用,指纹解锁六次错误自动跳转密码输入
     LAPolicyDeviceOwnerAuthenticationWithBiometrics    8.0以上可用,指纹解锁五次错误消失
     */
    //是否支持指纹解锁
    if ([lacontext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
         NSLog(@"支持指纹解锁");
        [lacontext evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"请按指纹解锁" reply:^(BOOL success, NSError * _Nullable error) {
            if (success) {
                NSLog(@"解锁成功");
            }
            else{
                switch (error.code) {
                    case LAErrorSystemCancel:
                    {
                        NSLog(@"切换到了其他APP");
                        break;
                    }
                    case LAErrorUserCancel:
                    {
                        NSLog(@"用户取消验证");
                        lacontext.localizedCancelTitle=@"用户取消";
                        break;
                    }
                    case LAErrorUserFallback:
                    {
                        NSLog(@"用户选择输入密码");
                        [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                            //用户选择输入密码,切换主线程处理
                            lacontext.localizedFallbackTitle=@"输入登录密码";
                            NSLog(@"sss");
                        }];
                        break;
                    }
                    default:
                    {
                        NSLog(@"%@",error.localizedDescription);
                    }
                        break;
                }
            }
        }];
    }
    else{
        //不支持指纹识别,LOG出错误详情
        switch (error.code) {
            case LAErrorTouchIDNotEnrolled:
            {
                NSLog(@"TouchID未录入");
                break;
            }
            case LAErrorPasscodeNotSet:
            {
                NSLog(@"没有设置密码");
                break;
            }
            case LAErrorTouchIDNotAvailable:
            {
                NSLog(@"TouchID不可用");
                break;
            }
            default:
            {
                NSLog(@"%@",error.localizedDescription);
                break;
            }
        }
    }

其中解锁失败的原因可以在LAError.h中查看解释,而初始化的时候,下面这两种区别就是LAPolicyDeviceOwnerAuthentication会自动弹出密码输入,而LAPolicyDeviceOwnerAuthenticationWithBiometrics则需要自己去实现

  • LAPolicyDeviceOwnerAuthentication  9.0以上可用,指纹解锁六次错误自动跳转密码输入
  • LAPolicyDeviceOwnerAuthenticationWithBiometrics    8.0以上可用,指纹解锁五次错误消失

弹出来的密码输入样式是下面这个样子,透明的背景

 title=

三、Demo下载

GitHub下载地址:https://github.com/DamonHu/HudongBlogDemo/tree/master/touchIDDemo

四、参考文章


☟☟可点击下方广告支持一下☟☟

最后修改:2021 年 03 月 08 日
请我喝杯可乐,请随意打赏: ☞已打赏列表