Touch ID 实现

Touch ID

1.要求

     机型:iPhone 5s以上

     系统:iOS8以上

     框架:#import <LocalAuthentication/LocalAuthentication.h>

     注意:做iOS 8以下版本适配时,务必进行API验证,避免调用相关API引起崩溃。

2.具体代码实现:

//初始化上下文对象

    LAContext* context = [[LAContext alloc] init];

    //错误对象

    NSError* error = nil;

    NSString* result = @"Authentication is needed to access your notes.";

    

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

    /*

     LAErrorAuthenticationFailed

     LAErrorUserCancel

     LAErrorUserFallback

     LAErrorSystemCancel  被挂起取消了授权(用户自己切到了别的应用)

     LAErrorPasscodeNotSet

     LAErrorTouchIDNotAvailable

     LAErrorTouchIDNotEnrolled

     LAErrorTouchIDLockout  多次连续使用Touch ID失败,Touch ID被锁,需要用户输入密码解锁

     LAErrorAppCancel       被挂起取消了授权(用户不能控制的挂起)

     LAErrorInvalidContext  LAContext对象被释放掉了

     */

    if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {

        //支持指纹验证

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

            if (success) {

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

                NSLog(@"success");

            }

            else

            {

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

                switch (error.code) {

                    case LAErrorAuthenticationFailed:

                    {

                        NSLog(@"用户提供的指纹不对");

                        break;

                    }

                    case LAErrorUserCancel:

                    {

                        NSLog(@"用户点击了取消按钮");

                        break;

                    }

                    case LAErrorUserFallback:

                    {

                        NSLog(@"用户选择输入密码");

                        [[NSOperationQueue mainQueue] addOperationWithBlock:^{

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

                        }];

                        break;

                    }

                    case LAErrorSystemCancel:

                    {

                        NSLog(@"切换到其他的app(按了Home按键),被系统取消");

                        break;

                    }

                    case LAErrorTouchIDLockout :

                    {

                        NSLog(@"用户指纹错误多次,TOuchID 被锁定");

                        break;

                    }

                    case LAErrorAppCancel:

                    {

                        NSLog(@"被(突如其来的)应用(电话)取消");

                        break;

                    }

                    default:

                    {

                        [[NSOperationQueue mainQueue] addOperationWithBlock:^{

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

                        }];

                        break;

                    }

                }

            }

        }];

    }

    else

    {

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

        switch (error.code) {

            case LAErrorPasscodeNotSet:

            {

                NSLog(@"在设置里面没有设置密码");

                break;

            }

            case LAErrorTouchIDNotAvailable:

            {

                NSLog(@"设备不支持TouchID");

                break;

            }

            case LAErrorTouchIDNotEnrolled:

            {

                NSLog(@"在设置里面没有设置TouchId 指纹");

                break;

            }

            case LAErrorInvalidContext:

            {

                NSLog(@"创建的指纹对象失效");

                break;

            }

            default:

            {

                NSLog(@"TouchID not available");

                break;

            }

        }

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

    }

原文链接: https://segmentfault.com/a/1190000002516465

原文地址:https://www.cnblogs.com/guchunli/p/6232949.html