iOS指紋登錄(TouchID)集成方案詳解
TouchID指紋識(shí)別是iPhone 5S設(shè)備中增加的一項(xiàng)重大功能.蘋(píng)果的后續(xù)移動(dòng)設(shè)備也相繼添加了指紋功能,在實(shí)際使用中還是相當(dāng)方便的,比如快捷登錄,快捷支付等等.系統(tǒng)提供了相應(yīng)框架,使用起來(lái)還是比較方便的.使用LAContext對(duì)象即可完成指紋識(shí)別,提高用戶體驗(yàn).

提示:指紋識(shí)別必須用真機(jī)測(cè)試,并且在iOS8以上系統(tǒng).
TouchID API使用
1.添加頭文件
#import
2.判斷系統(tǒng)版本
//首先判斷版本
if (NSFoundationVersionNumber < NSFoundationVersionNumber_iOS_8_0) {
NSLog(@"系統(tǒng)版本不支持TouchID");
return;
}
3.LAPolicy
在這里簡(jiǎn)單介紹一下LAPolicy,它是一個(gè)枚舉.我們根據(jù)自己的需要選擇LAPolicy,它提供兩個(gè)值:
LAPolicyDeviceOwnerAuthenticationWithBiometrics和LAPolicyDeviceOwnerAuthentication.
<1>. LAPolicyDeviceOwnerAuthenticationWithBiometrics是支持iOS8以上系統(tǒng),使用該設(shè)備的TouchID進(jìn)行驗(yàn)證,當(dāng)輸入TouchID驗(yàn)證5次失敗后,TouchID被鎖定,只能通過(guò)鎖屏后解鎖設(shè)備時(shí)輸入正確的解鎖密碼來(lái)解鎖TouchID。
<2>.LAPolicyDeviceOwnerAuthentication是支持iOS9以上系統(tǒng),使用該設(shè)備的TouchID或設(shè)備密碼進(jìn)行驗(yàn)證,當(dāng)輸入TouchID驗(yàn)證5次失敗后,TouchID被鎖定,會(huì)觸發(fā)設(shè)備密碼頁(yè)面進(jìn)行驗(yàn)證。
4. canEvaluatePolicy
使用canEvaluatePolicy方法判斷設(shè)備是否支持TouchID,返回BOOL為YES,該設(shè)備支持TouchID。
if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
error為返回驗(yàn)證錯(cuò)誤碼.具體不解釋了.
5. evaluatedPolicyDomainState
context.evaluatedPolicyDomainState用于判斷設(shè)備上的指紋是否被更改,在LAContext被創(chuàng)建的時(shí)候,evaluatedPolicyDomainState才生效,可在TouchID驗(yàn)證成功時(shí),將它記錄下來(lái),用于下次使用TouchID時(shí)校驗(yàn),提高安全性。
6. evaluatePolicy
evaluatePolicy方法是對(duì)TouchID進(jìn)行驗(yàn)證,Block回調(diào)中如果success為YES則驗(yàn)證成功,為NO驗(yàn)證失敗,并對(duì)error進(jìn)行解析.
- (IBAction)loginButtonClick:(UIButton *)sender {
//首先判斷版本
if (NSFoundationVersionNumber < NSFoundationVersionNumber_iOS_8_0) {
NSLog(@"系統(tǒng)版本不支持TouchID");
return;
}
LAContext *context = [[LAContext alloc] init];
context.localizedFallbackTitle = @"輸入密碼";
if (@available(iOS 10.0, *)) {
// context.localizedCancelTitle = @"22222";
} else {
// Fallback on earlier versions
}
NSError *error = nil;
if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"通過(guò)Home鍵驗(yàn)證已有手機(jī)指紋" reply:^(BOOL success, NSError * _Nullable error) {
if (success) {
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"TouchID 驗(yàn)證成功");
});
}else if(error){
switch (error.code) {
case LAErrorAuthenticationFailed:{
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"TouchID 驗(yàn)證失敗");
});
break;
}
case LAErrorUserCancel:{
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"TouchID 被用戶手動(dòng)取消");
});
}
break;
case LAErrorUserFallback:{
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"用戶不使用TouchID,選擇手動(dòng)輸入密碼");
});
}
break;
case LAErrorSystemCancel:{
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"TouchID 被系統(tǒng)取消 (如遇到來(lái)電,鎖屏,按了Home鍵等)");
});
}
break;
case LAErrorPasscodeNotSet:{
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"TouchID 無(wú)法啟動(dòng),因?yàn)橛脩魶](méi)有設(shè)置密碼");
});
}
break;
case LAErrorTouchIDNotEnrolled:{
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"TouchID 無(wú)法啟動(dòng),因?yàn)橛脩魶](méi)有設(shè)置TouchID");
});
}
break;
case LAErrorTouchIDNotAvailable:{
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"TouchID 無(wú)效");
});
}
break;
case LAErrorTouchIDLockout:{
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"TouchID 被鎖定(連續(xù)多次驗(yàn)證TouchID失敗,系統(tǒng)需要用戶手動(dòng)輸入密碼)");
});
}
break;
case LAErrorAppCancel:{
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"當(dāng)前軟件被掛起并取消了授權(quán) (如App進(jìn)入了后臺(tái)等)");
});
}
break;
case LAErrorInvalidContext:{
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"當(dāng)前軟件被掛起并取消了授權(quán) (LAContext對(duì)象無(wú)效)");
});
}
break;
default:
break;
}
}
}];
}else{
NSLog(@"當(dāng)前設(shè)備不支持TouchID");
}
}
上面這個(gè)代碼, 是整個(gè)TouchID的核心,也幾乎是所有代碼了.
驗(yàn)證
驗(yàn)證必須使用真機(jī)

