iOS8以后使用系统TouchID功能

2017年02月09日 iOS 8条评论 阅读1295次

iOS8以后,苹果公开了TouchID的验证功能,使得自己开发的APP能够更好更方便地保护用户信息及数据。

下面是使用TouchID验证的全部代码。


#import <LocalAuthentication/LocalAuthentication.h>
- (void)beginTouch {
    LAContext *context = [[LAContext alloc]init];
    NSError *err = nil;
    if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&err]) {
        if (err) {
            NSLog(@"%@", err);
            return;
        }
        context.localizedFallbackTitle = @"使用密码";
        context.localizedCancelTitle= @"取消";
        [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"现在按上指纹" reply:^(BOOL success, NSError * _Nullable error) {
            if (error) {
                NSLog(@"%@", error);
                switch (error.code) {
                    case LAErrorAuthenticationFailed:
                        NSLog(@"LAErrorAuthenticationFailed:连续三次指纹认证失败!");
                        break;
                    case LAErrorUserCancel:
                        NSLog(@"LAErrorUserCancel:用户已取消!");
                        break;
                    case LAErrorUserFallback:
                        NSLog(@"LAErrorUserFallback:用户选择使用Fallback的功能!");
                        break;
                    case LAErrorSystemCancel:
                        NSLog(@"LAErrorSystemCancel:TouchID对话框被系统取消,例如按下Home或者电源键进入后台!");
                        break;
                    case LAErrorPasscodeNotSet:
                        NSLog(@"LAErrorPasscodeNotSet:设备系统未设置密码!");
                        break;
                    case LAErrorTouchIDNotAvailable:
                        NSLog(@"LAErrorTouchIDNotAvailable:设备未设置Touch ID!");
                        break;
                    case LAErrorTouchIDNotEnrolled:
                        NSLog(@"LAErrorTouchIDNotEnrolled:用户未录入指纹!");
                        break;
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_9_0
                    case LAErrorTouchIDLockout:
                        NSLog(@"LAErrorTouchIDLockout:Touch ID被锁,需要用户输入密码解锁!");
                        break;
                    case LAErrorAppCancel:
                        NSLog(@"LAErrorAppCancel:如突然来了电话,电话应用进入前台,APP被挂起啦!");
                        break;
                    case LAErrorInvalidContext:
                        NSLog(@"LAErrorInvalidContext:LAContext传递给这个调用之前已经失效!");
                        break;
#else
#endif
                    default:
                        break;
                }
                return;
            }
            if (success) {
                NSLog(@"指纹认证成功!");
            } else {
                NSLog(@"指纹认证失败!");
            }
            dispatch_async(dispatch_get_main_queue(), ^{
                // do something on the UI thread
            });
        }];
    } else {
        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Alert" message:@"设备没有指纹认证功能" preferredStyle:UIAlertControllerStyleAlert];
        UIAlertAction *action = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
        }];
        [alertController addAction:action];
        [self presentViewController:alertController animated:YES completion:nil];
    }
}


值得注意的是当用户按下指纹取得到指纹认证结果时,需要在主线程更新UI。

分享本文至:

WRITTEN BY

avatar
本文标签:iOSTouchID
看了本文是不是觉得很赞,那就赶紧点击下面按钮分享给身边的朋友吧!

8 条评论

  1. avatar PDM系统

    IOS开发比安卓的还是有不少技术含量的

  2. avatar 宁波PLM

    这文章值得学习一下

  3. avatar PDM系统

    这么好的文章值得学习

  4. avatar 盘古科技

    这真是好东西  认真学习一下

  5. avatar 老董优惠码

    不错 感谢分享

  6. avatar 轿车托运公司

    好东西 点个赞

欢迎留言




用户登录

sitemap