Touch ID

作者: 念念不忘的 | 来源:发表于2016-12-09 16:01 被阅读14次

    1.引入LocalAuthentication.framework库,并导入头文件

    #import <LocalAuthentication/LocalAuthentication.h>
    

    2.判断设备是否支持Touch ID

    LAContext *context = [[LAContext alloc] init];
        
        /*
         * LAPolicyDeviceOwnerAuthenticationWithBiometrics(指纹验证)
         * LAPolicyDeviceOwnerAuthentication(密码验证)
         */
        NSError *error;
        // 判断是否支持指纹验证
        BOOL can = [context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error];
        if (can) {// 支持
            NSLog(@"支持TouchID");
            [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"指纹验证" reply:^(BOOL success, NSError * _Nullable error) {
                if (success) {// 验证成功
                    NSLog(@"TouchID验证成功");
                }
                if (error) {
                    NSLog(@"error==%@, %ld", error.localizedDescription, error.code);
                }
            }];
        } else {// 不支持
            NSLog(@"不支持%@", error);
        }
    

    3.设备支持Touch ID验证失败处理

    [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"指纹验证" reply:^(BOOL success, NSError * _Nullable error) {
                if (success) {// 验证成功
                    NSLog(@"TouchID验证成功");
                }
                if (error) {
                    NSLog(@"error==%@, %ld", error.localizedDescription, error.code);
                    switch (error.code) {
                        case LAErrorSystemCancel:
                            NSLog(@"身份验证被系统取消(验证时当前APP被移至后台或者点击了home键导致验证退出时提示)");
                            break;
                        case LAErrorUserCancel:
                            NSLog(@"身份验证被用户取消(当用户点击取消按钮时提示)");
                            break;
                        case LAErrorAuthenticationFailed:
                            NSLog(@"身份验证没有成功,因为用户未能提供有效的凭据(连续3次验证失败时提示)");
                            break;
                        case LAErrorPasscodeNotSet:
                            NSLog(@"Touch ID无法启动,因为没有设置密码(当系统没有设置密码的时候,Touch ID也将不会开启)");
                            break;
                        case LAErrorTouchIDNotAvailable:
                            NSLog(@"无法启动身份验证");  // 这个没有检测到,应该是出现硬件损坏才会出现
                            break;
                        case LAErrorTouchIDNotEnrolled:
                            NSLog(@"无法启动身份验证,因为触摸标识没有注册的手指");  // 这个暂时没检测到
                            break;
                        case LAErrorUserFallback:
                        {
                            [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                                NSLog(@"用户选择输入密码,切换主线程处理");
                            }];
                            break;
                        }
                        default:
                        {
                            [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                                NSLog(@"其他情况,切换主线程处理");   // 5次失败进入,如果继续验证,则需要输入密码解锁
                            }];
                            break;
                        }
                    }
                }
            }];
    

    4.设备不支持

    NSLog(@"不支持%@", error);
            NSLog(@"不支持指纹识别");
            switch (error.code) {
                case LAErrorTouchIDNotEnrolled:
                    NSLog(@"设备Touch ID不可用");
                    break;
                case LAErrorPasscodeNotSet:
                    NSLog(@"系统未设置密码");
                    break;
                default:
                    NSLog(@"TouchID不可用或已损坏");
                    break;
            }
            NSLog(@"%@", error.localizedDescription);
    

    相关文章

      网友评论

          本文标题:Touch ID

          本文链接:https://www.haomeiwen.com/subject/fioemttx.html