指纹解锁

现在为了安全,对于指纹解锁的应用越来越多.苹果有完善的 API, 只要简单的调用就可以实现.下面看一下怎么使用.

  1. 导入需要的框架
#import <LocalAuthentication/LocalAuthentication.h>

2.这里用到了一个新的类LAContext,初始化对象.

 LAContext *lac = [[LAContext alloc] init];
// 判断是否支持指纹解锁
    BOOL isSupport = [lac canEvaluatePolicy:kLAPolicyDeviceOwnerAuthenticationWithBiometrics error:nil];
  1. 处理业务逻辑
if (isSupport) {
        // localizedReason: 提示语,比如qq的@"通过验证指纹解锁 QQ"
        [lac evaluatePolicy:kLAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"哈哈" reply:^(BOOL success, NSError * _Nullable error) {
            // 当前线程是在子线程
            NSLog(@"===%@", [NSThread currentThread]);
            if (success) {
                // 处理解锁成功的 业务逻辑 如果是更新 UI 一定要放在主线程中
                NSLog(@"指纹解锁成功");
                dispatch_async(dispatch_get_main_queue(), ^{
                    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
                    view.backgroundColor = [UIColor redColor];
                    [self.window addSubview:view];
                });

                /*
                UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
                view.backgroundColor = [UIColor redColor];
                [self.window addSubview:view];
                // This application is modifying the autolayout engine from a background thread, which can lead to engine corruption and weird crashes.  This will cause an exception in a future release.
              */
              
            } else {

  /*
         typedef NS_ENUM(NSInteger, LAError)
         {
         // 授权失败
         LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed,
         
         // 用户取消
         LAErrorUserCancel           = kLAErrorUserCancel,
         
         // 用户选择输入密码
         LAErrorUserFallback         = kLAErrorUserFallback,
         
        // 系统取消授权(例如其他APP切入)
         LAErrorSystemCancel         = kLAErrorSystemCancel,
         
         // 未设置密码
         LAErrorPasscodeNotSet       = kLAErrorPasscodeNotSet,
         
         // Touch ID不可用,例如未打开
         LAErrorTouchIDNotAvailable  = kLAErrorTouchIDNotAvailable,
         
        //设备Touch ID不可用,用户未录入
         LAErrorTouchIDNotEnrolled   = kLAErrorTouchIDNotEnrolled,
         

        // 后面三种情况是9.0之后新增的.
        // 多次错误需要输入密码
         LAErrorTouchIDLockout   NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorTouchIDLockout,
         
         // app 取消验证
         LAErrorAppCancel        NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorAppCancel,
         
         // context 被释放了
         LAErrorInvalidContext   NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorInvalidContext
         } NS_ENUM_AVAILABLE(10_10, 8_0);

         */

                NSLog(@"---%@", error.localizedDescription);
                switch (error.code) {
                    case LAErrorSystemCancel:
                        NSLog(@"系统取消验证");
                        break;
                    
                    case LAErrorUserCancel:
                        NSLog(@"用户取消");
                        break;
                        
                    case LAErrorUserFallback:
                        NSLog(@"用户选择其他方式");
                        break;
                    default:
                        break;
                }
        }];
    }
目前的效果
QQ 的效果
  1. 注意事项:
    我们会发现和 QQ 的效果不太一样. 其实LAContext有一个属性*localizedFallbackTitle,如果没有设置,默认就是输入密码.
// 这里设置成空字符串,就会达到 QQ 那种只有一个选项的效果.
 lac.localizedFallbackTitle = @"";
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 指纹解锁的使用越来越普遍了,主要是使用方便,再用之前还是先了解一下如何使用吧。 一、API介绍 使用指纹功能,必须...
    my_杨哥阅读 2,289评论 1 24
  • 一直想玩玩指纹解锁,近期时间比较闲,就研究了一下这个指纹解锁。这个功能实现起来还是很简单的,虽然看起来比较高大上,...
    weicyNO_1阅读 3,226评论 0 3
  • 好久没写文章了,最近也比较偷懒,今天继续讨论我实际开发中遇到的需求,那就是关于APP解锁,大家都知道。现在越来越多...
    青蛙要fly阅读 3,128评论 2 26
  • title: 指纹解锁date: 2015-9-16 11:39:45categories: iOStags: 指...
    秋儿Luckyfy阅读 310评论 0 0
  • 导语 苹果在iPhone 5s之后添加了Touch ID指纹识别功能,用户可以通过指纹来对iPhone进行安全而高...
    恰克斯阅读 4,342评论 4 51