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

  • 相关阅读:
    11 数值的整数次方
    10 二进制中1的个数
    6 重建二叉树
    5 从尾到头打印链表
    计算机网络面试题
    Http和Https的区别
    UVALive 7749 Convex Contour (计算几何)
    Gym 101190H Hard Refactoring (模拟坑题)
    UVa 11324 The Largest Clique (强连通分量+DP)
    HDU 6006 Engineer Assignment (状压DP)
  • 原文地址:https://www.cnblogs.com/guchunli/p/6232949.html
Copyright © 2011-2022 走看看