iOS 8 SDK添加Touch ID指紋識(shí)別功能

iOS 8 SDK向開(kāi)發(fā)者公開(kāi)了Touch ID指紋識(shí)別功能,允許App對(duì)用戶身份進(jìn)行本地驗(yàn)證。使用TouchID非常簡(jiǎn)單,只需要2步即可:

1. 檢查T(mén)ouch ID是否可用。

2. 獲得指紋驗(yàn)證結(jié)果。

下面以一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明如何使用Touch ID。

創(chuàng)建一個(gè)新的項(xiàng)目,向界面設(shè)計(jì)器中添加一個(gè)按鈕。使用Touch ID需要引入LocalAuthentication框架:

[plain]view plaincopy

importLocalAuthentication

在按鈕的Touch Up Inside事件中我們首先檢查T(mén)ouch ID功能是否可用:

[plain]view plaincopy

@IBActionfuncuseTouchIonClicked(sender:AnyObject)

{

//步驟1:檢查T(mén)ouchID是否可用

let authenticationContext=LAContext()

var ?error:NSError?

?let ?isTouchIdAvailable = authenticationContext.canEvaluatePolicy(.DeviceOwnerAuthenticationWithBiometrics,error:&error)

if isTouchIdAvailable {

NSLog("恭喜,TouchID可以使用!")

//步驟2:獲取指紋驗(yàn)證結(jié)果

authenticationContext.evaluatePolicy(.DeviceOwnerAuthenticationWithBiometrics,localizedReason:"需要驗(yàn)證您的指紋來(lái)確認(rèn)您的身份信息",reply:{ (success,error)->Void in

if success

{

NSLog("恭喜,您通過(guò)了TouchID指紋驗(yàn)證!")

}

else

{

NSLog("抱歉,您未能通過(guò)TouchID指紋驗(yàn)證!\n\(error)")

}})} else {

NSLog("抱歉,TouchID不可以使用!\n\(error)")

}}

上面的代碼首先創(chuàng)建了一個(gè)LAContext實(shí)例,用于執(zhí)行認(rèn)證策略(Authentication

Policies)。然后在該對(duì)象上調(diào)用canEvaluatePolicy方法執(zhí)行某個(gè)指定的認(rèn)證策略,其方法簽名為:

[plain]view plaincopy

funccanEvaluatePolicy(policy:LAPolicy,error:NSErrorPointer)->Bool

LAPolicy枚舉目前只有一個(gè)枚舉值.DeviceOwnerAuthenticationWithBiometrics,即使用指紋生物識(shí)別方式來(lái)認(rèn)證設(shè)備機(jī)主。

[plain]view plaincopy

enumLAPolicy:Int {

caseDeviceOwnerAuthenticationWithBiometrics

}

注意到canEvaluatePolicy方法返回的是Bool值,表示指定的認(rèn)證策略是否允許執(zhí)行。當(dāng)方法返回false時(shí),可以通過(guò)error對(duì)象來(lái)獲取詳細(xì)的失敗原因。失敗的情況可能是設(shè)備本身不支持,例如舊版本的iPhone與iPad;運(yùn)行在模擬器上;或者用戶未開(kāi)啟TouchID功能等。

例如,在iPhone 5上運(yùn)行結(jié)果為:

[plain]view plaincopy

抱歉,TouchID不可以使用!

Optional(ErrorDomain=com.apple.LocalAuthenticationCode=-6"Biometryisnotavailableonthisdevice."UserInfo=0x15ec5a00{NSLocalizedDescription=Biometryisnotavailableonthisdevice.})

在模擬器上的運(yùn)行結(jié)果為:

[plain]view plaincopy

抱歉,TouchID不可以使用!

Optional(ErrorDomain=com.apple.LocalAuthenticationCode=-1000"Simulatorisnotsupported."UserInfo=0x7ffe604b0790{NSLocalizedDescription=Simulatorisnotsupported.})

當(dāng)允許使用Touch ID后,可以接著調(diào)用evaluatePolicy方法執(zhí)行指定的認(rèn)證策略,方法簽名為:

[plain]view plaincopy

funcevaluatePolicy(policy:LAPolicy,localizedReason:String!,reply:((Bool,NSError!)->Void)!)

