zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    [BIRT]WebViewerExample4.6.0版本启动报java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
    [转载][MySQL]slave have equal MySQL Server UUIDs原因及解决
    mvn package时设置了maven.test.skip=true依旧执行单元测试
    [转载]log4j输出日志级别控制
    使用Apache pdfbox: 从Linux安装字体到log4j设置日志级别
    [转载]过滤器(filter)和拦截器(interceptor)区别
    设置response的Header使得Chrome浏览器打开PDF而不自动下载
    cf 1174 D Ehab and the Expected XOR Problem
    cf 1169 C Increasing by Modulo
    蓝精灵之小饭写数字
  • 原文地址:https://www.cnblogs.com/guchunli/p/6232949.html
Copyright © 2011-2022 走看看