欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

华山论剑之浅谈iOS的Touch ID验证

程序员文章站 2024-03-21 23:49:10
...
华山论剑之浅谈iOS的Touch ID验证


序言


在iOS 8系统开发的时候,苹果官方就开始开放了Touch ID的验证接口功能,这样开发人员就可以在应用程序中判断输入的Touch ID 是否是持有者的Touch ID.当然了,只能验证成功与否,却不能得到具体的信息.


准备工作


  1. 首先我们需要在系统设置的"Touch ID 与密码"这个选项中保存我们的指纹信息.

2.在Xcode中,我们需要导入对应的库.库名和示意图如下.

LocalAuthentication.framework
华山论剑之浅谈iOS的Touch ID验证
添加位置


Touch ID验证实现


  1. 如下,LocalAuthentication.framework中提供了两个方法,我们看一下,这个方法分别的作用.
 //这个方法是用来判断是否能够验证Touch ID

canEvaluatePolicy: error: 
//这个方法是用来验证Touch ID,localizedReason后面跟的是验证过程中提示用户的字符串,reply后面自带着Bolck,我们可以对验证完成之后做出相应的操作.

evaluatePolicy: localizedReason: reply:  
        
  1. 整个代码部分我是写在ViewController里面,用一个Button来调用Touch ID的验证事件,当然,首先我们需要导入LocalAuthentication框架.
#import <LocalAuthentication/LocalAuthentication.h>

验证事件实现部分如下

//验证事件
- (IBAction)touchAction:(id)sender {
    
    LAContext *context = [[LAContext alloc]init];
    
    NSError *error = nil;
    
    if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
        
        
        
        [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"请验证您的Touch ID" reply:^(BOOL success, NSError * _Nullable error) {
           
            if (success) {
                
                tipWithMessage(@"验证成功!");
                
            }else{
            
            
            
                tipWithMessage(@"验证失败!");
                
            
            }
            
            
        }];
        
    }else{
    
    
        NSLog(@"%@",error);
    
    }
    
    
}

#pragma mark ---- 自定义宏弹窗 -----

NS_INLINE void tipWithMessage(NSString *message){
    
    dispatch_async(dispatch_get_main_queue(), ^{
        
        UIAlertView *alerView = [[UIAlertView alloc] initWithTitle:@"提示" message:message delegate:nil cancelButtonTitle:nil otherButtonTitles:nil, nil];
        
        [alerView show];
        
        [alerView performSelector:@selector(dismissWithClickedButtonIndex:animated:) withObject:@[@0, @1] afterDelay:0.9];
        
    });
    
}

我们看一下真机测试效果如何(模拟器根本就不行