开发者社区> 悟静> 正文

iOS8 Touch ID api接口调用

简介: Touch ID简介 Touch ID是苹果公司提供的一种将指纹用作密码的简便方式。只需轻触i主屏幕按钮,就能激活Touch ID传感器。主屏幕按钮周围的钢圈检测手指通知 Touch ID读取指纹。
+关注继续查看


Touch ID简介

Touch ID是苹果公司提供的一种将指纹用作密码的简便方式。只需轻触i主屏幕按钮,就能激活Touch ID传感器。主屏幕按钮周围的钢圈检测手指通知 Touch ID读取指纹。Touch ID 不会储存指纹的任何图像。它只存储指纹的数学表达式。

Touch ID的指纹数据存储在A7处理器的一个叫"secure enclave"协处理器上,唯一的Touch ID指纹识别器与唯一单独的A7处理器匹配。也就是说你将Touch ID拆开装到别的iPhone 5s上,Touch ID是无法使用的,因为它无法读取到A7处理器上的指纹数据。


Touch ID接口

使用Touch ID需要导入LocalAuthentication.framework,必须在装有iOS8的真机设备才能编译通过。

导入

[objc] view plaincopy
  1. #import <LocalAuthentication/LAContext.h>  

判断当前是否有可用的Touch ID

    - (BOOL)canEvaluatePolicy  
    {  
        LAContext *context = [[LAContext alloc] init];  
        NSError *error;  
        BOOL success;  
          
        // test if we can evaluate the policy, this test will tell us if Touch ID is available and enrolled  
        success = [context canEvaluatePolicy: LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error];  
          
        return success;  
    }  

判断[context canEvaluatePolicy:error:];判断当前是否有可用Touch ID,设备没有设备没有TouchID或者TouchID未开启返回false,有TouchID并开启返回true.


调用显示验证界面

    - (void)evaluatePolicy  
    {  
        LAContext *context = [[LAContext alloc] init];  
        __block  NSString *msg;  
          
        // show the authentication UI with our reason string  
        [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:NSLocalizedString(@"UNLOCK_ACCESS_TO_LOCKED_FATURE", nil) reply:  
         ^(BOOL success, NSError *authenticationError) {  
             if (success) {  
                 msg =[NSString stringWithFormat:@"EVALUATE_POLICY_SUCCESS"];  
             } else {  
                 msg = [NSString stringWithFormat:@"EVALUATE_POLICY_WITH_ERROR : %@",  
                        authenticationError];  
             }  
             UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:msg message:nil delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil];  
             [alertView show];  
         }];  
          
    }  


调用[contextevaluatePolicy:localizedReason:reply]可以显示验证界面,验证完毕后有一个回调。苹果官方文档规定第二个参数localizedReason一定要(shoudbe)使用用户的当前语言呈现。


真机演示(演示指纹识别成功的例子)


在真机测试中,指纹识别3次错误会退出验证界面并输出错误信息;在验证界面点击“输入密码”,也会退出,并输出错误信息。估计这是iOS8 Beta的bug,正常应该是指纹识别失败或者点击“输入密码”要弹出数字键盘。正式发布时,官方应该会处理好这个问题。

测试用的代码片段

- (void)viewDidLoad  
{  
    [super viewDidLoad];  
    [self.view setBackgroundColor:[UIColor whiteColor]];  
    UIButton* btn = [[UIButton alloc] init];  
    [btn setTitle:@"push me!" forState:UIControlStateNormal];  
    CGRect frame = CGRectMake(self.view.frame.size.width/2 - 60., self.view.frame.size.height/2, 120., 80.);  
    [btn setFrame:frame];  
      
    [btn addTarget:self action:@selector(showTouchId) forControlEvents:UIControlEventTouchUpInside];  
      
    [self.view addSubview:btn];  
      
}  
  
- (void)showTouchId  
{  
    if ([self canEvaluatePolicy]) {  
        [self evaluatePolicy];  
    } else {  
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"5s ok?" message:nil delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil];  
        [alertView show];  
    }  
}  
  
#pragma mark - Tests  
  
- (BOOL)canEvaluatePolicy  
{  
    LAContext *context = [[LAContext alloc] init];  
    NSError *error;  
    BOOL success;  
      
    // test if we can evaluate the policy, this test will tell us if Touch ID is available and enrolled  
    success = [context canEvaluatePolicy: LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error];  
      
    return success;  
}  
  
- (void)evaluatePolicy  
{  
    LAContext *context = [[LAContext alloc] init];  
    __block  NSString *msg;  
      
    // show the authentication UI with our reason string  
    [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:NSLocalizedString(@"UNLOCK_ACCESS_TO_LOCKED_FATURE", nil) reply:  
     ^(BOOL success, NSError *authenticationError) {  
         if (success) {  
             msg =[NSString stringWithFormat:@"EVALUATE_POLICY_SUCCESS"];  
         } else {  
             msg = [NSString stringWithFormat:@"EVALUATE_POLICY_WITH_ERROR : %@",  
                    authenticationError];  
         }  
         UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:msg message:nil delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil];  
         [alertView show];  
     }];  
      
}


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
无法嵌入互操作类型“Microsoft.Office.Interop.Excel.ApplicationClass”。请改用适用的接口。
winform下对datagridview进行导出时候,写了一句: Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass(); 导致结果如下: 类型“Microsoft.Office.Interop.Excel.ApplicationClass”未定义构造函数    无法嵌入互操作类型“Microsoft.Office.Interop.Excel.ApplicationClass”。
1184 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
23564 0
iOS objc_msgSend尾调用优化详解
iOS-OC底层研究 这篇文章将认真彻底地分析OC对objc_msgSend的尾调用优化机制。
1132 0
PHP开发API接口注意事项
1、单文件实现多接口的形式有很多种,例如:if..elseif.. 或 switch 或 动态方法 (也就是TP的这种访问函数体的形式) 2、对于数据的输出最好用json,json具有相当强大的跨平台性,市场上各大主流编程语言都支持json解析,json正在逐步取代xml,成为网络数据的通用格式 阿里云代金券1000元免费领取地址:https://promotion.
1258 0
AliOS Things 使用HAL库的USB_DEVICE MSC调用SPI W25Q128
AliOS Things的USB_DEVICE MSC的SPI W25Q128实现
909 0
并发串行调用接口
这里思考比较少,不过因为事情本身比较简单,就简单处理了。毕竟我这种菜鸟,高大上的东西是从未停止过仰望的。备注下是因为如果有机会再用到类似的逻辑,可以拿来重新思考一下,另外,我还觉得有点儿TCP里”滑动窗口“的感觉喔,哈哈哈,毕竟场景类似,控制流量嘛 /** * 代码块说明: 小并发串行调用接口处理大批量数据 * 依赖变量: data (原始数据) */ va
1099 0
+关注
悟静
从事软件行业近二十年
690
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载