iOS干货ios编程技术收集iOS 砖家纪实录

iOS开发-Touch ID指纹解锁

2016-01-26  本文已影响3075人  恰克斯

导语

苹果在iPhone 5s之后添加了Touch ID指纹识别功能,用户可以通过指纹来对iPhone进行安全而高效的访问。现在很多应用都添加了指纹识别,如QQ登录,支付宝支付等等。

利用Touch ID进行指纹解锁

效果图

源码地址

说明

  1. Touch ID的调用接口是LocalAuthentication.framework,调用时需要导入头文件
    #import <LocalAuthentication/LocalAuthentication.h>

  2. 需要用的方法有两个
    - (BOOL)canEvaluatePolicy:(LAPolicy)policy
    error:(NSError * __autoreleasing *)error attribute((swift_error(none)));
    用来验证设备支不支持Touch ID

     - (void)evaluatePolicy:(LAPolicy)policy
            localizedReason:(NSString *)localizedReason
                      reply:(void(^)(BOOL success, NSError * __nullable error))reply;
    

验证Touch ID(会有弹出框)

  1. 当输入错误的指纹时会弹出"再试一次"验证框

    效果图
    //初始化
    LAContext context = [LAContext new];
    /
    * 这个属性用来设置指纹错误后的弹出框的按钮文字
    * 不设置默认文字为“输入密码”
    * 设置@""将不会显示指纹错误后的弹出框
    */
    context.localizedFallbackTitle = @"忘记密码";
  2. 回调方法
    接口提供了Touch ID验证成功和失败的回调方法
    [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
    localizedReason:@"指纹验证"
    reply:^(BOOL success, NSError * _Nullable error) {
    if (success) {
    //验证成功执行
    NSLog(@"指纹识别成功");
    //在主线程刷新view,不然会有卡顿
    dispatch_async(dispatch_get_main_queue(), ^{
    [view removeFromSuperview];
    //保存设置状态
    [[NSUserDefaults standardUserDefaults] setValue:[NSString stringWithFormat:@"%d", sender.isOn] forKey:@"touchOn"];
    });
    } else {
    if (error.code == kLAErrorUserFallback) {
    //Fallback按钮被点击执行
    NSLog(@"Fallback按钮被点击");
    } else if (error.code == kLAErrorUserCancel) {
    //取消按钮被点击执行
    NSLog(@"取消按钮被点击");
    } else {
    //指纹识别失败执行
    NSLog(@"指纹识别失败");
    }
    dispatch_async(dispatch_get_main_queue(), ^{
    [view removeFromSuperview];
    [sender setOn:!sender.isOn animated:YES];
    [[NSUserDefaults standardUserDefaults] setValue:[NSString stringWithFormat:@"%d", sender.isOn] forKey:@"touchOn"];
    });
    }
    }];

结语

在实际开发中Touch ID的应用肯定不是这么简单,而是和许多功能一起进行复杂的糅合,但是只要知道了核心方法,多尝试几遍,开发就是要不断地摸索。

上一篇下一篇

猜你喜欢

热点阅读