首页
文章
留言
首页
文章
留言
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开发之WiFi传输文件
iOS开发之类与类扩展
iOS开发之定时执行任务
iOS开发之多线程
全部分类
前端
后端
运维
架构
算法
数据库
移动应用
桌面应用
程序开发
热门标签
Git
MySQL
Android
Python
Qt
HTML
Shell
Kafka
Docker
macOS
Redis
爬虫
Lua
PHP
Supervisor
Linux
多线程
Objective-C
Elasticsearch
NoSQL
GUI
iOS
JavaScript
CSS
Sphinx
C++
Composer
Kubernetes
OpenResty
CentOS
MongoDB
Nginx
热门文章
OpenResty+Lua+Kafka收集日志
Redis缓存击穿、穿透、雪崩
10种常见的软件架构模式
macOS常用命令
Docker使用总结
C/C++基础知识总结
jquery.tmpl使用总结
Elasticsearch详解
Nginx常用配置说明
HTML5常用特性总结