iOS Touch ID(指紋識(shí)別)的應(yīng)用

自從 Apple 大大發(fā)布 iPhone 5s 以后州疾,指紋識(shí)別似乎成為了手機(jī)的標(biāo)配鞭铆,指紋識(shí)別的加入使得手機(jī)解鎖變得更加方便快捷玫恳。iOS 8發(fā)布以后矛市,Apple 大大開(kāi)放了 Touch ID 給第三方使用芙沥,最常見(jiàn)的場(chǎng)景就是應(yīng)用的登錄,以及日常的支付浊吏,提高了應(yīng)用日常的使用效率而昨。

最近公司項(xiàng)目也準(zhǔn)備接入指紋識(shí)別,于是花了點(diǎn)時(shí)間研究了一下找田,借機(jī)跟大家分享一下心得歌憨,如有不妥之處,歡迎指正墩衙。

在使用 Touch ID 的時(shí)候需要導(dǎo)入系統(tǒng)框架類(lèi):
#import <LocalAuthentication/LocalAuthentication.h>
為了展示效果务嫡,我只寫(xiě)了一個(gè)按鈕,看效果圖:

首頁(yè).png

點(diǎn)擊按鈕進(jìn)行指紋驗(yàn)證漆改,在驗(yàn)證指紋之前心铃,首先要判斷系統(tǒng)版本是否大于8.0,因?yàn)樵?.0以后挫剑,Touch ID 才開(kāi)放給第三方使用:

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0){}

然后要判斷設(shè)備是否支持指紋去扣,這一點(diǎn)很重要,如果返回為 NO 會(huì)同時(shí)返回對(duì)應(yīng)的錯(cuò)誤暮顺,要做進(jìn)一步處理:

//獲取上下文
LAContext *myContext = [[LAContext alloc] init];
NSError *error = nil;
/*!
 *@abstract 判斷設(shè)備是否支持指紋識(shí)別
 *@param    LAPolicyDeviceOwnerAuthenticationWithBiometrics 指紋驗(yàn)證
 *@return   YES:支持 NO:不支持
 */
if([myContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]){}

這里要說(shuō)明的是如果返回為 NO厅篓,不一定是設(shè)備不支持指紋秀存,也有可能是未錄入指紋或者未設(shè)置密碼:

NSString *message = @"";
switch (error.code)
{
       case LAErrorTouchIDNotEnrolled:  /// 支持指紋并已設(shè)置密碼捶码,但未錄入指紋
       {
            message = @"用戶未錄入指紋羽氮!";
            break;
       }
       case LAErrorPasscodeNotSet:      /// 支持指紋但未設(shè)置密碼,并已錄入指紋
       {
            message = @"設(shè)備未設(shè)置密碼惫恼!";
            break;
       }
       default:
       {
            message = @"不支持指紋識(shí)別档押!";  /// 不支持指紋
            break;
       }
}

支持指紋后要進(jìn)行指紋驗(yàn)證,這個(gè)方法會(huì)有一個(gè)回調(diào)來(lái)告訴開(kāi)發(fā)者驗(yàn)證成功還是失敗祈纯,如果失敗會(huì)返回對(duì)應(yīng)的錯(cuò)誤:

