iOS 指紋解鎖

Touch ID

最近公司的 APP 涉及到指紋識別這塊,之前沒有研究過,現在簡單總結下...

1.基本知識點

1.需要導入 #import <LocalAuthentication/LocalAuthentication.h>

2.注意到這兩個方法 
 //是否可以用 Touch ID 
- (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)error;

//用Touch ID后,返回的結果,是否成功
- (void)evaluatePolicy:(LAPolicy)policy
       localizedReason:(NSString *)localizedReason
                 reply:(void(^)(BOOL success, NSError * __nullable error))reply;

3.LAError.h(錯誤的類型)

typedef NS_ENUM(NSInteger, LAError)
{
    LAErrorAuthenticationFailed,    // 驗證信息出錯,就是說你指紋不對
    LAErrorUserCancel               // 用戶取消了驗證
    LAErrorUserFallback             // 用戶點擊了手動輸入密碼的按鈕,所以被取消了
    LAErrorSystemCancel             // 被系統取消,就是說你現在進入別的應用了,不在剛剛那個頁面,所以沒法驗證
    LAErrorPasscodeNotSet           // 用戶沒有設置TouchID
    LAErrorTouchIDNotAvailable      // 用戶設備不支持TouchID
    LAErrorTouchIDNotEnrolled       // 用戶沒有設置手指指紋
    LAErrorTouchIDLockout           // 用戶錯誤次數太多,現在被鎖住了
    LAErrorAppCancel                // 在驗證中被其他app中斷
    LAErrorInvalidContext           // 請求驗證出錯
} NS_ENUM_AVAILABLE(10_10, 8_0);

4.LAContext 屬性

@property (nonatomic, nullable, copy) NSString *localizedFallbackTitle;
@property (nonatomic, nullable, copy) NSString *localizedCancelTitle NS_AVAILABLE(10_12, 10_0);
@property (nonatomic, nullable) NSNumber *maxBiometryFailures NS_DEPRECATED_IOS(8_3, 9_0) __WATCHOS_UNAVAILABLE __TVOS_UNAVAILABLE;
@property (nonatomic, nullable, readonly) NSData *evaluatedPolicyDomainState NS_AVAILABLE(10_11, 9_0) __WATCHOS_UNAVAILABLE __TVOS_UNAVAILABLE;
@property (nonatomic) NSTimeInterval touchIDAuthenticationAllowableReuseDuration NS_AVAILABLE(10_12, 9_0) __WATCHOS_UNAVAILABLE __TVOS_UNAVAILABLE;
@property (nonatomic, copy) NSString *localizedReason API_AVAILABLE(macos(10.13), ios(11.0)) API_UNAVAILABLE(watchos, tvos);


localizedFallbackTitle可以設置驗證TouchID時彈出Alert的輸入密碼按鈕的標題
localizedCancelTitle可以設置驗證TouchID時彈出Alert的取消按鈕的標題(iOS10才有)
maxBiometryFailures 最大指紋嘗試錯誤次數。 這個屬性我們可以看到他后面寫了NS_DEPRECATED_IOS(8_3, 9_0),說明這個屬性在iOS 8.3被引入,在iOS 9.0被廢棄,所以如果系統版本高于9.0是無法使用的。
evalueatedPolicyDomainState這個跟可以檢測你的指紋數據庫的變化,增加或者刪除指紋這個屬性會做出相應的反應
touchIDAuthenticationAllowableReuseDuration這個屬性應該是類似于支付寶的指紋開啟應用,如果你打開他解鎖之后,按Home鍵返回桌面,再次進入支付寶是不需要錄入指紋的。因為這個屬性可以設置一個時間間隔,在時間間隔內是不需要再次錄入。默認是0秒,最長可以設置5分鐘。

5.支持機型判斷

從設備和系統判斷是否是支持TouchID

1.是否是iOS8.0以上的系統
2.是否是5s以上的設備支持

