首页
文章
留言
首页
文章
留言
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开发之类与类扩展
iOS开发之收集崩溃信息
iOS开发之多线程
iOS开发之WiFi传输文件
iOS开发之面向对象
全部分类
前端
后端
运维
架构
算法
数据库
移动应用
桌面应用
程序开发
热门标签
Composer
Android
Qt
C++
Shell
HTML
Kubernetes
Linux
MySQL
CentOS
iOS
GUI
JavaScript
CSS
爬虫
Lua
Nginx
Redis
OpenResty
MongoDB
Sphinx
Python
Objective-C
NoSQL
Docker
Git
Elasticsearch
Kafka
PHP
多线程
Supervisor
macOS
热门文章
PHP开发之字符串处理
Redis基本使用总结
Redis、MemCache、MongoDB比较
iOS开发之面向对象
Supervisor使用总结
iOS开发之多线程
PHP使用Kafka
iOS开发之定时执行任务
macOS常用命令
OpenResty+Lua+Kafka收集日志