/*!
 *@abstract 指紋驗(yàn)證以及回調(diào)
 *@param    LAPolicyDeviceOwnerAuthenticationWithBiometrics 指紋驗(yàn)證
 *@param    localizedReason 進(jìn)行指紋驗(yàn)證時(shí)的彈窗的展示內(nèi)容(該參數(shù)不能為nil或者空串令宿,否則會(huì)拋出異常)
 *@param    reply:驗(yàn)證后的回調(diào)block
 */
 [myContext evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
                  localizedReason:@"通過(guò)Home鍵驗(yàn)證已有指紋"
                            reply:^(BOOL success, NSError * _Nullable error){}

這里要說(shuō)明的是如果失敗,返回的錯(cuò)誤有多種腕窥,針對(duì)每一種錯(cuò)誤都要做處理:

switch (error.code)
{
      case LAErrorAuthenticationFailed: /// 連續(xù)三次指紋識(shí)別錯(cuò)誤
      {
           message = @"授權(quán)失斄C弧!";
      }
      break;
      case LAErrorUserCancel: /// 在TouchID對(duì)話框中點(diǎn)擊了取消按鈕
      {
           message = @"用戶取消驗(yàn)證Touch ID簇爆!";
      }
      break;
      case LAErrorUserFallback: /// 在TouchID對(duì)話框中點(diǎn)擊了輸入密碼按鈕
      {
            dispatch_async(dispatch_get_main_queue(), ^
            {
                  message = @"用戶選擇輸入密碼癞松!";
            });
       }
       break;
       case LAErrorSystemCancel: /// TouchID對(duì)話框被系統(tǒng)取消,例如按下Home或者電源鍵
       {
            message = @"系統(tǒng)取消授權(quán)入蛆,如其他應(yīng)用進(jìn)入前臺(tái)响蓉,用戶按下Home或者電源鍵!";
       }
       break;
       case LAErrorPasscodeNotSet: /// 已錄入指紋但設(shè)備未設(shè)置密碼
       {
            message = @"設(shè)備未設(shè)置密碼哨毁!";
       }
       break;
       case LAErrorTouchIDNotAvailable: /// TouchID不可用
       {
            message = @"Touch ID不可用枫甲!";
       }
       break;
       case LAErrorTouchIDNotEnrolled:/// 用戶未錄入指紋
       {
            message = @"用戶未錄入指紋!";
       }
       break;
       #if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_9_0
       case LAErrorTouchIDLockout: /// 連續(xù)五次指紋識(shí)別錯(cuò)誤扼褪,TouchID功能被鎖定想幻,下一次需要輸入系統(tǒng)密碼
       {
            message = @"Touch ID被鎖,需要用戶輸入密碼解鎖话浇!";
       }
       break;
       case LAErrorAppCancel: /// 如突然來(lái)了電話举畸,電話應(yīng)用進(jìn)入前臺(tái),APP被掛起啦
       {
            message = @"用戶不能控制情況下APP被掛起凳枝!";
       }
       break;
       case LAErrorInvalidContext: /// -10 LAContext傳遞給這個(gè)調(diào)用之前已經(jīng)失效
       {
            message = @"LAContext傳遞給這個(gè)調(diào)用之前已經(jīng)失效抄沮!";
       }
       break;
       #endif
       default:
       {
            dispatch_async(dispatch_get_main_queue(), ^
            {
                 message = @"其他情況,切換主線程處理岖瑰!";
            });
            break;
        }
}

整個(gè) Demo 可點(diǎn)擊Touch ID Demo叛买,還望多多支持,點(diǎn)個(gè)starL6B收酢!
這里貼出幾張截圖露戒,可對(duì)應(yīng)著看(原諒我不知道怎么并排排列圖片椒功,知道的簡(jiǎn)友麻煩評(píng)論或私信告知一下捶箱,不甚感激! ):

未錄入指紋.jpg

驗(yàn)證指紋.jpg
取消驗(yàn)證指紋.jpg
驗(yàn)證指紋失敗.jpg
三次驗(yàn)證指紋失敗.jpg
五次驗(yàn)證指紋失敗.jpg
用戶選擇輸入密碼.jpg
驗(yàn)證通過(guò).jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末动漾,一起剝皮案震驚了整個(gè)濱河市丁屎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌旱眯,老刑警劉巖晨川,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異删豺,居然都是意外死亡共虑,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)呀页,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)妈拌,“玉大人,你說(shuō)我怎么就攤上這事蓬蝶〕痉郑” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵疾党,是天一觀的道長(zhǎng)音诫。 經(jīng)常有香客問(wèn)我,道長(zhǎng)雪位,這世上最難降的妖魔是什么竭钝? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮雹洗,結(jié)果婚禮上香罐,老公的妹妹穿的比我還像新娘。我一直安慰自己时肿,他們只是感情好庇茫,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著螃成,像睡著了一般旦签。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上寸宏,一...
    開(kāi)封第一講書(shū)人閱讀 49,144評(píng)論 1 285
  • 那天宁炫,我揣著相機(jī)與錄音观堂,去河邊找鬼宪迟。 笑死,一個(gè)胖子當(dāng)著我的面吹牛吴叶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播竿秆,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼启摄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了幽钢?” 一聲冷哼從身側(cè)響起歉备,我...
    開(kāi)封第一講書(shū)人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎搅吁,沒(méi)想到半個(gè)月后威创,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體落午,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谎懦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了溃斋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片界拦。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖梗劫,靈堂內(nèi)的尸體忽然破棺而出享甸,到底是詐尸還是另有隱情,我是刑警寧澤梳侨,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布蛉威,位于F島的核電站,受9級(jí)特大地震影響走哺,放射性物質(zhì)發(fā)生泄漏蚯嫌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一丙躏、第九天 我趴在偏房一處隱蔽的房頂上張望择示。 院中可真熱鬧,春花似錦晒旅、人聲如沸栅盲。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)谈秫。三九已至,卻和暖如春鱼鼓,著一層夾襖步出監(jiān)牢的瞬間拟烫,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工蚓哩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留构灸,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像喜颁,于是被迫代替她去往敵國(guó)和親稠氮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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

  • iOS 8 SDK向開(kāi)發(fā)者公開(kāi)了Touch ID指紋識(shí)別功能半开,允許App對(duì)用戶身份進(jìn)行本地驗(yàn)證隔披。使用TouchID...
    走在路上的小二閱讀 916評(píng)論 0 4
  • 實(shí)用原理: 指紋識(shí)別技術(shù)就是把一個(gè)人同他的指紋對(duì)應(yīng)起來(lái),通過(guò)比較他的指紋和預(yù)先保存的指紋進(jìn)行比較寂拆,就可以驗(yàn)證他的真...
    艷曉閱讀 3,205評(píng)論 0 19
  • 簡(jiǎn)述: 在類(lèi)似支付寶為首的應(yīng)用以及各種理財(cái)?shù)壬婕板X(qián)財(cái)對(duì)安全性要求較高的應(yīng)用中奢米,目前普遍對(duì)關(guān)鍵數(shù)據(jù)都做了安全訪問(wèn)限制...
    C_HPY閱讀 2,928評(píng)論 0 18
  • Android 插件框架機(jī)制系列文章:Android 插件框架機(jī)制之預(yù)熱篇 引言 上一篇文章提到過(guò)Small,這次...
    mymdeep閱讀 471評(píng)論 0 0
  • 今天,又到了作別的時(shí)刻尝江,那個(gè)名叫2016的朋友涉波,有幾句話我們要對(duì)你說(shuō)。 再見(jiàn)炭序,2016啤覆,再見(jiàn)這一年我吃過(guò)的泡面雞腿...
    吹風(fēng)的少年閱讀 261評(píng)論 0 0