調(diào)用該方法將彈出系統(tǒng)調(diào)用TouchID的對(duì)話框,其中的localizedReason參數(shù)用于在對(duì)話框中提示用戶詳細(xì)的理由和原因(應(yīng)言簡(jiǎn)意賅,但不可為空或者空串)。

reply參數(shù)是一個(gè)Block,其中的Bool類(lèi)型參數(shù)success表示指紋驗(yàn)證是否通過(guò),當(dāng)失敗時(shí)error參數(shù)包含了具體的失敗信息。這里有很多種失敗的情況(我自己只測(cè)試出了以下5種情況,如有遺漏還請(qǐng)告知):

1. 連續(xù)三次指紋識(shí)別錯(cuò)誤的運(yùn)行結(jié)果:

[plain]view plaincopy

抱歉,您未能通過(guò)TouchID指紋驗(yàn)證!

ErrorDomain=com.apple.LocalAuthenticationCode=-1"Aplicationretrylimitexceeded."UserInfo=0x1740797c0{NSLocalizedDescription=Aplicationretrylimitexceeded.}

2. Touch ID功能被鎖定,下一次需要輸入系統(tǒng)密碼時(shí)的運(yùn)行結(jié)果:

[plain]view plaincopy

抱歉,您未能通過(guò)TouchID指紋驗(yàn)證!

ErrorDomain=com.apple.LocalAuthenticationCode=-1"Biometryislockedout."UserInfo=0x17407dc00{NSLocalizedDescription=Biometryislockedout.}

3. 用戶在Touch ID對(duì)話框中點(diǎn)擊了取消按鈕:

[plain]view plaincopy

抱歉,您未能通過(guò)TouchID指紋驗(yàn)證!

ErrorDomain=com.apple.LocalAuthenticationCode=-2"Canceledbyuser."UserInfo=0x17006c780{NSLocalizedDescription=Canceledbyuser.}

4.在Touch ID對(duì)話框顯示過(guò)程中,背系統(tǒng)取消,例如按下電源鍵:

[plain]view plaincopy

抱歉,您未能通過(guò)TouchID指紋驗(yàn)證!

ErrorDomain=com.apple.LocalAuthenticationCode=-4"UIcanceledbysystem."UserInfo=0x170065900{NSLocalizedDescription=UIcanceledbysystem.}

5. 用戶在Touch ID對(duì)話框中點(diǎn)擊輸入密碼按鈕:

[plain]view plaincopy

抱歉,您未能通過(guò)TouchID指紋驗(yàn)證!

ErrorDomain=com.apple.LocalAuthenticationCode=-3"Fallbackauthenticationmechanismselected."UserInfo=0x17407e040{NSLocalizedDescription=Fallbackauthenticationmechanismselected.}

通過(guò)這個(gè)簡(jiǎn)單的例子,相信您已經(jīng)了解如何在您的App中添加指紋識(shí)別功能了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • iOS 8 SDK向開(kāi)發(fā)者公開(kāi)了Touch ID指紋識(shí)別功能,允許App對(duì)用戶身份進(jìn)行本地驗(yàn)證。使用Touch I...
    X先生_vip閱讀 2,326評(píng)論 1 18
  • Touch ID Touch ID是iPhone5S后加入的一項(xiàng)新的功能,也就是大家熟知的指紋識(shí)別技術(shù)。大家用得最...
    cym_bj閱讀 710評(píng)論 0 3
  • 指紋解鎖原理: 蘋(píng)果在文件中對(duì)iPhone 5S配備的Touch ID指紋識(shí)別系統(tǒng)的功能與工作原理進(jìn)行了詳細(xì)說(shuō)明。...
    馬小悅閱讀 1,990評(píng)論 1 4
  • 最近做項(xiàng)目版本更新有個(gè)需求是 3DTouch解鎖功能, 由此原因接觸 Apple的指紋解鎖功能, 基本功能原先已經(jīng)...
    JerseyBro閱讀 1,591評(píng)論 0 4
  • 本文參加#感悟三下鄉(xiāng),青春筑夢(mèng)行#活動(dòng),本人承諾,文章內(nèi)容為原創(chuàng),且未在其他平臺(tái)發(fā)表過(guò)。基層公務(wù)員,被廣泛接受的定...
    ccf08a9fde4f閱讀 1,342評(píng)論 2 6

友情鏈接更多精彩內(nèi)容