2.代碼

  if([NSString judueIPhonePlatformSupportTouchID]){
        
        LAContext *la = [[LAContext alloc] init];
        la.localizedCancelTitle = @"cancel.."; // 自定義 左邊 title
        la.localizedFallbackTitle = @"fallTitle.."; // 自定義 右邊 title
        
        NSError *error;
        
        if([la canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]){
            
            [la evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"手機指紋驗證..." reply:^(BOOL success, NSError * _Nullable error) {
                
                if(success){
                 
                    NSLog(@"驗證 Success");
                    
                }else{
                    switch (error.code)
                    {
                            
                        case LAErrorUserCancel:
                            //認證被用戶取消.例如點擊了 cancel 按鈕.
                            NSLog(@"密碼取消");
                            break;
                            
                        case LAErrorAuthenticationFailed:
                            // 此處會自動消失,然后下一次彈出的時候,又需要驗證數字
                            // 認證沒有成功,因為用戶沒有成功的提供一個有效的認證資格
                            NSLog(@"連輸三次后,密碼失敗");
                            break;
                            
                        case LAErrorPasscodeNotSet:
                            // 認證不能開始,因為此臺設備沒有設置密碼.
                            NSLog(@"密碼沒有設置");
                            break;
                            
                        case LAErrorSystemCancel:
                            //認證被系統取消了(例如其他的應用程序到前臺了)
                            NSLog(@"系統取消了驗證");
                            break;
                            
                        case LAErrorUserFallback:
                            //當輸入覺的會有問題的時候輸入
                            NSLog(@"登陸");
                            break;
                        case LAErrorTouchIDNotAvailable:
                            //認證不能開始,因為 touch id 在此臺設備尚是無效的.
                            NSLog(@"touch ID 無效");
                            
                        default:
                            NSLog(@"您不能訪問私有內容");
                            break;
                    }
                }
            }];
            
        }else{
            
            switch (error.code) {
                case LAErrorTouchIDNotEnrolled:
                    NSLog(@"您還沒有進行指紋輸入,請指紋設定后打開");
                    break;
                case  LAErrorTouchIDNotAvailable:
                    NSLog(@"您的設備不支持指紋輸入,請切換為數字鍵盤");
                    break;
                case LAErrorPasscodeNotSet:
                    NSLog(@"您還沒有設置密碼輸入");
                    break;
                default:
                    break;
            }
        }
    }
   

完成這篇功能總結,指紋解鎖實現起來還是很簡單的,蘋果都已經封裝好了,簡單實現幾個方法就好。

Github

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,030評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,310評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,951評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,796評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,566評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,055評論 1 322
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,142評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,303評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,799評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,683評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,899評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,409評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,135評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,520評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,757評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,528評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,844評論 2 372

推薦閱讀更多精彩內容

  • 指紋解鎖的使用越來越普遍了,主要是使用方便,再用之前還是先了解一下如何使用吧。 一、API介紹 使用指紋功能,必須...
    my_楊哥閱讀 2,273評論 1 24
  • 昨天在公司需求中需要加入指紋解鎖功能 在指紋接受驗證后 回調會在子線程中 因此需要調用主線程執行ui更新 然鵝...
    需要幫助的乘客閱讀 681評論 0 0
  • 我們都知道iPhone支持指紋解鎖,之前沒有在項目中應用過,還以為有多么神秘,沒想到這么簡單!系統已經為我們提供了...
    親親qin閱讀 470評論 0 1
  • 前言:隨著指紋解鎖的普及,越來越多的應用開始使用指紋解鎖、指紋支付.不過作為iOS開發,這倒不難,因為蘋果為我們封...
    rockyMJ閱讀 393評論 0 1
  • 文/小關平 銀河系八大行星中,衛星最多的四顆行星都是外圍行星,分別是木星、土星、天王星和海王星——木星62個,土星...
    小關平閱讀 697評論 0 2