iOS之指纹解锁

对几种情况的说明

typedef NS_ENUM(NSInteger, LAError)
{
    //授权失败
    LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed,

    //用户取消Touch ID授权
    LAErrorUserCancel           = kLAErrorUserCancel,

    //用户选择输入密码
    LAErrorUserFallback         = kLAErrorUserFallback,

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

    //系统未设置密码
    LAErrorPasscodeNotSet       = kLAErrorPasscodeNotSet,

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

    //设备Touch ID不可用,用户未录入
    LAErrorTouchIDNotEnrolled   = kLAErrorTouchIDNotEnrolled,
} NS_ENUM_AVAILABLE(10_10, 8_0);

原理说明:指纹识别只可认出‘活手指’,iPhone5s(及以后机型)上的指纹传感器是通过发出射频信号探测手指纹路的,而且只探测手指表皮下面的一层皮肤,这样可以防止指纹被复制、盗窃。

当用户连续多次使用Touch ID失败后,Touch ID会被锁,需要用户输入手机开机密码解锁,这一整套的交互iOS系统已经封装在LocalAuthentication.framework里了,系统会自动弹出相应的操作界面,不需要开发者去操心,这大大的简便了开发者的开发集成和逻辑处理

 
#import "ViewController.h"

#import <LocalAuthentication/LocalAuthentication.h>//指纹解锁需要加入这个引用



@interface ViewController ()



@end



@implementation ViewController



- (void)viewDidLoad {

    [superviewDidLoad];

 }

- (void)evaluateAuthenticate

{

    QMWNWEAKSELF;

    //创建LAContext

    LAContext* context = [[LAContext alloc] init];//这个属性是设置指纹输入失败之后的弹出框的选项

context.localizedFallbackTitle =@"密码输入登录";//指纹识别失败后弹出框最右边的按钮内容,左边是取消。



    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

                NSLog(@"指纹解锁成功");

                [[NSOperationQueue mainQueue] addOperationWithBlock:^{

                    //用户选择输入密码,切换主线程处理

                    NSUserDefaults *def=[NSUserDefaults standardUserDefaults];

                    weakSelf.phonetf.text=[def objectForKey:@"username"];

                    weakSelf.verycodetf.text=[def objectForKey:@"password"];//*******测试用,上线的时候注释掉

                }];

               

            }

            else

            {

                NSLog(@"%@",error.localizedDescription);

                switch (error.code) {

                    caseLAErrorSystemCancel:

                    {

                        //系统取消授权,如其他APP切入

                        break;

                    }

                    caseLAErrorUserCancel:

                    {

                        //用户取消验证Touch ID

                       SLog(@"用户取消指纹解锁");

                        break;

                    }

                    caseLAErrorAuthenticationFailed:

                    {

                        //授权失败

                        break;

                    }

                    caseLAErrorPasscodeNotSet:

                    {

                        //系统未设置密码

                      SLog(@"为设置密码");

                        break;

                    }

                    caseLAErrorTouchIDNotAvailable:

                    {

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

                        SLog(@"为打开");

                        break;

                    }

                    caseLAErrorTouchIDNotEnrolled:

                    {

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

                       SLog(@"用户未录入指纹");

                        break;

                    }

                    caseLAErrorUserFallback:

                    {

//点击密码输入登录按钮调用这里的方法

                        //如果验证指纹失败,可以做其他操作,入跳转到手动输入密码页面





                        SLog(@"输入框失败后弹出的界面底部两个按钮右边一个的点击方法法");



                        [[NSOperationQueue mainQueue] addOperationWithBlock:^{

                            //用户选择输入密码,切换主线程处理

                            

                        }];

                        break;

                    }

                    default:

                    {

                        [[NSOperationQueue mainQueue] addOperationWithBlock:^{

                            //其他情况,切换主线程处理

                        }];

                        break;

                    }

                }

            }

        }];

    }

    else

    {

        //不支持指纹识别,LOG出错误详情

        NSLog(@"不支持指纹识别");

        

        switch (error.code) {

            caseLAErrorTouchIDNotEnrolled:

            {

                SLog(@"TouchID is not enrolled");

                break;

            }

            caseLAErrorPasscodeNotSet:

            {

               SLog(@"A passcode has not been set");

                break;

            }

            default:

            {

              SLog(@"TouchID not available");

                break;

            }

        }

        

       SLog(@"%@",error.localizedDescription);

    }

}

@end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值