Touch ID

2016-12-09  本文已影响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);
上一篇下一篇

猜你喜欢

热点阅读