iOS 開發(fā)之Touch ID功能實(shí)現(xiàn)

摘要

由于新項(xiàng)目馬上啟動(dòng),看了下需求文檔稿械,其中搂漠,可能會用到Touch ID或Face ID技術(shù)實(shí)現(xiàn)支付功能作瞄,于是恢着,現(xiàn)做一些技術(shù)準(zhǔn)備桐愉,把學(xué)習(xí)Touch ID方面的知識做個(gè)總結(jié),待真正開發(fā)時(shí)掰派,應(yīng)用上去从诲。


開發(fā)步驟
首先,touchId功能靡羡,用到了蘋果自帶的LocalAuthentication框架系洛。具體開發(fā)步驟如下:

  • 判斷手機(jī)是否支持TouchID功能。
    LAContext.init().canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: &error)
  • 判斷驗(yàn)證指紋密碼是否成功等
    LAContext.init().evaluatePolicy(policy: ***, localizedReason: ***, reply: ***)
    它有多個(gè)結(jié)果 略步,如下:
let code = ((eror as NSError?)?.code as? Int32 ) ?? 0
      switch code {
            case kLAErrorSystemCancel:
                 print("系統(tǒng)取消授權(quán)描扯,如其他APP切入")
            case kLAErrorUserCancel:
                 print("用戶取消驗(yàn)證Touch ID")
            case kLAErrorAuthenticationFailed:
                 print("授權(quán)失敗")
            case kLAErrorPasscodeNotSet:
                 print("系統(tǒng)未設(shè)置密碼")
            case kLAErrorTouchIDNotAvailable:
                 print("設(shè)備Touch ID不可用,例如未打開")
            case kLAErrorTouchIDNotEnrolled:
                 print("設(shè)備Touch ID不可用趟薄,用戶未錄入")
            case kLAErrorUserFallback:
                 DispatchQueue.main.async {
                      print("用戶選擇輸入密碼绽诚,切換主線程處理")
                 }
           default:
                 DispatchQueue.main.async {
                     print("其他情況,切換主線程處理")
        }
   }

測試寫的demo如下:
封封裝成一個(gè)工具類

/// 指紋識別技術(shù)
import UIKit
import LocalAuthentication

class XYJTouchIDTool: NSObject {
    
    static let shareTool = LAContext.init()
    
    override init() {
        super.init()
    }
    
    ///
    func openTouchIdFunction() {
        var error: NSError?
        let version = UIDevice.current.systemVersion as NSString
        // iOS 8及以上版本執(zhí)行-(void)authenticateUser方法杭煎,方法自動(dòng)判斷設(shè)備是否支持和開啟Touch ID
        if version.doubleValue > 8.0 {
            // Evaluate: 評估,評價(jià)
            // policy: 政策,方法
            // 判斷是否可以使用TouchID
            let canUseTouchID = XYJTouchIDTool.shareTool.canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: &error)
            if canUseTouchID {
                print("你的設(shè)備開啟了指紋驗(yàn)證功能");
                XYJTouchIDTool.shareTool.evaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, localizedReason: "這個(gè)一般用來描述請求用戶提供指紋進(jìn)行驗(yàn)證的文本提示內(nèi)容恩够,該內(nèi)容提示用戶為什么需要使用指紋驗(yàn)證的內(nèi)容---如:利用他解鎖(支付)", reply: { (result, eror) in
                    if result == true { // 判斷驗(yàn)證是否成功
                        print("驗(yàn)證成功")
                    } else {
                        let code = ((eror as NSError?)?.code as? Int32 ) ?? 0
                        switch code {
                            case kLAErrorSystemCancel:
                                print("系統(tǒng)取消授權(quán),如其他APP切入")
                            case kLAErrorUserCancel:
                                print("用戶取消驗(yàn)證Touch ID")
                            case kLAErrorAuthenticationFailed:
                                print("授權(quán)失敗")
                            case kLAErrorPasscodeNotSet:
                                print("系統(tǒng)未設(shè)置密碼")
                            case kLAErrorTouchIDNotAvailable:
                                print("設(shè)備Touch ID不可用羡铲,例如未打開")
                            case kLAErrorTouchIDNotEnrolled:
                                print("設(shè)備Touch ID不可用蜂桶,用戶未錄入")
                            case kLAErrorUserFallback:
                                DispatchQueue.main.async {
                                    print("用戶選擇輸入密碼,切換主線程處理")
                                }
                            default:
                                DispatchQueue.main.async {
                                    print("其他情況也切,切換主線程處理")
                                }
                        }
                    }
                })
                
            } else {
                print("不支持指紋識別")
            }
        }
        
    }
    
    
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末扑媚,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子雷恃,更是在濱河造成了極大的恐慌钦购,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件褂萧,死亡現(xiàn)場離奇詭異押桃,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)导犹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進(jìn)店門唱凯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谎痢,你說我怎么就攤上這事磕昼。” “怎么了节猿?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵票从,是天一觀的道長漫雕。 經(jīng)常有香客問我,道長峰鄙,這世上最難降的妖魔是什么浸间? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮吟榴,結(jié)果婚禮上魁蒜,老公的妹妹穿的比我還像新娘。我一直安慰自己吩翻,他們只是感情好兜看,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著狭瞎,像睡著了一般细移。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上熊锭,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天弧轧,我揣著相機(jī)與錄音,去河邊找鬼球涛。 笑死,一個(gè)胖子當(dāng)著我的面吹牛校镐,可吹牛的內(nèi)容都是我干的亿扁。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鸟廓,長吁一口氣:“原來是場噩夢啊……” “哼从祝!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起引谜,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤牍陌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后员咽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體毒涧,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年贝室,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了契讲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,932評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡滑频,死狀恐怖捡偏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情峡迷,我是刑警寧澤银伟,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響彤避,放射性物質(zhì)發(fā)生泄漏傅物。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一忠藤、第九天 我趴在偏房一處隱蔽的房頂上張望挟伙。 院中可真熱鬧,春花似錦模孩、人聲如沸尖阔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽介却。三九已至,卻和暖如春块茁,著一層夾襖步出監(jiān)牢的瞬間齿坷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工数焊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留永淌,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓佩耳,卻偏偏與公主長得像遂蛀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子干厚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評論 2 354

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