iOS笔记之-指纹解锁

支持指纹的话必须是iPhone 5S 以上的机型,虽然iOS7以后已经有了指纹,但是貌似不对第三方程序开放,所以系统得是8.0以上的版本,因此在判断是否支持时可以这样写:

+(BOOL)canShow {
    
    if ([UIDevice currentDevice].systemVersion.floatValue < 8.0) {
        
        return NO;
    }
    
    if (![[WolfFingerLock shareLock].context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:nil]) {
        
        return NO;
    }
    
    return YES;
}

其中第二个判断是LAContext类的判断方法,LAContext类是LocalAuthentication.framework框架中的对象,因此指纹解锁的依赖框架是LocalAuthentication.framework。判断方法中有个参数得说明一下:

  • LAPolicyDeviceOwnerAuthenticationWithBiometrics
  • LAPolicyDeviceOwnerAuthentication

看注释的话一大串说明,看着比较麻烦,从用法上讲两个参数的区别在于当用户点击“输入密码”的时候:第一个参数是返回在Error中,code是LAErrorUserFallback,此时程序里走用户要输入密码的逻辑,而第二个参数是用户点击“输入密码”后自动弹出iPhone手机数字密码解锁界面。也就是说,这个参数决定了用户输入密码的时候是你来控制还是交给iPhone来控制。

再看正戏:解锁过程

查了写资料有的写的很详细,但是我觉得实际开发中可能用不了那么多的判断,所以我简化了一些,先看.h文件的声明部分:

/**
 唤起指纹解锁

 @param needPhonePassword 用户点击面板上的“输入密码”后,YES==输入iPhone解锁密码;NO==返回失败的Block中,error code==LAErrorUserFallback;只有在iOS9.0以上版本有效
 @param successed         指纹密码成功
 @param failed            指纹密码失败
 */
+(void)showLockNeedPhonePassword:(BOOL)needPhonePassword OnSuccess:(Successed)successed onFail:(Failed)failed;

再看实现部分:

+(void)showLockNeedPhonePassword:(BOOL)needPhonePassword OnSuccess:(Successed)successed onFail:(Failed)failed {
    
    NSInteger policy = LAPolicyDeviceOwnerAuthenticationWithBiometrics;
    
    if (needPhonePassword && [UIDevice currentDevice].systemVersion.floatValue > 9.0) {
        
        policy = LAPolicyDeviceOwnerAuthentication;
    }
    
    [[WolfFingerLock shareLock].context evaluatePolicy:policy localizedReason:LOCK_SHOW_WORDS reply:^(BOOL success, NSError * _Nullable error) {
       
        if (success) {
            
            successed();
            
        } else {
            
            failed(error);
        }
        
    }];
}

里面有些Block以及宏定义我就不说明了,或者自己写一下,或者下载我的工具,这里面我不知道在哪里上传附件,要下载的同学请移步:我的Code4app,也不知道审核通过了没。

在外部调用的时候这样写就OK:里面的Error.code都在.h文件中有说明。

if ([WolfFingerLock canShow]) {
        
        [WolfFingerLock showLockNeedPhonePassword:YES OnSuccess:^{
            
            //验证成功
            NSLog(@"验证成功");
            
        } onFail:^(NSError *error) {
            
            switch (error.code) {
                case LAErrorSystemCancel:
                    NSLog(@"LAErrorSystemCancel");
                    break;
                case LAErrorUserCancel:
                    NSLog(@"LAErrorUserCancel");
                    break;
                case LAErrorUserFallback:
                    NSLog(@"LAErrorUserFallback");
                    break;
                case LAErrorPasscodeNotSet:
                    NSLog(@"LAErrorPasscodeNotSet");
                    break;
                    
                default:
                    break;
            }
        }];
    }

 

转载于:https://my.oschina.net/wolfcub1110/blog/789141

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值