IOS-Touch ID的简单使用

其实很简单,用于身份认证的所有的接口都在LocalAuthentication framework中, 该framework实际上只有三个头文件:
  LAContext.h
  LAError.h
  LAPublicDefines.h

  而实际用到的函数也只有两个:

// 用来判断设备是否支持Touch ID
- (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)error __attribute__((swift_error(none)));
// 真正验证身份的函数
- (void)evaluatePolicy:(LAPolicy)policy
       localizedReason:(NSString *)localizedReason
                 reply:(void(^)(BOOL success, NSError * __nullable error))reply;

上述两个函数都是LAContext的member function.目前LAPolicy只有一个值:   LAPolicyDeviceOwnerAuthenticationWithBiometrics.

  如果canEvaluatePolicy返回YES,表示设备支持指纹识别,那么便可以调用evaluatePolicy:函数进行指纹识别了.调用evaluatePolicy函数后会弹出一个alert,如下图:


该alert可定制的只有两处:
  1.”To access your photos”提示文字是由 localizedReason参数指定的,用来向用户说明使用Touch ID的目的.
  2.”Enter Password”可由LAContext的localizedFallbackTitle属性设置(LAContext目前只有这一个属性),如果不设置的话,默认是”Enter Password”.值得注意的是,如果该属性设置为@“”(空字符串),该按钮会被隐藏,Evernote应该就是这么做的.
  其他的免谈,当然更别提获取用户的指纹数据了.
  理论上三种情况下会退出验证(alert会被dismiss,reply回调会被调用):
  1.用户指纹通过验证
  2.用户点击”Enter Password”按钮
  3.用户点击”Cancel”按钮
  还有一种情况:用户输入了错误的指纹.这种情况下,该alert不会被dismiss,其标题会由”Touch ID”改为”Try Again”,有弹簧状的动画效果过渡.好了,代码如下(不要忘了引入头文件  <LocalAuthentication/LocalAuthentication.h> ):
- (IBAction)useTouchIdButtonClick:(id)sender {
    LAContext *context = [LAContext new];
    NSError *error;
    context.localizedFallbackTitle = @"Enter Password";
    
    if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthentication error:&error]) {
        NSLog(@"Touch ID is available.");
        [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"Use Touch ID to login in." reply:^(BOOL success, NSError * _Nullable error) {
            if (success) {
                NSLog(@"authenticated using Touch ID.");
            }else{
                if (error.code == kLAErrorUserFallback) {
                    
                    NSLog(@"User tapped Enter Password.");
                }else if (error.code == kLAErrorUserCancel){
                    
                    dispatch_async(dispatch_get_main_queue(), ^{
                        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@""
                                                                       message:@"User tapped Enter Password."
                                                                      delegate:nil
                                                             cancelButtonTitle:nil
                                                             otherButtonTitles:@"Ok", nil];
                        [alert show];
                    });
                    
                    NSLog(@"User tapped Cancel.");
                }else{
                    
                    NSLog(@"Authenticated failed.");
                }
            }
        }];
    }else{
        NSLog(@"Touch ID is not available:%@",error);
    }
}
效果图如下:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值