您的位置:首页 > 移动开发 > IOS开发

iOS之指纹解锁

2017-07-21 15:59 295 查看
对几种情况的说明
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];

    

    //iOS8.0后才支持指纹识别接口

    if ([UIDevicecurrentDevice].systemVersion.floatValue
< 8.0) {

        return;

    }

    [selfevaluateAuthenticate];

}

- (void)evaluateAuthenticate

{

    //创建LAContext

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


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

    NSError* error =nil;

    NSString* result =@"请验证已有指纹";

    

    //首先使用canEvaluatePolicy判断设备支持状态

    if ([contextcanEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometricserror:&error])
{

        //支持指纹验证

        [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometricslocalizedReason:result
reply:^(BOOL success,NSError *error) {

            if (success) {

                //验证成功,主线程处理UI

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

            }

            else

            {

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

                switch (error.code) {

                    caseLAErrorSystemCancel:

                    {

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

                        break;

                    }

                    caseLAErrorUserCancel:

                    {

                        //用户取消验证Touch ID

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

                        break;

                    }

                    caseLAErrorAuthenticationFailed:

                    {

                        //授权失败

                        break;

                    }

                    caseLAErrorPasscodeNotSet:

                    {

                        //系统未设置密码

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

                        break;

                    }

                    caseLAErrorTouchIDNotAvailable:

                    {

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

                        NSLog(@"为打开");

                        break;

                    }

                    caseLAErrorTouchIDNotEnrolled:

                    {

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

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

                        break;

                    }

                    caseLAErrorUserFallback:

                    {

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

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

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

                        [[NSOperationQueuemainQueue]
addOperationWithBlock:^{

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

                            

                        }];

                        break;

                    }

                    default:

                    {

                        [[NSOperationQueuemainQueue]
addOperationWithBlock:^{

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

                        }];

                        break;

                    }

                }

            }

        }];

    }

    else

    {

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

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

        

        switch (error.code) {

            caseLAErrorTouchIDNotEnrolled:

            {

                NSLog(@"TouchID is not enrolled");

                break;

            }

            caseLAErrorPasscodeNotSet:

            {

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

                break;

            }

            default:

            {

                NSLog(@"TouchID not available");

                break;

            }

        }

        

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

    }

}

- (void)didReceiveMemoryWarning {

    [superdidReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: