成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

iOS 8 中如何用 Swift 實現 Touch ID 驗證

移動開發 iOS
iOS8開放了很多API,包括HomeKit、HealthKit什么的。我們這里要說的是其中之一的Touch ID驗證。如題所述,這個項目使用Swift來實現的。如果你的swift不熟的話,需要略微補補腦哦。

iOS8開放了很多API,包括HomeKit、HealthKit什么的。我們這里要說的是其中之一的Touch ID驗證。

以前用app保護用戶的隱私內容,只能設定和輸入密碼。眼看著只能是iPhone本身用Touch ID方便酷炫的解鎖而自己的app不能。實在讓人捉急。現在咱也可以酷炫一把了。當用戶打開使用了Touch ID認證的app查看什么內容的時候就只能是把手指放在Home鍵上去驗證身份。在app中驗證的指紋就是用戶在手機里的指紋。是的,你的app無需用戶 再輸入一次驗證用的指紋了。所以使用起來還是很方便的。不過你要做好其他的準備。就像iPhone解鎖少不了密碼輸入一樣。用戶如果沒有開啟Touch ID咱的app也不能扒瞎不是?

如題所述,這個項目使用Swift來實現的。如果你的swift不熟的話,需要略微補補腦哦。

說了這么多,看看效果吧

看到了吧。只要把大拇指放在Home鍵上就會解鎖了。

界面布局是這樣的:

這里是通過點擊按鈕觸發驗證的。點了Authenticate按鈕之后彈出***張圖的驗證提示。

好啦,進入正題。

首先創建一個項目。名字啊什么的就隨你的便了都可以。但是編程語言,這里需要選擇Swift。既然xcode6.0.1已經號稱提供了對swift 的全面支持。那我們就直接上swift了。實在不行還可以通過蘋果提供的機制調用已有的ObjC代碼。總之五個字:這都不是事。而且swfit本來也可以 省很多的代碼量。項目的其他的地方保持默認選擇就可以。也就是我們省點事,直接用storyboard就好了。雖然其實沒有什么界面元素可以省略了。。。

在創建好的項目里,選擇Build Phases。把LocalAuthentication的framework引入項目。到這里項目的設置就可以了。

在代碼中import引入的framework。

  1. import LocalAuthentication 

接下來創建一個按鈕:

  1. var authButton: UIButton = UIButton.buttonWithType(UIButtonType.System) as UIButton 
  2. authButton.frame = CGRect(x: 100, y: screenHeight / 2, width: 100, height: 30) 
  3. authButton.setTitle("Authenticate", forState: UIControlState.Normal) 

這里是創建按鈕的代碼。首先創建一個和系統同類型的按鈕。UIButton.buttonWithType(UIButtonType.System)返回的是一個AnyObject類型的對象,所以需要強制類型轉換成UIButon的。AnyObject和Any這兩個類型會經常遇到。主要是為了和ObjC之前的代碼想兼容。所以也會經常的用is或者as操作符檢測和強制類型轉換。

  • AnyObject是指任何一個class類型的實例
  • Any是指任何一個類型的實例

比如,AnyObject數組可以存放任意某個class類型的實例。這些實例都是class類型,而且是同一個類型的。Any的數組則可以放任意類型的實例,而且這些數組成員的類型不一定是一樣的。

創建UIButton的代碼和之前用OC的方式沒有什么太大的區別。只不過換成了swift的語法。有了按鈕以后,也就該設定按鈕點擊事件的處理方法了。還記得不addTarget:

  1. authButton.addTarget(self, action: Selector("addPassAction:"), forControlEvents: UIControlEvents.TouchUpInside) 

先看看addTarget的聲明:func addTarget(target: AnyObject?, action: Selector, forControlEvents controlEvents: UIControlEvents) 對 應在方法的調用中可以看到self就是AnyObject的target,不用多說什么了。后面的action是一個Selector的結構體 (struct)。我們在調用的時候初始化了一個Selector的結構體。這個參數也可以直接給出action的字符串,而不用初始化Selector 這個結構體。這里涉及到了一個類型自動轉換的知識點。Selector的構造函數需要提供一個字符串作為參數,所以如果直接給出字符串的時候編譯器會直接 把這個字符串作為參數初始化一個Selector的結構體出來。Selector的字符串內容中,***是一個冒號“:”,和ObjC的寫法一樣的。冒號說 明方法有一個參數。***是UIControlEvents的枚舉類型。這里總于不用每次都寫的那么長了。

