iOS 指紋解鎖

Touch ID

最近公司的 APP 涉及到指紋識(shí)別這塊,之前沒有研究過,現(xiàn)在簡單總結(jié)下...

1.基本知識(shí)點(diǎn)

1.需要導(dǎo)入 #import <LocalAuthentication/LocalAuthentication.h>

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

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

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

typedef NS_ENUM(NSInteger, LAError)
{
    LAErrorAuthenticationFailed,    // 驗(yàn)證信息出錯(cuò),就是說你指紋不對(duì)
    LAErrorUserCancel               // 用戶取消了驗(yàn)證
    LAErrorUserFallback             // 用戶點(diǎn)擊了手動(dòng)輸入密碼的按鈕,所以被取消了
    LAErrorSystemCancel             // 被系統(tǒng)取消,就是說你現(xiàn)在進(jìn)入別的應(yīng)用了,不在剛剛那個(gè)頁面,所以沒法驗(yàn)證
    LAErrorPasscodeNotSet           // 用戶沒有設(shè)置TouchID
    LAErrorTouchIDNotAvailable      // 用戶設(shè)備不支持TouchID
    LAErrorTouchIDNotEnrolled       // 用戶沒有設(shè)置手指指紋
    LAErrorTouchIDLockout           // 用戶錯(cuò)誤次數(shù)太多,現(xiàn)在被鎖住了
    LAErrorAppCancel                // 在驗(yàn)證中被其他app中斷
    LAErrorInvalidContext           // 請求驗(yàn)證出錯(cuò)
} 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可以設(shè)置驗(yàn)證TouchID時(shí)彈出Alert的輸入密碼按鈕的標(biāo)題
localizedCancelTitle可以設(shè)置驗(yàn)證TouchID時(shí)彈出Alert的取消按鈕的標(biāo)題(iOS10才有)
maxBiometryFailures 最大指紋嘗試錯(cuò)誤次數(shù)。 這個(gè)屬性我們可以看到他后面寫了NS_DEPRECATED_IOS(8_3, 9_0),說明這個(gè)屬性在iOS 8.3被引入,在iOS 9.0被廢棄,所以如果系統(tǒng)版本高于9.0是無法使用的。
evalueatedPolicyDomainState這個(gè)跟可以檢測你的指紋數(shù)據(jù)庫的變化,增加或者刪除指紋這個(gè)屬性會(huì)做出相應(yīng)的反應(yīng)
touchIDAuthenticationAllowableReuseDuration這個(gè)屬性應(yīng)該是類似于支付寶的指紋開啟應(yīng)用,如果你打開他解鎖之后,按Home鍵返回桌面,再次進(jìn)入支付寶是不需要錄入指紋的。因?yàn)檫@個(gè)屬性可以設(shè)置一個(gè)時(shí)間間隔,在時(shí)間間隔內(nèi)是不需要再次錄入。默認(rèn)是0秒,最長可以設(shè)置5分鐘。

5.支持機(jī)型判斷

從設(shè)備和系統(tǒng)判斷是否是支持TouchID

1.是否是iOS8.0以上的系統(tǒng)
2.是否是5s以上的設(shè)備支持

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:@"手機(jī)指紋驗(yàn)證..." reply:^(BOOL success, NSError * _Nullable error) {
                
                if(success){
                 
                    NSLog(@"驗(yàn)證 Success");
                    
                }else{
                    switch (error.code)
                    {
                            
                        case LAErrorUserCancel:
                            //認(rèn)證被用戶取消.例如點(diǎn)擊了 cancel 按鈕.
                            NSLog(@"密碼取消");
                            break;
                            
                        case LAErrorAuthenticationFailed:
                            // 此處會(huì)自動(dòng)消失,然后下一次彈出的時(shí)候,又需要驗(yàn)證數(shù)字
                            // 認(rèn)證沒有成功,因?yàn)橛脩魶]有成功的提供一個(gè)有效的認(rèn)證資格
                            NSLog(@"連輸三次后,密碼失敗");
                            break;
                            
                        case LAErrorPasscodeNotSet:
                            // 認(rèn)證不能開始,因?yàn)榇伺_(tái)設(shè)備沒有設(shè)置密碼.
                            NSLog(@"密碼沒有設(shè)置");
                            break;
                            
                        case LAErrorSystemCancel:
                            //認(rèn)證被系統(tǒng)取消了(例如其他的應(yīng)用程序到前臺(tái)了)
                            NSLog(@"系統(tǒng)取消了驗(yàn)證");
                            break;
                            
                        case LAErrorUserFallback:
                            //當(dāng)輸入覺的會(huì)有問題的時(shí)候輸入
                            NSLog(@"登陸");
                            break;
                        case LAErrorTouchIDNotAvailable:
                            //認(rèn)證不能開始,因?yàn)?touch id 在此臺(tái)設(shè)備尚是無效的.
                            NSLog(@"touch ID 無效");
                            
                        default:
                            NSLog(@"您不能訪問私有內(nèi)容");
                            break;
                    }
                }
            }];
            
        }else{
            
            switch (error.code) {
                case LAErrorTouchIDNotEnrolled:
                    NSLog(@"您還沒有進(jìn)行指紋輸入,請指紋設(shè)定后打開");
                    break;
                case  LAErrorTouchIDNotAvailable:
                    NSLog(@"您的設(shè)備不支持指紋輸入,請切換為數(shù)字鍵盤");
                    break;
                case LAErrorPasscodeNotSet:
                    NSLog(@"您還沒有設(shè)置密碼輸入");
                    break;
                default:
                    break;
            }
        }
    }
   

完成這篇功能總結(jié),指紋解鎖實(shí)現(xiàn)起來還是很簡單的,蘋果都已經(jīng)封裝好了,簡單實(shí)現(xiàn)幾個(gè)方法就好。

Github

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

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

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

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