iOS 指紋識別

簡介

蘋果從iPhone5S開始,具有指紋識別技術(shù)额衙,從iOS8.0之后蘋果允許第三方 App 使用 Touch ID進(jìn)行身份驗證。指紋識別Touch ID提供3+2共5次指紋識別機(jī)會(3次識別失敗后,彈出的指紋驗證框會消失,同時會報錯code = -1舔琅,然后點擊指紋會再次彈框可驗證兩次),如果五次指紋識別全部錯誤洲劣,就需要手動輸入數(shù)字密碼备蚓,數(shù)字密碼可以輸入6次,如果6次輸入的數(shù)字密碼都錯誤囱稽,系統(tǒng)會停止驗證星著,一定的間隔后才能再次輸入密碼驗證,而且間隔會隨著輸入的次數(shù)增長粗悯。

使用方法

1.首先導(dǎo)入框架LocalAuthentication
2.判斷系統(tǒng)版本,最低iOS 8.0
3.創(chuàng)建驗證對象上下文LAContext
4.判斷指紋識別技術(shù)是否可用canEvaluatePolicy
5.如果可用同欠,開始調(diào)用方法開始使用指紋識別


#import <LocalAuthentication/LocalAuthentication.h>


//指紋按鈕
- (void)showFingerprintTouch
{
    //系統(tǒng)支持样傍,最低iOS 8.0
    if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0)
    {
        LAContext * context = [[LAContext alloc] init];
        NSError * error;
        if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error])
        {
            
            //localizedReason: 指紋識別出現(xiàn)時的提示文字
            [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"指紋解鎖" reply:^(BOOL success, NSError * _Nullable error) {
                
                if (success)
                {
                    //識別成功
                    dispatch_async(dispatch_get_main_queue(), ^{
                            //在主線程中横缔,處理 ......
                    });
                }
                else if (error)
                {
                    NSLog(@"LAPolicyDeviceOwnerAuthenticationWithBiometrics -- %@",error);
                }
                
            }];
            
        }
        else if([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthentication error:nil])
        {
            [context evaluatePolicy:LAPolicyDeviceOwnerAuthentication localizedReason:@"密碼解鎖" reply:^(BOOL success, NSError * _Nullable error){
                
                NSLog(@"LAPolicyDeviceOwnerAuthentication -- %@", error);
                
            }];
        }
        NSLog(@" --- %@ ", error);
    }
}

代碼解析

指紋識別的策略

[context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:nil] [context canEvaluatePolicy:LAPolicyDeviceOwnerAuthentication error:nil]

  • LAPolicyDeviceOwnerAuthenticationWithBiometrics ,指紋授權(quán)使用衫哥, 當(dāng)設(shè)備不具有Touch ID的功能茎刚,或者在系統(tǒng)設(shè)置中沒有設(shè)置開啟指紋,授權(quán)將會失敗撤逢。當(dāng)指紋驗證3+2次都沒有通過的時候指紋驗證就會被鎖定膛锭,就需要先進(jìn)行數(shù)字密碼的解鎖才能繼續(xù)使用指紋密碼。

  • LAPolicyDeviceOwnerAuthentication蚊荣,指紋和數(shù)字密碼的授權(quán)使用初狰,當(dāng)指紋可用且沒有被鎖定,授權(quán)后會進(jìn)入指紋密碼驗證互例。不然的話會進(jìn)入數(shù)字密碼驗證的頁面奢入。當(dāng)系統(tǒng)數(shù)字密碼沒有設(shè)置不可用的時候,授權(quán)失敗媳叨。如果數(shù)字密碼輸入不正確腥光,連續(xù)6次輸入數(shù)字密碼都不正確后,會停用鑒定過一定的間隔后才能使用糊秆,間隔時間依次增長武福,如圖:


  • 彈出的指紋驗證框的兩個按鈕的標(biāo)題,可以通過下面的方法修改:
    context.localizedCancelTitle = @"取消"; context.localizedFallbackTitle = @"輸入密碼";
  • localizedReason:是用來設(shè)置彈出框的提示內(nèi)容的痘番,一般寫的是使用原因捉片,如圖:


錯誤情況

官方文檔中給出的錯誤情況,有以下幾種夫偶,如圖:

簡單介紹幾種常出現(xiàn)的錯誤

