ios 8开放指纹认证(Touch ID)操作使用 分类: ios开发 2014-12-05 18:42 172人阅读 评论(0) 收藏
2014-12-05 18:42
696 查看
iOS 8的SDK开放了Touch ID的接口.从WWDC的视频中可以看到Touch ID应用在两个方面:用于Key Chain加密和用于授权.iOS 8正式版发布以后我们可以看到Evernote的iOS app已经集成了该功能.下面来看看如何实现使用Touch ID进行身份认证.
其实很简单,用于身份认证的所有的接口都在LocalAuthentication framework中, 该framework实际上只有三个头文件:
LAContext.h
LAError.h
LAPublicDefines.h
而实际用到的函数也只有两个:
// 用来判断设备是否支持Touch ID
- (BOOL)canEvaluatePolicy:(LAPolicy)policy
error:(NSError * __autoreleasing *)error;
// 真正验证身份的函数
- (void)evaluatePolicy:(LAPolicy)policy
localizedReason:(NSString *)localizedReason
reply:(void(^)(BOOL success, NSError *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>):
LAContext *context = [LAContext new];
NSError *error;
context.localizedFallbackTitle = @"";
if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error])
{
NSLog(@"Touch
ID is available.");
[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
localizedReason:NSLocalizedString(@"Use
Touch ID to log in.", nil)
reply:^(BOOL success, NSError *error)
{
if (success)
{
NSLog(@"Authenticated
using Touch ID.");
} else {
if (error.code == kLAErrorUserFallback)
{
NSLog(@"User
tapped Enter Password");
} else if (error.code == kLAErrorUserCancel)
{
NSLog(@"User
tapped Cancel");
} else {
NSLog(@"Authenticated
failed.");
}
}];
} else {
NSLog(@"Touch
ID is not available: %@", error);
}
在开发中遇到过一个问题, 不知道是不是bug, 就是启动程序后立即使用Touch ID, 这样会导致身份验证通过了, 但是上述的alert并不会被dismiss. 详情参见https://github.com/RungeZhai/TouchIDIssue
其实很简单,用于身份认证的所有的接口都在LocalAuthentication framework中, 该framework实际上只有三个头文件:
LAContext.h
LAError.h
LAPublicDefines.h
而实际用到的函数也只有两个:
// 用来判断设备是否支持Touch ID
- (BOOL)canEvaluatePolicy:(LAPolicy)policy
error:(NSError * __autoreleasing *)error;
// 真正验证身份的函数
- (void)evaluatePolicy:(LAPolicy)policy
localizedReason:(NSString *)localizedReason
reply:(void(^)(BOOL success, NSError *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>):
LAContext *context = [LAContext new];
NSError *error;
context.localizedFallbackTitle = @"";
if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error])
{
NSLog(@"Touch
ID is available.");
[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
localizedReason:NSLocalizedString(@"Use
Touch ID to log in.", nil)
reply:^(BOOL success, NSError *error)
{
if (success)
{
NSLog(@"Authenticated
using Touch ID.");
} else {
if (error.code == kLAErrorUserFallback)
{
NSLog(@"User
tapped Enter Password");
} else if (error.code == kLAErrorUserCancel)
{
NSLog(@"User
tapped Cancel");
} else {
NSLog(@"Authenticated
failed.");
}
}];
} else {
NSLog(@"Touch
ID is not available: %@", error);
}
在开发中遇到过一个问题, 不知道是不是bug, 就是启动程序后立即使用Touch ID, 这样会导致身份验证通过了, 但是上述的alert并不会被dismiss. 详情参见https://github.com/RungeZhai/TouchIDIssue
相关文章推荐
- 【iOS】UIViewController、UINavigationController与UITabBarController的整合使用 分类: ios开发 2015-01-29 11:06 176人阅读 评论(0) 收藏
- iOS多线程编程之NSOperation和NSOperationQueue的使用 分类: ios开发 2015-01-01 12:34 145人阅读 评论(0) 收藏
- ios开发之网络编程 分类: ios开发 2014-12-09 15:18 146人阅读 评论(0) 收藏
- IOS之按钮控件--Button全解析及使用 分类: ios技术 2015-01-17 17:09 169人阅读 评论(0) 收藏
- CocoaPods安装和使用教程 分类: ios技术 ios相关 2015-03-11 21:53 48人阅读 评论(0) 收藏
- iOS开发UITableView基本使用方法总结 分类: ios技术 2015-04-03 17:51 68人阅读 评论(0) 收藏
- ClippingNode的使用 分类: ios开发 Cocos2d-x 2015-02-09 18:17 112人阅读 评论(0) 收藏
- ios 8开放指纹认证(Touch ID)操作使用
- ios学习路线 分类: ios开发 2014-11-30 20:29 444人阅读 评论(0) 收藏
- iOS多线程编程之NSThread的使用 分类: ios开发 2015-01-01 12:36 123人阅读 评论(0) 收藏
- iOS 归档 分类: ios开发 2014-12-09 19:44 118人阅读 评论(0) 收藏
- ios免费开源接口 分类: ios开发 2014-12-12 11:25 174人阅读 评论(0) 收藏
- iOS开发网络篇—GET请求和POST请求 分类: ios开发 2015-01-03 17:10 172人阅读 评论(0) 收藏
- 图灵ios培训第一周(使用UIWebView创建简易浏览器) 分类: ios开发 2015-03-28 12:43 295人阅读 评论(0) 收藏
- iOS开发网络数据之AFNetworking使用 分类: ios技术 2015-04-03 16:35 105人阅读 评论(0) 收藏
- iOS中UITextField 使用全面解析 分类: ios技术 2015-04-10 14:37 153人阅读 评论(0) 收藏
- IOS导航栏的使用方法 分类: ios开发 2015-01-29 10:40 282人阅读 评论(0) 收藏
- iOS开发网络篇—使用ASI框架进行文件下载 分类: ios开发 2015-02-02 10:43 133人阅读 评论(0) 收藏
- Hadoop文件的基本操作 分类: A1_HADOOP 2014-12-05 11:36 392人阅读 评论(0) 收藏
- iOS sqlite并不难(呵呵,难了不会,会了不难) 分类: ios开发 2014-12-20 16:54 196人阅读 评论(0) 收藏