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

iOS开发 实现指纹识别及验证

2017-04-20 20:17 603 查看
最近在写一个demo,打算实现指纹验证以及人脸识别(手势解锁网上demo很多所以不打算集成,很抱歉并没有嘲讽大神们的技术结晶的意思,只是解锁方式择其二就行了),本篇只是记录一下初次学习指纹识别的过程以及心得。

苹果公司推出的指纹识别,提供的只有验证是否支持指纹以及指纹是否正确的功能,开发者并不能透过home键或者苹果提供的sdk获取到用户的指纹信息,包括支付宝的指纹支付也只是简单的验证touchID而已并,接下来开始使用。。。。

首先,导入头文件(l里边提供的属性和方法不是很多)

#import <LocalAuthentication/LocalAuthentication.h>
接下来就是使用方法,创建对象,设置属性,调用苹果提供的方法,流程如下

    //初始化上下文对象

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

       //这个设置的使用密码的字体,当text=@""时,按钮将被隐藏

    context.localizedFallbackTitle=@"";

       //这个设置的取消按钮的字体

    context.localizedCancelTitle=@"取消";

    //错误对象

    NSError* error =
nil;

    NSString* result =
@"需要验证您的touch ID";

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

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

        //支持指纹验证

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

            if (success) {

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

                //NSLog(@"验证成功");

            }

            else

            {

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

                switch (error.code) {

                    case
LAErrorSystemCancel:

                    {

                        //NSLog(@"Authentication was cancelled by the system");

                        //切换到其他APP,系统取消验证Touch
ID

                        break;

                    }

                    case
LAErrorUserCancel:

                    {

                        //NSLog(@"Authentication was cancelled by the user");

                        //用户取消验证Touch ID

                        break;

                    }

                    case
LAErrorUserFallback:

                    {

                        //NSLog(@"User selected to enter custom password");

                        [[NSOperationQueue
mainQueue] addOperationWithBlock:^{

                            //用户选择其他验证方式,切换主线程处理

                        }];

                        break;

                    }

                    default:

                    {

                        [[NSOperationQueue
mainQueue] addOperationWithBlock:^{

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

                        }];

                        break;

                    }

                }

            }

        }];

    }

    else

    {

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

        switch (error.code) {

            case
LAErrorTouchIDNotEnrolled:

            {

                //NSLog(@"TouchID is not enrolled");

                break;

            }

            case
LAErrorPasscodeNotSet:

            {

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

                break;

            }

            default:

            {

                //NSLog(@"TouchID not available");

                break;

            }

        }

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

    }

如上面代码,对象提供的属性只有几个,两个按钮的字体,好像还有一个最大错误次数,还有一个只读的状态属性,这里都没有用到

提供的方法只有两个,一个是验证touch ID 是否可以使用,另一个是使用touch ID进行验证,方法给有回调block,里边的error都有错误参数,这里不做详述

touch ID 在验证连续错误三次的时候,会停止touch ID的使用,需要输入手机的密码以解锁。

在使用的过程中,笔者在block回调中使用了LCProgressHUD,但是界面出现了卡死的现象,通过视图层级下,发现是由于LCProgressHUD的界面没有清除,导致整个界面被它覆盖,形成卡死假象。

整个使用过程就酱紫,以后还需要多花时间研究。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: