iOS Touch ID 身份认证
iOS Touch ID 身份认证
iOS 8 及以后录了指纹的设备可以使用 touch ID 进行身份认证,指纹符合录入的指纹才能认证成功。
步骤
- 导入 LocalAuthentication 框架:
import LocalAuthentication - 初始化 LAContext 对象:
let context = LAContext() - 调用 LAContext 对象的
canEvaluatePolicy(_ policy: LAPolicy, error: NSErrorPointer) -> Bool方法 - 上一步如果返回 false,表示不能进行认证,执行相应的失败操作;如果返回 true,调用 LAContext 对象的
evaluatePolicy(_ policy: LAPolicy, localizedReason: String, reply: @escaping (Bool, Error?) -> Void)方法,在 reply 中判断是否认证成功来执行相应的操作(如果认证失败,可以获取错误码 code,看看属于 LAError.Code 的哪种类型错误来执行相应的失败操作)
调用 LAContext 对象的 canEvaluatePolicy 和 evaluatePolicy 方法都要传入 LAPolicy 枚举类型的值,目前有两种取值:deviceOwnerAuthenticationWithBiometrics 和 deviceOwnerAuthentication。前一种 deviceOwnerAuthenticationWithBiometrics 是进行指纹认证。后一种 deviceOwnerAuthentication 是 iOS 9.0 及以后才能使用,先进行指纹认证,如果指纹认证失败可以通过输入密码进行认证。
调用 LAContext 对象的 evaluatePolicy 方法会弹出指纹认证对话框。对话框会显示需要进行认证的原因(String),就是 localizedReason 参数的值。对话框有取消按钮,iOS 10.0 及以后可以设置 LAContext 对象的 localizedCancelTitle 的值来改变取消按钮显示的字。如果指纹认证失败,对话框还会显示 fallback 按钮,可以设置 LAContext 对象的 localizedFallbackTitle 的值来改变 fallback 按钮显示的字。
需要注意,evaluatePolicy 方法的 reply 回调不在主线程。如果需要更新 UI 的话,要调用主线程再更新。
代码示例
代码已上传 GitHub:https://github.com/Silence-GitHub/TouchIDDemo
在控制器中放置一个 label 显示认证返回结果。
指纹认证代码
let context = LAContext()
context.localizedFallbackTitle = "Fall back button"
if #available(iOS 10.0, *) {
context.localizedCancelTitle = "Cancel button"
}
var authError: NSError?
if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &authError) {
context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: "Localized reason for authentication with biometrics", reply: { (success, evaluateError) in
// NOT in main thread
DispatchQueue.main.async {
if success {
self.label.text = "Success"
// Do something success
} else if let error = evaluateError {
self.label.text = error.localizedDescription
// Deal with error
if let code = LAError.Code(rawValue: (error as NSError).code) {
switch code {
case .userFallback:
print("fall back button clicked")
default:
break
}
}
}
}
})
} else if let error = authError {
label.text = error.localizedDescription
// Deal with error
}
指纹和密码认证代码
if #available(iOS 9.0, *) {
let context = LAContext()
context.localizedFallbackTitle = "Fall back button"
if #available(iOS 10.0, *) {
context.localizedCancelTitle = "Cancel button"
}
var authError: NSError?
if context.canEvaluatePolicy(.deviceOwnerAuthentication, error: &authError) {
context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: "Localized reason for authentication", reply: { (success, evaluateError) in
// NOT in main thread
DispatchQueue.main.async {
if success {
self.label.text = "Success"
// Do something success
} else if let error = evaluateError {
self.label.text = error.localizedDescription
// When fall back button clicked, user is required to enter PIN. Error code will not be "userFallback"
// Deal with error
}
}
})
} else if let error = authError {
label.text = error.localizedDescription
// Deal with error
}
} else {
let alert = UIAlertController(title: nil, message: "Authentication is available on iOS 9.0 or later", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
present(alert, animated: true, completion: nil)
}
转载请注明出处:http://www.cnblogs.com/silence-cnblogs/p/6397148.html
iOS Touch ID 身份认证的更多相关文章
- iOS --- Touch ID指纹解锁
https://www.cnblogs.com/ljmaque/p/TouchID.html 最近在项目中刚好用到了TouchId指纹解锁功能,之前也没有接触过,立马百度看看究竟是要如何使用,发现其实 ...
- iOS Touch ID 简易开发教程
转自:NsstringFromName 支持系统和机型 iOS系统的指纹识别功能最低支持的机型为iPhone 5s,最低支持系统为iOS 8,虽然安装iOS 7系统的5s机型可以使用系统提供的指纹解锁 ...
- iOS Touch Id 开发
Touch Id Touch Id是iPhone5S后加入的一项新的功能,也就是大家熟知的指纹识别技术.大家用得最多的可能是手机的解屏操作,不用在和以前一样输入手机的四位数密码进行验证.一方面不用担心 ...
- iOS Touch ID使用
1.首先导入头文件 #import <LocalAuthentication/LocalAuthentication.h> 2.关键代码 - (void)validateTouchID { ...
- 保护 iOS 用户数据安全: Keychain 和 Touch ID
原文:How To Secure iOS User Data: The Keychain and Touch ID 作者:Tim Mitra 译者:kmyhy 更新说明:本教程由 Tim Mitra ...
- iOS 8使用Touch ID进行身份认证
iOS 8的SDK开放了Touch ID的接口.从WWDC的视频中能够看到Touch ID应用在两个方面:用于Key Chain加密和用于授权.iOS 8正式版公布以后我们能够看到Evernote的i ...
- iOS 使用Touch ID 校验[新增 iOS9 三种错误]
iOS8后苹果开放了Touch ID的API给开发者,这也给我们的app带来了新的体验.开发者们可使用向第三方应用开放了Touch ID权限的API,以便他们在应用中使用指纹认证来完成用户认证或支付购 ...
- iOS 8 中如何集成 Touch ID 功能
2013年9月,苹果为当时发布的最新iPhone产品配备了一系列硬件升级方案.在iPhone 5s当中,最具创新特性的机制无疑要数围绕Home按钮设计的超薄金属圈,也就是被称为Touch ID的指纹传 ...
- IOS 8 关于 Touch ID
一.什么是Touch ID? Touch ID是在iPhone 5s后的设备上出现的指纹识别.Apple在IOS 8中开放给第三方APP使用. 可以使用 Touch ID 来验证用户的身份,用户经验证 ...
随机推荐
- 推荐几个web中常用js图表插件
作者:zccst 我自己用过fusioncharts和highchart. jQuery插件有: TufteGraph flot js charts jqchart elycharts jquery ...
- php中DateTime的format格式以及 TtoDatetime函数
Definition and Usage The date() function formats a local time/date. Syntaxdate(format,timestamp)Para ...
- 菊花加载第三方--MBprogressHUD
上次说到了网络请求AFN,那么我们在网络请求的时候,等待期间,为了让用户不认为是卡死或程序出错,一般都会放一个菊花加载,系统有一个菊花加载类叫UIProgressHUD.但是我今天要说的是一个替代它的 ...
- jmeter+ant+jenkins+mac使用HTML Publisher插件后查看html报告显示不正常
Jenkins安全默认将以下功能关闭: 1.javascript2.html上的内置插件3.内置css或从其它站的css4.从其它站的图处5.AJAX 报告中有javascript,所以显示异常.解决 ...
- iOS 之 编外知识点
iOS 使用github iOS 开源库介绍 iOS 优质方案 iOS 开发framework 后端数据库使用 Bomb方案 iOS 错误及解决汇总 后台 之 Bmob 申请苹果企业账号
- 10 Python+Selenium键盘事件
[环境信息] python3.6+selenium3.0.2+Firefox50.0+win7 [操作方法] 导入方法:from selenium.webdriver.common.keys impo ...
- redhat5安装phantomjs
Linux 64-bit Download phantomjs-2.1.1-linux-x86_64.tar.bz2 (22.3 MB) and extract the content. Note: ...
- 专注手机端前端界面开发的ui组件和js组合
frozenui一款腾讯开发的简化版Bootstrap,只用于手机端 http://frozenui.github.io/ https://github.com/frozenui/frozenui z ...
- EhLib DBGridEh组件在Delphi中应用全攻略总结(转)
EhLib DBGridEh组件在Delphi中应用全攻略总结(转) http://blog.sina.com.cn/s/blog_94b1b40001013xn0.html 优化SQL查询:如何写出 ...
- catalan卡特兰数
卡塔兰数是组合数学中一个常在各种计数问题中出现的数列.以比利时的数学家欧仁·查理·卡塔兰(1814–1894)命名.历史上,清代数学家明安图(1692年-1763年)在其<割圜密率捷法>最 ...