-(void)finger {
LAContext *context = [LAContext new];
context.localizedFallbackTitle = @"";
NSString *reasonStr = @"需要驗(yàn)證指紋才能進(jìn)一步操作";
NSError *err;
if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&err]) {
[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:reasonStr reply:^(BOOL success, NSError * _Nullable evalPolicyError) {
if (success) {
NSLog(@"授權(quán)成功");
//開始綁定
[self bind];
}else {
switch (evalPolicyError.code) {
case LAErrorSystemCancel:{
[self failedPrompt:@"系統(tǒng)取消授權(quán)"];
break;
}
case LAErrorUserCancel:{
[self failedPrompt:@"用戶取消授權(quán)"];
break;
}
default:{
[self failedPrompt:@"授權(quán)失敗"];
break;
}
}
}
}];
} else {
NSString *str = @"";
switch (err.code) {
case LAErrorTouchIDNotEnrolled:{
str = @"沒有注冊(cè)指紋";
break;
}
case LAErrorPasscodeNotSet:{
str = @"沒有注冊(cè)指紋驗(yàn)證碼";
break;
}
default:
//LAErrorTouchIDNotAvailable
str = @"指紋識(shí)別不可用";
}
[self failedPrompt:str];
}
}
開門見山玄窝。如上貼出指紋識(shí)別的一些關(guān)鍵代碼郊霎,其實(shí)就是圍繞著LAContext做文章。LA就是Local Authentication的縮寫润绵,也就是本地授權(quán)召噩。所有成功和失敗的情況已經(jīng)全部體現(xiàn)在代碼中母赵。值得注意的是用戶輸入錯(cuò)誤3次以上就會(huì)提示輸入指紋驗(yàn)證碼,也就是iOS設(shè)備注冊(cè)指紋的時(shí)候以防萬一的備用code具滴。這個(gè)code如果通過的話也算是驗(yàn)證成功凹嘲,如果想要禁用掉這個(gè)功能可以在localizedFallbackTitle中設(shè)置成空字符串。其他可以自定義的屬性可以在LAContext官方文檔的實(shí)例方法列表中找到(例如可以允許的最大失敗數(shù)构韵,默認(rèn)好像是3周蹭;再例如指紋作用延長(zhǎng)的時(shí)間趋艘,也就是一次成功驗(yàn)證之后多長(zhǎng)時(shí)間內(nèi)不用再次驗(yàn)證。凶朗。搞支付的朋友們還是別動(dòng)這個(gè)屬性就好瓷胧。。棚愤;還有其他一些屬性搓萧,有空研究)
最后簡(jiǎn)單提一嘴應(yīng)用場(chǎng)景和業(yè)務(wù)邏輯,我們是仿支付寶在賬戶安全中加的一個(gè)開關(guān)宛畦,如果本機(jī)不支持指紋識(shí)別則隱藏該列瘸洛,否則可以手動(dòng)打開和關(guān)閉,打開后要驗(yàn)證支付密碼次和,比對(duì)成功之后再綁定反肋。密碼存在UserDefaults中,建議用用戶名作為key踏施。然后每次內(nèi)部支付前檢查是否綁定了指紋支付石蔗,通過指紋驗(yàn)證后直接把保存的密碼發(fā)送給服務(wù)器即可。