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

  • 相关阅读:
    Cypress系列(16)- 查找页面元素的基本方法
    Cypress系列(15)- Cypress 元素定位选择器
    Cypress系列(14)- 环境变量详解
    Cypress系列(13)- 详细介绍 Cypress Test Runner
    Cypress系列(12)- Cypress 编写和组织测试用例篇 之 断言
    Cypress系列(11)- Cypress 编写和组织测试用例篇 之 动态生成测试用例
    Cypress系列(10)- Cypress 编写和组织测试用例篇 之 动态跳过测试用例
    Cypress系列(9)- Cypress 编写和组织测试用例篇 之 .skip() 和 .only() 的详细使用
    Cypress系列(8)- Cypress 编写和组织测试用例篇 之 钩子函数Hook
    Cypress系列(7)- Cypress 编写和组织测试用例篇 之 Mocha的介绍
  • 原文地址:https://www.cnblogs.com/guchunli/p/6232949.html
Copyright © 2011-2022 走看看