Touch ID身份认证
2015-12-22 17:11
495 查看
TouchID是苹果公司在iOS 7中引入并在iPhone 5s上使用的新特性,是允许用户解锁设备和在App Store购物的生物识别技术。
现在好多app以及利用此特性进行登录,例如QQ登录、支付宝登录等.另外支付宝支付时,也可以代替输入支付密码。
在新手机激活的过程中会让用户录入指纹。另外可以在 “设置”-> "Touch ID 与密码" 中添加指纹。
应用程序使用TouchID作为验证机制是很容易的,下面就简单介绍一下在app启动后登录验证。
1.用到的库是 LocalAuthentication framework
2.用到的函数也只有两个:
// 用来判断设备是否支持Touch ID
/// @return YES if the policy can be evaluated, NO otherwise.
public func canEvaluatePolicy(policy:
LAPolicy, error: NSErrorPointer) ->
Bool
返回true表示设备支持指纹识别;false表示不支持。
// 真正验证身份的函数
/// Typical error codes returned by this call are:
/// @li LAErrorUserFallback if user tapped the fallback button
/// @li LAErrorUserCancel if user has tapped the Cancel button
/// @li LAErrorSystemCancel if some system event interrupted the evaluation (e.g. Home button pressed).
public func evaluatePolicy(policy:
LAPolicy, localizedReason:
String, reply: (Bool,
NSError?) -> Void)
调起验证界面,如下图
3.
它支持一系列的错误类型,这些错误都能给出错误的原因,并能给出选项供开发者在每一种情况下做出处理。错误类型是用枚举实现的:@available(iOS 8.0, *)
public enum LAError : Int {
/// 在用户没有提供正确验证的情况下返回该错误类型,例如使用一个错误的手指。
case AuthenticationFailed
/// 在用户有意终止验证的时候返回该类型。
case UserCancel
/// 在用户有意不使用TouchID验证并且回到自定义的输入验证方式时返回。
case UserFallback
/// 在这种情况下,系统终止验证处理,因为另一个应用被激活了。
case SystemCancel
/// 当用户没有在设备Settings中设定密码时返回。
case PasscodeNotSet
/// 设备不支持TouchID。
case TouchIDNotAvailable
/// 在设备支持TouchID但没有录入指纹的时候返回。
case TouchIDNotEnrolled
/// 太多次的错误使Touch ID锁住。
@available(iOS 9.0, *)
case TouchIDLockout
/// app取消认证
@available(iOS 9.0, *)
case AppCancel
/// LAContext 失效
@available(iOS 9.0, *)
case InvalidContext
}
下面是调用方法
func authenticateUser(){
//获取认证上下文环境
let content:LAContext = LAContext()
var error:NSError?
var reasonString = "通过验证指纹解锁TouchIdDemo."
//检测设备是否支持touch id
if content.canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, error: &error){//支持Touch ID
//调用验证
[content .evaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, localizedReason: reasonString, reply: {( success:Bool, evalPolicyError:NSError?) -> Void in
if success{
//验证成功
}else{
//如果认证失败弹出提示
print(evalPolicyError?.localizedDescription)
switch evalPolicyError!.code{
case LAError.SystemCancel.rawValue :
print("系统取消认证。")
case LAError.UserCancel.rawValue:
print("用户取消认证。")
case LAError.UserFallback.rawValue:
print("用户选择输入密码。")
NSOperationQueue.mainQueue().addOperationWithBlock({() -> Void in
})
default:
print("认证失败。")
}
}
})]
}
else{//不支持Touch ID
switch error!.code{
case LAError.TouchIDNotEnrolled.rawValue:
print("TouchID is not enrolled")
case LAError.PasscodeNotSet.rawValue:
print("A passcode has not been set")
default:
print("TouchID not available")
}
print(error?.localizedDescription)
}
}弹出界面如下图
其中
该alert可定制的只有两处:
1.”通过验证指纹解锁TouchIdDemo.”提示文字是由localizedReason参数指定的,用来向用户说明使用Touch ID的目的.
2.”Enter Password”可由LAContext的localizedFallbackTitle属性设置(LAContext目前只有这一个属性),如果不设置的话,默认是”Enter Password”.值得注意的是,如果该属性设置为@“”(空字符串),该按钮会被隐藏。
最后,在viewDidLoad()中调用
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
authenticateUser()
}
参考资料:
在iOS 8 SDK中使用Touch ID API(上)
在iOS 8 SDK中使用Touch ID API(下)
iOS 8使用Touch ID进行身份认证
现在好多app以及利用此特性进行登录,例如QQ登录、支付宝登录等.另外支付宝支付时,也可以代替输入支付密码。
在新手机激活的过程中会让用户录入指纹。另外可以在 “设置”-> "Touch ID 与密码" 中添加指纹。
应用程序使用TouchID作为验证机制是很容易的,下面就简单介绍一下在app启动后登录验证。
1.用到的库是 LocalAuthentication framework
2.用到的函数也只有两个:
// 用来判断设备是否支持Touch ID
/// @return YES if the policy can be evaluated, NO otherwise.
public func canEvaluatePolicy(policy:
LAPolicy, error: NSErrorPointer) ->
Bool
返回true表示设备支持指纹识别;false表示不支持。
// 真正验证身份的函数
/// Typical error codes returned by this call are:
/// @li LAErrorUserFallback if user tapped the fallback button
/// @li LAErrorUserCancel if user has tapped the Cancel button
/// @li LAErrorSystemCancel if some system event interrupted the evaluation (e.g. Home button pressed).
public func evaluatePolicy(policy:
LAPolicy, localizedReason:
String, reply: (Bool,
NSError?) -> Void)
调起验证界面,如下图
3.
它支持一系列的错误类型,这些错误都能给出错误的原因,并能给出选项供开发者在每一种情况下做出处理。错误类型是用枚举实现的:@available(iOS 8.0, *)
public enum LAError : Int {
/// 在用户没有提供正确验证的情况下返回该错误类型,例如使用一个错误的手指。
case AuthenticationFailed
/// 在用户有意终止验证的时候返回该类型。
case UserCancel
/// 在用户有意不使用TouchID验证并且回到自定义的输入验证方式时返回。
case UserFallback
/// 在这种情况下,系统终止验证处理,因为另一个应用被激活了。
case SystemCancel
/// 当用户没有在设备Settings中设定密码时返回。
case PasscodeNotSet
/// 设备不支持TouchID。
case TouchIDNotAvailable
/// 在设备支持TouchID但没有录入指纹的时候返回。
case TouchIDNotEnrolled
/// 太多次的错误使Touch ID锁住。
@available(iOS 9.0, *)
case TouchIDLockout
/// app取消认证
@available(iOS 9.0, *)
case AppCancel
/// LAContext 失效
@available(iOS 9.0, *)
case InvalidContext
}
下面是调用方法
func authenticateUser(){
//获取认证上下文环境
let content:LAContext = LAContext()
var error:NSError?
var reasonString = "通过验证指纹解锁TouchIdDemo."
//检测设备是否支持touch id
if content.canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, error: &error){//支持Touch ID
//调用验证
[content .evaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, localizedReason: reasonString, reply: {( success:Bool, evalPolicyError:NSError?) -> Void in
if success{
//验证成功
}else{
//如果认证失败弹出提示
print(evalPolicyError?.localizedDescription)
switch evalPolicyError!.code{
case LAError.SystemCancel.rawValue :
print("系统取消认证。")
case LAError.UserCancel.rawValue:
print("用户取消认证。")
case LAError.UserFallback.rawValue:
print("用户选择输入密码。")
NSOperationQueue.mainQueue().addOperationWithBlock({() -> Void in
})
default:
print("认证失败。")
}
}
})]
}
else{//不支持Touch ID
switch error!.code{
case LAError.TouchIDNotEnrolled.rawValue:
print("TouchID is not enrolled")
case LAError.PasscodeNotSet.rawValue:
print("A passcode has not been set")
default:
print("TouchID not available")
}
print(error?.localizedDescription)
}
}弹出界面如下图
其中
该alert可定制的只有两处:
1.”通过验证指纹解锁TouchIdDemo.”提示文字是由localizedReason参数指定的,用来向用户说明使用Touch ID的目的.
2.”Enter Password”可由LAContext的localizedFallbackTitle属性设置(LAContext目前只有这一个属性),如果不设置的话,默认是”Enter Password”.值得注意的是,如果该属性设置为@“”(空字符串),该按钮会被隐藏。
最后,在viewDidLoad()中调用
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
authenticateUser()
}
参考资料:
在iOS 8 SDK中使用Touch ID API(上)
在iOS 8 SDK中使用Touch ID API(下)
iOS 8使用Touch ID进行身份认证
相关文章推荐
- 第一节jdk1.6+tomcat6搭建方法
- Activity经典实例:启动其他Activity并使用Bundle存储数组返回结果
- Mybatis - SqlMapConfig.xml , 输入映射 ,输出映射 ,动态sql ,sql片段
- 第二部分:元数据集成体系结构
- Git命令使用小结
- 老李推荐:第1章3节《MonkeyRunner源码剖析》概述:架构
- 一些兼容问题
- sublime3+quick3.5 完整使用教程
- SharedPreferences保存arraylist集合
- java创建http接口
- C# 多线程的自动管理(线程池)
- 关于检测手机内部存储的方法(以内置存储空间几乎为0M时添加联系人为例)
- Linux基础优化
- git 使用教程
- 单向链表--java实现
- 记一次使用eclipse调试出现的异常
- iOS平台Cordova插件的开发方法
- jQuery UI -- Repeater & 手风琴(Accordion)效果
- 老李推荐:第1章2节《MonkeyRunner源码剖析》概述:边界
- LoadRunner函数中的几个陷阱