結(jié)果

輸入錯(cuò)誤的時(shí)候
總結(jié):TouchID使用起來(lái)不難,重要的是使用流程邏輯.
以登錄為例,一般來(lái)說(shuō)流程是這樣的:
- 開(kāi)啟指紋登錄:首次登陸使用密碼登錄,登錄后,可以設(shè)置一個(gè)開(kāi)啟指紋ID登錄的按鈕,來(lái)進(jìn)行指紋認(rèn)證.
- 驗(yàn)證:檢測(cè)是否支持TouchID.
- 生成設(shè)備賬號(hào)/密碼:TouchID驗(yàn)證通過(guò)后,根據(jù)當(dāng)前已登錄的賬號(hào)和硬件設(shè)備Token,生成設(shè)備賬號(hào)/密碼(規(guī)則可自定,密碼要長(zhǎng)要復(fù)雜),并保存在keychain;
- 綁定:生成設(shè)備賬號(hào)/密碼后,將原賬號(hào)及設(shè)備賬號(hào)/密碼,加密后(題主使用的是RSA加密)發(fā)送到服務(wù)端進(jìn)行綁定;
- 成功:驗(yàn)證原賬號(hào)及設(shè)備賬號(hào)有效后,返回相應(yīng)狀態(tài),綁定成功則完成整個(gè)TouchID(設(shè)備)綁定流程。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
iOS 水波紋動(dòng)畫(huà)的實(shí)現(xiàn)效果
本篇文章主要介紹了iOS 水波紋的實(shí)現(xiàn)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01
詳解IOS串行隊(duì)列與并行隊(duì)列進(jìn)行同步或者異步的實(shí)例
這篇文章主要介紹了詳解IOS串行隊(duì)列與并行隊(duì)列進(jìn)行同步或者異步的實(shí)例的相關(guān)資料,IOS中GCD的隊(duì)列分為串行隊(duì)列和并行隊(duì)列,任務(wù)分為同步任務(wù)和異步任務(wù),他們的排列組合有四種情況這里就一一分析下,需要的朋友可以參考下2017-07-07
iOS本地動(dòng)態(tài)生成驗(yàn)證碼的方法
這篇文章主要介紹了iOS本地動(dòng)態(tài)生成驗(yàn)證碼的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-01-01
iOS實(shí)現(xiàn)點(diǎn)贊動(dòng)畫(huà)特效
這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)點(diǎn)贊動(dòng)畫(huà)特效,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-01-01
iOS開(kāi)發(fā)中以application/json上傳文件實(shí)例詳解
在和sever后臺(tái)交互的過(guò)程中、有時(shí)候、他們需要我們iOS開(kāi)發(fā)者以“application/json”形式上傳,具體實(shí)例代碼大家參考下本文2017-07-07

