iOS 指紋識(shí)別登錄功能實(shí)現(xiàn)

簡介

Touch ID是蘋果公司的一種指紋識(shí)別技術(shù),從iPhone 5s開始攒岛,早已為人們所熟知舆绎。

Touch ID不存儲(chǔ)用戶的任何指紋圖像,只保存代表指紋的數(shù)字字符秸歧。蘋果公司提供Touch ID給第三方應(yīng)用程序使用厨姚,程序只會(huì)收到認(rèn)證是否成功的通知,而無法訪問 Touch ID 或與已注冊指紋相關(guān)的數(shù)據(jù)键菱,這一點(diǎn)對安全而言尤為重要谬墙。

現(xiàn)在有很多銀行類APP、涉及到支付類的APP都集成了指紋、手勢等二次驗(yàn)證功能拭抬,從而使APP獲得更高的安全性部默。今天我們就來分析一下指紋識(shí)別登錄功能的具體實(shí)現(xiàn)。

實(shí)現(xiàn)步驟

1.首先引入指紋解鎖的庫文件

#import <LocalAuthentication/LocalAuthentication.h>

2.兩個(gè)主要方法

  • 這個(gè)方法是判斷設(shè)備是否支持TouchID的
- (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)
error __attribute__((swift_error(none)));
  • 這個(gè)是用來驗(yàn)證TouchID的造虎,會(huì)有彈出框出來
- (void)evaluatePolicy:(LAPolicy)policy
       localizedReason:(NSString *)localizedReason
                 reply:(void(^)(BOOL success, NSError * __nullable error))reply;

3.核心源碼
在demo中touchID函數(shù)是實(shí)現(xiàn)指紋識(shí)別的核心代碼傅蹂,源碼如下:

- (void)touchID {
    
    //創(chuàng)建LAContext
    LAContext *context = [LAContext new];
    
    //這個(gè)屬性是設(shè)置指紋輸入失敗之后的彈出框的選項(xiàng)
    context.localizedFallbackTitle = @"沒有忘記密碼";
    
    NSError *error = nil;
    if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
//        NSLog(@"支持指紋識(shí)別");
        [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"請按home鍵指紋登錄" reply:^(BOOL success, NSError * _Nullable error) {
            if (success) {
                
                dispatch_async(dispatch_get_main_queue(), ^{
                    
                    UIAlertController *alert = [UIAlertController alertControllerWithTitle:nil message:@"登錄成功" preferredStyle:UIAlertControllerStyleAlert];
                    [self presentViewController:alert animated:YES completion:nil];
                    [self performSelector:@selector(dismiss:) withObject:alert afterDelay:1.0];
                    
                    self.nameLab.text = @"FBY展菲";
                    self.setOutBtn.hidden = NO;
                });
                
            }else{
                NSLog(@"%@",error.localizedDescription);
                switch (error.code) {
                    case LAErrorSystemCancel:
                    {
                        NSLog(@"系統(tǒng)取消授權(quán),如其他APP切入");
                        break;
                    }
                    case LAErrorUserCancel:
                    {
                        NSLog(@"用戶取消驗(yàn)證Touch ID");
                        break;
                    }
                    case LAErrorAuthenticationFailed:
                    {
                        NSLog(@"授權(quán)失敗");
                        break;
                    }
                    case LAErrorPasscodeNotSet:
                    {
                        NSLog(@"系統(tǒng)未設(shè)置密碼");
                        break;
                    }
                    case LAErrorTouchIDNotAvailable:
                    {
                        NSLog(@"設(shè)備Touch ID不可用算凿,例如未打開");
                        break;
                    }
                    case LAErrorTouchIDNotEnrolled:
                    {
                        NSLog(@"設(shè)備Touch ID不可用份蝴,用戶未錄入");
                        break;
                    }
                    case LAErrorUserFallback:
                    {
                        [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                            NSLog(@"用戶選擇輸入密碼,切換主線程處理");
                        }];
                        break;
                    }
                    default:
                    {
                        [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                            NSLog(@"其他情況氓轰,切換主線程處理");
                        }];
                        break;
                    }
                }
            }
        }];
    }else{
    
        UIAlertController *alert = [UIAlertController alertControllerWithTitle:nil message:@"不支持指紋識(shí)別" preferredStyle:UIAlertControllerStyleAlert];
        [self presentViewController:alert animated:YES completion:nil];
        [self performSelector:@selector(dismiss:) withObject:alert afterDelay:1.0];
        
        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);
    }
    
}

核心代碼只要分為兩部分婚夫,一部分是設(shè)備支持指紋識(shí)別,另一部分是設(shè)備不支持指紋識(shí)別

指紋識(shí)別.gif

希望可以幫助大家
如果哪里有什么不對或者不足的地方戒努,還望讀者多多提意見或建議

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末请敦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子储玫,更是在濱河造成了極大的恐慌侍筛,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撒穷,死亡現(xiàn)場離奇詭異匣椰,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)端礼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門禽笑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蛤奥,你說我怎么就攤上這事佳镜。” “怎么了凡桥?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵蟀伸,是天一觀的道長。 經(jīng)常有香客問我缅刽,道長啊掏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任衰猛,我火速辦了婚禮迟蜜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘啡省。我一直安慰自己娜睛,他們只是感情好髓霞,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著微姊,像睡著了一般酸茴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上兢交,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天薪捍,我揣著相機(jī)與錄音,去河邊找鬼配喳。 笑死酪穿,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的晴裹。 我是一名探鬼主播被济,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼涧团!你這毒婦竟也來了只磷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬榮一對情侶失蹤泌绣,失蹤者是張志新(化名)和其女友劉穎钮追,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阿迈,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡元媚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了苗沧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片刊棕。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖待逞,靈堂內(nèi)的尸體忽然破棺而出甥角,到底是詐尸還是另有隱情,我是刑警寧澤识樱,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布蜈膨,位于F島的核電站,受9級(jí)特大地震影響牺荠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜驴一,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一休雌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧肝断,春花似錦杈曲、人聲如沸驰凛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽恰响。三九已至,卻和暖如春涌献,著一層夾襖步出監(jiān)牢的瞬間胚宦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來泰國打工燕垃, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留枢劝,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓卜壕,卻偏偏與公主長得像您旁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子轴捎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容