iOS8 Touch ID api接口调用

2024-01-08 20:48
文章标签 接口 调用 api id ios8 touch

本文主要是介绍iOS8 Touch ID api接口调用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


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 plain copy
  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];  }];  }


这篇关于iOS8 Touch ID api接口调用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/584775

相关文章

requests处理token鉴权接口和jsonpath使用方式

《requests处理token鉴权接口和jsonpath使用方式》文章介绍了如何使用requests库进行token鉴权接口的处理,包括登录提取token并保存,还详述了如何使用jsonpath表达... 目录requests处理token鉴权接口和jsonpath使用json数据提取工具总结reques

在C#中调用Windows防火墙界面的常见方式

《在C#中调用Windows防火墙界面的常见方式》在C#中调用Windows防火墙界面(基础设置或高级安全设置),可以使用进程启动(Process.Start)或Win32API来实现,所以本文给大家... 目录引言1. 直接启动防火墙界面(1) 打开基本防火墙设置(firewall.cpl)(2) 打开高

python调用dubbo接口的实现步骤

《python调用dubbo接口的实现步骤》本文主要介绍了python调用dubbo接口的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编... 目录 ​​其他实现方式与注意事项​​ ​​高级技巧与集成​​用 python 提供 Dubbo 接口

C# FTP调用的实现示例

《C#FTP调用的实现示例》本文介绍了.NET平台实现FTP/SFTP操作的多种方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1. 使用 .NET 自带 FtpWebRequest 实现 FTP 操作1.1 文件上传1.2

Java中接口和抽象类的异同以及具体的使用场景

《Java中接口和抽象类的异同以及具体的使用场景》文章主要介绍了Java中接口(Interface)和抽象类(AbstractClass)的区别和联系,包括相同点和不同点,以及它们在实际开发中的具体使... 目录一、接口和抽象类的 “相同点”二、接口和抽象类的 “核心区别”关键区别详解(避免踩坑)三、具体使

MySQL中C接口的实现

《MySQL中C接口的实现》本节内容介绍使用C/C++访问数据库,包括对数据库的增删查改操作,主要是学习一些接口的调用,具有一定的参考价值,感兴趣的可以了解一下... 目录准备mysql库使用mysql库编译文件官方API文档对象的创建和关闭链接数据库下达sql指令select语句前言:本节内容介绍使用C/

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

使用Go调用第三方API的方法详解

《使用Go调用第三方API的方法详解》在现代应用开发中,调用第三方API是非常常见的场景,比如获取天气预报、翻译文本、发送短信等,Go作为一门高效并发的编程语言,拥有强大的标准库和丰富的第三方库,可以... 目录引言一、准备工作二、案例1:调用天气查询 API1. 注册并获取 API Key2. 代码实现3

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动