首页
文章
留言
首页
文章
留言
iOS开发之Touch ID指纹解锁实例
2016 年 11 月 11 日
移动应用
Objective-C
iOS
在 iOS8.0 之后,API 开放了指纹验证的功能。开放的 API 虽然只能用来作为验证使用,比较局限,但是对于有类似“手势密码”功能的 APP 来说,已经足够用了。有了这个新 API ,就可以在 APP 中再多一种高大上的解锁方式了。指纹验证功能的最低硬件支持为 iPhone 5s,iPad 6,iPad mini 3 这些有 Touch ID 硬件支持的设备,并且操作系统最低为 iOS8.0,因为 Touch ID 是在 iOS8.0 之后才开放的一类 API。 ```objectivec #import "FingerprintUnlockController.h" #import
@interface FingerprintUnlockController () @end @implementation FingerprintUnlockController - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor whiteColor]; [self authenticateUser]; } // 指纹验证的实现 - (void)authenticateUser { // 初始化上下文对象 LAContext *context = [[LAContext alloc] init]; // 错误对象 NSError *error = nil; NSString *result = @"Authentication is needed to access your notes."; // 首先使用canEvaluatePolicy 判断设备支持状态 if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) { // 支持指纹验证 [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:result reply:^(BOOL success, NSError *error) { if (success) { // 验证成功,主线程处理UI } else { NSLog(@"%@",error.localizedDescription); switch (error.code) { case LAErrorSystemCancel: { NSLog(@"Authentication was cancelled by the system"); // 切换到其他APP,系统取消验证Touch ID break; } case LAErrorUserCancel: { NSLog(@"Authentication was cancelled by the user"); // 用户取消验证Touch ID break; } case LAErrorUserFallback: { NSLog(@"User selected to enter custom password"); [[NSOperationQueue mainQueue] addOperationWithBlock:^{ // 用户选择其他验证方式,切换主线程处理 }]; break; } default: { [[NSOperationQueue mainQueue] addOperationWithBlock:^{ // 其他情况,切换主线程处理 }]; break; } } } }]; } else { // 不支持指纹识别,LOG出错误详情 switch (error.code) { case LAErrorTouchIDNotEnrolled: { NSLog(@"TouchID is not enrolled"); break; } case LAErrorPasscodeNotSet: { NSLog(@"A passcode has not been set"); break; } default: { NSLog(@"TouchID not available"); break; } } NSLog(@"%@",error.localizedDescription); // [self showPasswordAlert]; } } @end ``` ```objectivec // 对几种情况的说明 typedef NS_ENUM(NSInteger, LAError) { // 授权失败 LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed, // 用户取消Touch ID授权 LAErrorUserCancel = kLAErrorUserCancel, // 用户选择输入密码 LAErrorUserFallback = kLAErrorUserFallback, // 系统取消授权(例如其他APP切入) LAErrorSystemCancel = kLAErrorSystemCancel, // 系统未设置密码 LAErrorPasscodeNotSet = kLAErrorPasscodeNotSet, // 设备Touch ID不可用,例如未打开 LAErrorTouchIDNotAvailable = kLAErrorTouchIDNotAvailable, // 设备Touch ID不可用,用户未录入 LAErrorTouchIDNotEnrolled = kLAErrorTouchIDNotEnrolled, } NS_ENUM_AVAILABLE(10_10, 8_0); ```
0
相关文章
iOS开发之WiFi传输文件
iOS开发之收集崩溃信息
iOS开发之定时执行任务
iOS开发之多线程
iOS开发之类与类扩展
全部分类
前端
后端
运维
架构
算法
数据库
移动应用
桌面应用
程序开发
热门标签
Nginx
HTML
OpenResty
Shell
Kafka
Git
MongoDB
CSS
Kubernetes
Qt
Supervisor
Sphinx
Redis
Docker
JavaScript
PHP
macOS
NoSQL
Python
Lua
Composer
Linux
CentOS
Objective-C
MySQL
C++
爬虫
Android
多线程
GUI
Elasticsearch
iOS
热门文章
Kubernetes介绍
Supervisor使用总结
iOS开发之WiFi传输文件
iOS开发之定时执行任务
PHP常用函数总结
Qt实现TCP通讯
Python爬虫之Beautiful Soup的使用
iOS开发之多线程
jquery.tmpl使用总结
HTML5常用特性总结