3次驗證失敗后報錯
Error Domain=com.apple.LocalAuthentication Code=-1 "Application retry limit exceeded." UserInfo={NSLocalizedDescription=Application retry limit exceeded

用戶取消
Error Domain=com.apple.LocalAuthentication Code=-2

用戶在彈出的指紋驗證框中界睁,點擊輸入密碼
Error Domain=com.apple.LocalAuthentication Code=-3 "Fallback authentication mechanism selected."
可以判斷這種錯誤 error.code == -3,進(jìn)行后面的操作

設(shè)備沒有設(shè)置指紋報錯
Error Domain=com.apple.LocalAuthentication Code=-7 "No fingers are enrolled with Touch ID."

3+2次指紋驗證都失敗后報錯兵拢,這種情況指紋解鎖會被鎖定翻斟,輸入數(shù)字密碼真確后才能再次進(jìn)行指紋驗證
Error Domain=com.apple.LocalAuthentication Code=-8 "Biometry is locked out."

注意事項

  • 識別成功后在主線程上處理
    識別成功后,不是在主線程上说铃,如果不切換到主線程上访惜,后面的不會及時處理。

  • 如果不寫后面canEvaluatePolicy:LAPolicyDeviceOwnerAuthentication判斷腻扇,在iOS 10 上會遇到一個問題就是债热,在你驗證了3+2次指紋都沒成功之后,系統(tǒng)不會彈出輸入密碼的驗證頁面幼苛,點擊指紋驗證按鈕也沒有反應(yīng)窒篱。但是在iOS9中5次驗證失敗之后點擊再次驗證,系統(tǒng)會彈出輸入數(shù)字密碼的頁面。

最后

附上帶有指紋墙杯、手勢和數(shù)字密碼解鎖的例子配并。傳送門 GitHub

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市高镐,隨后出現(xiàn)的幾起案子溉旋,更是在濱河造成了極大的恐慌,老刑警劉巖嫉髓,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件观腊,死亡現(xiàn)場離奇詭異,居然都是意外死亡算行,警方通過查閱死者的電腦和手機(jī)梧油,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纱意,“玉大人婶溯,你說我怎么就攤上這事⊥得梗” “怎么了迄委?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長类少。 經(jīng)常有香客問我叙身,道長,這世上最難降的妖魔是什么硫狞? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任信轿,我火速辦了婚禮,結(jié)果婚禮上残吩,老公的妹妹穿的比我還像新娘财忽。我一直安慰自己,他們只是感情好泣侮,可當(dāng)我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布即彪。 她就那樣靜靜地躺著,像睡著了一般活尊。 火紅的嫁衣襯著肌膚如雪隶校。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天蛹锰,我揣著相機(jī)與錄音深胳,去河邊找鬼。 笑死铜犬,一個胖子當(dāng)著我的面吹牛舞终,可吹牛的內(nèi)容都是我干的轻庆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼权埠,長吁一口氣:“原來是場噩夢啊……” “哼榨了!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起攘蔽,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎呐粘,沒想到半個月后满俗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡作岖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年唆垃,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片痘儡。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡辕万,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出沉删,到底是詐尸還是另有隱情渐尿,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布矾瑰,位于F島的核電站砖茸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏殴穴。R本人自食惡果不足惜凉夯,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望采幌。 院中可真熱鬧劲够,春花似錦、人聲如沸休傍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尊残。三九已至炒瘸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間寝衫,已是汗流浹背顷扩。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留慰毅,地道東北人隘截。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親婶芭。 傳聞我的和親對象是個殘疾皇子东臀,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,914評論 2 355

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

  • 簡述: 在類似支付寶為首的應(yīng)用以及各種理財?shù)壬婕板X財對安全性要求較高的應(yīng)用中,目前普遍對關(guān)鍵數(shù)據(jù)都做了安全訪問限制...
    C_HPY閱讀 2,960評論 0 18
  • 指紋識別: iPhone5S開始,推出指紋識別 iOS8.0之后蘋果允許第三方 App 使用 Touch ID進(jìn)行...
    a437e8f87a81閱讀 1,385評論 0 17
  • 蘋果從iPhone5S開始犀农,具有指紋識別技術(shù)惰赋,從iOS8.0之后蘋果允許第三方 App 使用 Touch ID進(jìn)行...
    ptlCoder閱讀 659評論 0 0
  • 有一天 當(dāng)我醒來 世界,只剩下三種顏色 白色呵哨,灰色赁濒,和黑色 天是白色 云是灰色 地,是黑色 這樣孟害,晴天和雨天就沒有...
    伽藍(lán)x閱讀 552評論 0 8
  • webview.backgroundColor = [UIColor clearColor]; webview.o...
    wzpforwork閱讀 633評論 0 0