然后,實現Selector:

  1. func addPassAction(sender:UIButton!){ 
  2.         println("add pass action"
  3.   
  4.         var laContext = LAContext() 
  5.         var authError : NSError? 
  6.         var errorReason = "keep things secret" 
  7.   
  8.         if laContext.canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, error: &authError){ 
  9.             laContext.evaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, localizedReason: errorReason, reply: { 
  10.                 (success, error) in 
  11.                 if success { 
  12.                     println("succeed"
  13.                 } 
  14.                 else
  15.                     println("failed"
  16.                 } 
  17.             }) 
  18.         } 
  19.         else
  20.             var alert = UIAlertView(title: "Can not do authenticatation", message: "", delegate: nil, cancelButtonTitle: "Cancel"
  21.         } 
  22.     } 

這里最重要的就是Touch ID驗證的功能了。var laContext = LAContext()用到了類型推斷。給變量初始化的實例是什么類型的,這個變量就自動推斷為是那個類型。var authError : NSError? 類 型推斷和optional value。optional value就是在類型的后面加了一個問號。表示這個值可以是某個實例也可以是nil。注意:swift的nil和ObjC的nil是兩回事。ObjC的 nil是引用類型的一個空值。swift的nil就是說此變量沒有值,是不是引用類型都可以。var errorReason = "keep things secret"這個字符串是要在界面中現實的。所以絕對不可以為空!

laContext.canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, error: &authError)檢查設備是不是可以用biometrics的方法驗證身份。就是看看能不能指紋解鎖。沒有硬件,或者有硬件沒設定好指紋的都是不可以驗證的。好的,如果已經設定好了指紋,那么就可以解鎖了。

  1. laContext.evaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, localizedReason: errorReason, reply: { 
  2.  
  3.                 (success, error) in 
  4.  
  5.                 if success { 
  6.  
  7.                     println("succeed"
  8.  
  9.                 } 
  10.  
  11.                 else
  12.  
  13.                     println("failed"
  14.  
  15.                 } 
  16.  
  17.             }) 

后面的replay參數是一個返回值為空的closure。這個closure的參數是bool和NSError!closure的一般形式是{(參數1, 參數2)->返回值類型 in //代碼}success返 回驗證結果,成功活失敗(true或false)。這時,根據驗證的成功或者失敗,替換掉println("succeed")或者 println("failed")語句,實現你需要實現的功能。比如,進入app的功能詳細頁等用Touch ID保護的信息。如果無法驗證,就跳轉到密碼驗證部分。這樣用戶在指紋驗證無法進行的情況下還可以通過輸入密碼進入到app的功能部分。

就到這里了。寫個項目試試吧!

責任編輯:閆佳明 來源: cnblogs
相關推薦

2014-10-15 10:09:12

iOS 8Touch ID開發

2021-07-27 07:15:11

蘋果Touch IDiOS

2011-07-22 13:22:10

Java.NETDataTable

2011-09-05 13:53:08

Sencha Touc列表

2011-09-05 12:49:59

Sencha Touc事件

2022-07-08 07:02:10

Python動態碼OTP

2018-12-04 14:46:03

蘋果Face IDTouch ID

2011-03-15 09:10:47

iptablesNAT

2011-03-15 14:26:23

iptablesNAT

2011-09-05 13:48:36

Sencha Touc圖標

2011-05-11 10:28:03

2011-08-30 17:33:10

OracleSAS宏

2021-02-01 16:55:13

iPhoneTouch ID蘋果

2015-04-10 19:59:31

iOS8.3Touch ID

2020-05-09 10:38:31

Python透視表數據

2011-07-22 13:23:56

IOS UI ScrollView

2010-08-12 13:34:13

Flex驗證組件

2011-06-15 16:11:51

UIKitCocoa TouchiOS

2009-03-24 13:04:55

匯總組織結構Oracle

2011-08-17 10:09:25

iPhone開發UIWebViewTouch事件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产乱码精品一区二区三区五月婷 | 欧美性猛交一区二区三区精品 | 美女二区 | 亚洲第一中文字幕 | 久久国产精品一区二区三区 | 日韩在线观看网站 | 亚洲精品国产成人 | av一区二区在线观看 | av手机免费在线观看 | 91视频在线看| 欧美精品综合 | 欧美精品欧美精品系列 | 天天射影院 | 精品国产91亚洲一区二区三区www | 亚洲精品白浆高清久久久久久 | 97精品国产| 精品一区二区免费视频 | 精品国产黄色片 | 午夜视频导航 | 国产成人一区二 | 日韩视频在线观看一区二区 | 国产精品伦一区二区三级视频 | 久久精品视频免费观看 | 免费成人av网站 | 国产一区二区三区 | 国产精品久久久久免费 | 欧美成人在线网站 | 亚洲国产精品99久久久久久久久 | 射欧美 | 欧美激情一区 | 久久久青草婷婷精品综合日韩 | 国产高潮好爽受不了了夜色 | 中文在线亚洲 | 自拍偷拍第一页 | 久久久久国 | 久久久久国产一区二区三区四区 | 亚洲成人av一区二区 | 久久另类视频 | 国产资源在线播放 | 亚洲国产精品久久久久婷婷老年 | 一区二区三区小视频 |