使用iOS 8 SDK添加Touch ID指紋識別功能

來源:互聯網
上載者:User

使用iOS 8 SDK添加Touch ID指紋識別功能

iOS 8 SDK向開發人員公開了Touch ID指紋識別功能,允許App對使用者身份進行本地驗證。使用Touch ID非常簡單,只需要2步即可:

1. 檢查Touch ID是否可用。

2. 獲得指紋驗證結果。

下面以一個簡單的例子來說明如何使用Touch ID。

建立一個新的項目,向介面設計器中添加一個按鈕。使用Touch ID需要引入LocalAuthentication架構:

import LocalAuthentication

在按鈕的Touch Up Inside事件中我們首先檢查Touch ID功能是否可用:

    @IBAction func useTouchIdButtonClicked(sender: AnyObject)    {        //步驟1:檢查Touch ID是否可用        let authenticationContext = LAContext()        var error: NSError?        let isTouchIdAvailable = authenticationContext.canEvaluatePolicy(.DeviceOwnerAuthenticationWithBiometrics,                error: &error)        if isTouchIdAvailable        {            NSLog("恭喜,Touch ID可以使用!")            //步驟2:擷取指紋驗證結果            authenticationContext.evaluatePolicy(.DeviceOwnerAuthenticationWithBiometrics, localizedReason: "需要驗證您的指紋來確認您的身份資訊", reply: {                (success, error) -> Void in                if success                {                    NSLog("恭喜,您通過了Touch ID指紋驗證!")                }                else                {                    NSLog("抱歉,您未能通過Touch ID指紋驗證!\n\(error)")                }            })        }        else        {            NSLog("抱歉,Touch ID不可以使用!\n\(error)")        }    }

上面的代碼首先建立了一個LAContext執行個體,用於執行認證策略(Authentication Policies)。然後在該對象上調用canEvaluatePolicy方法執行某個指定的認證策略,其方法簽名為:

func canEvaluatePolicy(policy: LAPolicy, error: NSErrorPointer) -> Bool

LAPolicy枚舉目前只有一個枚舉值.DeviceOwnerAuthenticationWithBiometrics,即使用指紋生物識別技術方式來認證裝置機主。

enum LAPolicy: Int{    case DeviceOwnerAuthenticationWithBiometrics}
注意到canEvaluatePolicy方法返回的是Bool值,表示指定的認證策略是否允許執行。當方法返回false時,可以通過error對象來擷取詳細的失敗原因。失敗的情況可能是裝置本身不支援,例如舊版本的iPhone與iPad;運行在模擬器上;或者使用者未開啟Touch ID功能等。

例如,在iPhone 5上運行結果為:

抱歉,Touch ID不可以使用!Optional(Error Domain=com.apple.LocalAuthentication Code=-6 "Biometry is not available on this device." UserInfo=0x15ec5a00 {NSLocalizedDescription=Biometry is not available on this device.})
在模擬器上的運行結果為:

抱歉,Touch ID不可以使用!Optional(Error Domain=com.apple.LocalAuthentication Code=-1000 "Simulator is not supported." UserInfo=0x7ffe604b0790 {NSLocalizedDescription=Simulator is not supported.})

當允許使用Touch ID後,可以接著調用evaluatePolicy方法執行指定的認證策略,方法簽名為:

func evaluatePolicy(policy: LAPolicy, localizedReason: String!, reply: ((Bool, NSError!) -> Void)!)
調用該方法將彈出系統調用Touch ID的對話方塊,其中的localizedReason參數用於在對話方塊中提示使用者詳細的理由和原因(應言簡意賅,但不可為空白或者空串)。

reply參數是一個Block,其中的Bool型別參數success表示指紋驗證是否通過,當失敗時error參數包含了具體的失敗資訊。這裡有很多種失敗的情況(我自己只測試出了以下5種情況,如有遺漏還請告知):

1. 連續三次指紋識別錯誤的運行結果:

抱歉,您未能通過Touch ID指紋驗證!Error Domain=com.apple.LocalAuthentication Code=-1 "Aplication retry limit exceeded." UserInfo=0x1740797c0 {NSLocalizedDescription=Aplication retry limit exceeded.}
2. Touch ID功能被鎖定,下一次需要輸入系統密碼時的運行結果:
抱歉,您未能通過Touch ID指紋驗證!Error Domain=com.apple.LocalAuthentication Code=-1 "Biometry is locked out." UserInfo=0x17407dc00 {NSLocalizedDescription=Biometry is locked out.}
3. 使用者在Touch ID對話方塊中點擊了取消按鈕:

抱歉,您未能通過Touch ID指紋驗證!Error Domain=com.apple.LocalAuthentication Code=-2 "Canceled by user." UserInfo=0x17006c780 {NSLocalizedDescription=Canceled by user.}
4. 在Touch ID對話方塊顯示過程中,背系統取消,例如按下電源鍵:

抱歉,您未能通過Touch ID指紋驗證!Error Domain=com.apple.LocalAuthentication Code=-4 "UI canceled by system." UserInfo=0x170065900 {NSLocalizedDescription=UI canceled by system.}
5. 使用者在Touch ID對話方塊中點擊輸入密碼按鈕:

抱歉,您未能通過Touch ID指紋驗證!Error Domain=com.apple.LocalAuthentication Code=-3 "Fallback authentication mechanism selected." UserInfo=0x17407e040 {NSLocalizedDescription=Fallback authentication mechanism selected.}
通過這個簡單的例子,相信您已經瞭解如何在您的App中添加指紋識別功能了。本文的項目代碼:

點擊開啟連結

如果您有任何問題,歡迎給我留言。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.