iOS Touch ID <指紋識別>

Touch ID

Touch

ID是iPhone5S后加入的一項(xiàng)新的功能,也就是大家熟知的指紋識別技術(shù)。大家用得最多的可能是手機(jī)的解屏操作,不用在和以前一樣輸入手機(jī)的四位數(shù)密

碼進(jìn)行驗(yàn)證。一方面不用擔(dān)心密碼被別人看到,另一方面也方便了自己的操作。iOS8后蘋果開放了Touch

ID的API給開發(fā)者,這也給我們的app帶來了新的體驗(yàn)。

使用

Touch ID的API非常的簡單也好理解,在使用前我們需要導(dǎo)入LocalAuthentication這個(gè)庫。

1.png

首先來看下頭文件的定義:

//驗(yàn)證設(shè)備是否支持Touch ID

- (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError* __autoreleasing *)error;

//進(jìn)行驗(yàn)證的回調(diào)

- (void)evaluatePolicy:(LAPolicy)policy? ? ? localizedReason:(NSString*)localizedReason? ? ? ? ? ? ? ? reply:(void(^)(BOOLsuccess,NSError*error))reply;

//取消Touch Id驗(yàn)證的按鈕的標(biāo)題,默認(rèn)標(biāo)題是輸入密碼@property(nonatomic,copy)NSString*localizedFallbackTitle;

代碼使用示例

LAContext *laContext = [[LAContext alloc] init];

NSError*error;

if([laContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error])

{? ? ??

[laContext evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics? ? ? ? ? ? ? ? ? ? ? localizedReason:@"Touch Id Test"reply:^(BOOLsuccess,NSError*error) {

if(success)

{NSLog(@"success to evaluate");//do your work}

if(error)

{NSLog(@"---failed to evaluate---error: %@---", error.description);//do your error handle}? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }];? ? }

else{NSLog(@"==========Not support :%@", error.description);//do your error handle}

這樣我們就完成了一個(gè)Touch ID的驗(yàn)證功能。當(dāng)我們點(diǎn)擊按鈕進(jìn)行調(diào)用的時(shí)候,就會彈出驗(yàn)證的對話框:

2.png

彈窗目前還不能自定義,都是統(tǒng)一的,第一行是app的名字+Touch ID, 第二行是需要用Touch ID的理由。在用戶進(jìn)行操作后,我們可以在回調(diào)的block那邊處理自己的業(yè)務(wù)邏輯。

錯(cuò)誤處理

typedefNS_ENUM(NSInteger, LAError){//用戶驗(yàn)證沒有通過,比如提供了錯(cuò)誤的手指的指紋LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed,// 用戶取消了Touch ID驗(yàn)證LAErrorUserCancel? ? ? ? ? = kLAErrorUserCancel,//用戶不想進(jìn)行Touch ID驗(yàn)證,想進(jìn)行輸入密碼操作

LAErrorUserFallback? ? ? ? = kLAErrorUserFallback,// 系統(tǒng)終止了驗(yàn)證

LAErrorSystemCancel? ? ? ? = kLAErrorSystemCancel,// 用戶沒有在設(shè)備Settings中設(shè)定密碼LAErrorPasscodeNotSet? ? ? = kLAErrorPasscodeNotSet,// 設(shè)備不支持Touch IDLAErrorTouchIDNotAvailable? = kLAErrorTouchIDNotAvailable,// 設(shè)備沒有進(jìn)行Touch ID 指紋注冊

LAErrorTouchIDNotEnrolled? = kLAErrorTouchIDNotEnrolled,}NS_ENUM_AVAILABLE(10_10,8_0);

在block回調(diào)那邊,我們需要對每種錯(cuò)誤進(jìn)行處理,以便得到更好的用戶體驗(yàn)。

#import "ViewController.h"#import@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

UIButton *btn=[UIButton buttonWithType:UIButtonTypeCustom];

btn.center=self.view.center;

btn.bounds=CGRectMake(0, 0, 100, 40);

[btn setTitle:@"指紋識別" forState:UIControlStateNormal];

[btn setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal];

[self.view addSubview:btn];

[btn addTarget:self action:@selector(clickTouchId) forControlEvents:UIControlEventTouchUpInside];

}

-(void)clickTouchId

{

CGFloat systemVersion=[UIDevice currentDevice].systemVersion.doubleValue;

if (systemVersion>=8.0)

{

LAContext *context=[[LAContext alloc]init];

NSError *error=nil;

if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {

[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"XX請求驗(yàn)證" reply:^(BOOL success, NSError * _Nullable error) {

if (success)

{

NSLog(@"驗(yàn)證成功");

}

switch (error.code)

{

case LAErrorSystemCancel:

NSLog(@"切換到其它app,系統(tǒng)取消驗(yàn)證");

break;

case LAErrorUserCancel:

NSLog(@"用戶取消驗(yàn)證");

break;

case LAErrorUserFallback:

NSLog(@"用戶選擇輸入密碼,切換主線程處理");

break;

}

}];

}

if (error)

{

NSLog(@"%@",error.localizedDescription);

}

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容