iOS开发 Object-C 与 Swift 中的Touch ID开发
2016-03-07 15:29
531 查看
Object-C Touch ID 验证
导入库
#import <LocalAuthentication/LocalAuthentication.h>
- (IBAction)btnClick:(UIButton *)sender {
//初始化上下文对象
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
dispatch_async(dispatch_get_main_queue(), ^{
UIAlertView * alert = [[UIAlertView
alloc]initWithTitle:@"Touch ID"
message:@"验证成功"
delegate:nil
cancelButtonTitle:@"好的"
otherButtonTitles: nil];
[alert show];
});
}
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);
}
}
Swift Touch ID 验证
导入库 跟 Object-C 一样framework 就可以了
func MyBtnClick(sender:
MyButton) {
print("-------",sender)
let laContext =
LAContext()
var authError :
NSError?
let errorReason =
"需要验证Touch ID"
if laContext.canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics,
error: &authError){
laContext.evaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, localizedReason: errorReason, reply: {
(success, error) in
if success {
print (
"Touch ID 验证成功")
}
else{
print (
"Touch ID 验证失败")
}
})
}
else{
let alert =
UIAlertView(title: "Can not do authenticatation", message:
String(authError), delegate:
nil, cancelButtonTitle: "Cancel")
alert.show()
}
}
附:
/*
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);
*/
谢谢浏览!!!
导入库
#import <LocalAuthentication/LocalAuthentication.h>
- (IBAction)btnClick:(UIButton *)sender {
//初始化上下文对象
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
dispatch_async(dispatch_get_main_queue(), ^{
UIAlertView * alert = [[UIAlertView
alloc]initWithTitle:@"Touch ID"
message:@"验证成功"
delegate:nil
cancelButtonTitle:@"好的"
otherButtonTitles: nil];
[alert show];
});
}
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);
}
}
Swift Touch ID 验证
导入库 跟 Object-C 一样framework 就可以了
func MyBtnClick(sender:
MyButton) {
print("-------",sender)
let laContext =
LAContext()
var authError :
NSError?
let errorReason =
"需要验证Touch ID"
if laContext.canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics,
error: &authError){
laContext.evaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, localizedReason: errorReason, reply: {
(success, error) in
if success {
print (
"Touch ID 验证成功")
}
else{
print (
"Touch ID 验证失败")
}
})
}
else{
let alert =
UIAlertView(title: "Can not do authenticatation", message:
String(authError), delegate:
nil, cancelButtonTitle: "Cancel")
alert.show()
}
}
附:
/*
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);
*/
谢谢浏览!!!
相关文章推荐
- python 报错TypeError: 'range' object does not support item assignment,解决方法
- Objective-C适用C数学函数 <math.h>
- Objective-C中的meta-class
- Objective-C中@property的所有属性详解
- NSObject的load和initialize方法
- Jsionarray和jsionobject-----java
- Objective-C关于非ARC模式下的对象引用计数
- NSObject的load和initialize方法
- Objective-C Runtime 1小时入门教程
- Objective-C中通过下标的方式访问自定义数据模型中属性
- Objective-C学习记录
- Objective-c 内存管理
- Objective-c (多输入参数的方法)
- Object-c基础(2)
- Func<T, bool> Func<T, object>小例子
- Objective-C语法之代码块(block)的使用
- enumerateObjectsUsingBlock 、for 、for(... in ...) 的差别 & 性能測试
- kobject && kset
- iOS学习笔记(13)—— Objective-C类扩展的方法之一——分类(category)
- Object类的重要方法