您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)iOS指紋驗證TouchID怎么用的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
第一部分:調(diào)用原生服務(wù)實現(xiàn)指紋驗證
這部分了解個大概就可以了
第一步:添加LocalAuthentication.framework庫
第二步:在appdelegate.m中添加代碼
這個不說其實大家也都知道的吧。
#import "AppDelegate.h" #import "ViewController.h" @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //appdelegate _window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds]; _window.backgroundColor = [UIColor whiteColor]; [_window makeKeyAndVisible]; ViewController *vc = [[ViewController alloc]init]; UINavigationController *na = [[UINavigationController alloc]initWithRootViewController:vc]; _window.rootViewController = na; return YES; }
第三步
引入頭文件
#import <LocalAuthentication/LocalAuthentication.h>
第四步:實現(xiàn)指紋驗證
這一步就是很重要的地方了,在- (void)viewDidLoad中寫入驗證實現(xiàn)的代碼,這里只有兩步,因為LAContext在官方文檔中只有兩個方法:
-canEvaluatePolicy:error: //-(BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)error __attribute__((swift_error(none))); -evaluatePolicy:localizedReason:reply: //- (void)evaluatePolicy:(LAPolicy)policy localizedReason:(NSString *)localizedReason reply:(void(^)(BOOL success, NSError * __nullable error))reply;
一個是判斷設(shè)備是否支持touchid,一個是進(jìn)行驗證返回不同的結(jié)果,之前在網(wǎng)上經(jīng)??梢砸恍┪恼轮袑懥?,指紋驗證的第一步都是先判斷設(shè)備的系統(tǒng)版本等等,現(xiàn)在似乎都不需要了,只要調(diào)用該方法就可以了。全部的代碼 如下:
- (void)viewDidLoad { [super viewDidLoad]; self.title = @"TouchIDSimpleDemoOne"; LAContext *context = [[LAContext alloc]init]; NSError *error; NSString *result = @"需要你身份驗證呢"; if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) { [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:result reply:^(BOOL success, NSError *error) { if (success) { //驗證成功,主線程處理UI //這個地方呢就是寫一些驗證成功之后需要做些什么事情的代碼。 NSLog(@"驗證成功"); } else { //以下是一些驗證失敗的原因啥的 NSLog(@"%@",error.localizedDescription); switch (error.code) { case LAErrorSystemCancel: { NSLog(@"切換到其他APP,系統(tǒng)取消驗證Touch ID"); //切換到其他APP,系統(tǒng)取消驗證Touch ID break; } case LAErrorUserCancel: { NSLog(@"用戶取消驗證Touch ID"); //用戶取消驗證Touch ID break; } case LAErrorUserFallback: { NSLog(@"用戶選擇輸入密碼"); [[NSOperationQueue mainQueue] addOperationWithBlock:^{ //用戶選擇其他驗證方式,切換主線程處理 }]; break; } default: { NSLog(@"LAErrorAuthenticationFailed,授權(quán)失敗"); //授權(quán)失敗 [[NSOperationQueue mainQueue] addOperationWithBlock:^{ //其他情況,切換主線程處理 }]; break; } } } }]; }else { //不支持指紋識別,LOG出錯誤詳情 switch (error.code) { case LAErrorTouchIDNotEnrolled: { NSLog(@"設(shè)備Touch ID不可用,用戶未錄入"); break; } case LAErrorPasscodeNotSet: { NSLog(@"系統(tǒng)未設(shè)置密碼"); break; } case LAErrorTouchIDNotAvailable: { NSLog(@"設(shè)備Touch ID不可用,例如未打開"); break; } default: { NSLog(@"系統(tǒng)未設(shè)置密碼"); break; } } NSLog(@"%@",error.localizedDescription); } }
//指紋驗證返回值 typedef NS_ENUM(NSInteger, LAError) { /// Authentication was not successful, because user failed to provide valid credentials. LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed, /// Authentication was canceled by user (e.g. tapped Cancel button). LAErrorUserCancel = kLAErrorUserCancel, /// Authentication was canceled, because the user tapped the fallback button (Enter Password). LAErrorUserFallback = kLAErrorUserFallback, /// Authentication was canceled by system (e.g. another application went to foreground). LAErrorSystemCancel = kLAErrorSystemCancel, /// Authentication could not start, because passcode is not set on the device. LAErrorPasscodeNotSet = kLAErrorPasscodeNotSet, /// Authentication could not start, because Touch ID is not available on the device. LAErrorTouchIDNotAvailable = kLAErrorTouchIDNotAvailable, /// Authentication could not start, because Touch ID has no enrolled fingers. LAErrorTouchIDNotEnrolled = kLAErrorTouchIDNotEnrolled, /// Authentication was not successful, because there were too many failed Touch ID attempts and /// Touch ID is now locked. Passcode is required to unlock Touch ID, e.g. evaluating /// LAPolicyDeviceOwnerAuthenticationWithBiometrics will ask for passcode as a prerequisite. LAErrorTouchIDLockout NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorTouchIDLockout, /// Authentication was canceled by application (e.g. invalidate was called while /// authentication was in progress). LAErrorAppCancel NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorAppCancel, /// LAContext passed to this call has been previously invalidated. LAErrorInvalidContext NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorInvalidContext } NS_ENUM_AVAILABLE(10_10, 8_0);
以上呢,就是一個簡單的demo了,可能有些小問題,到時候需要的話可以自調(diào)整。這里附上這個demo的guithub鏈接看這里看這里,鏈接在這呢。
第二部分:利用現(xiàn)有的第三方組件實現(xiàn)
這個部分可以好好學(xué)習(xí)一下。
在這里呢,我要推薦一個別人寫的一個第三方的組件,就是[WJTouchID](https://github.com/hu670014125/WJTouchID);這個控件的話,在這個鏈接上其實已經(jīng)有寫出怎么用了,其實不需要我再都說什么,但是我還是要說下吧。
調(diào)用時只需要一兩行代碼調(diào)用,但是回調(diào)函數(shù)還是需要寫不少東西的。
1:復(fù)制文件進(jìn)去
2:引入頭文件
#import "WJTouchID.h"
3:遵守協(xié)議
@interface ViewController ()<WJTouchIDDelegate>
4: 創(chuàng)建對象
@property (nonatomic, strong) WJTouchID *touchID;
5:調(diào)用
- (void)viewDidLoad { [super viewDidLoad]; //初始化 WJTouchID *touchid = [[WJTouchID alloc]init]; [touchid startWJTouchIDWithMessage:WJNotice(@"自定義信息", @"The Custom Message") fallbackTitle:WJNotice(@"", @"Fallback Title") delegate:self]; self.touchID = touchid; }
6:實現(xiàn)回調(diào)函數(shù)
@required //TouchID驗證成功 - (void)WJTouchIDAuthorizeSuccess; //TouchID驗證失敗 - (void)WJTouchIDAuthorizeFailure; @optional //當(dāng)前設(shè)備不支持指紋識別 - (void)WJTouchIDIsNotSupport; //當(dāng)前軟件被掛起取消了授權(quán)(如突然來了電話,應(yīng)用進(jìn)入前臺) - (void)WJTouchIDAuthorizeErrorAppCancel; //取消TouchID驗證 (用戶點擊了取消) - (void)WJTouchIDAuthorizeErrorUserCancel; //在TouchID對話框中點擊輸入密碼按鈕 - (void)WJTouchIDAuthorizeErrorUserFallback; //在驗證的TouchID的過程中被系統(tǒng)取消 例如突然來電話、按了Home鍵、鎖屏... - (void)WJTouchIDAuthorizeErrorSystemCancel; //無法啟用TouchID,設(shè)備沒有設(shè)置密碼 - (void)WJTouchIDAuthorizeErrorPasscodeNotSet; //多次連續(xù)使用Touch ID失敗,Touch ID被鎖,需要用戶輸入密碼解鎖 - (void)WJTouchIDAuthorizeErrorTouchIDLockout; //當(dāng)前軟件被掛起取消了授權(quán) (授權(quán)過程中,LAContext對象被釋) - (void)WJTouchIDAuthorizeErrorInvalidContext; //設(shè)備沒有錄入TouchID,無法啟用TouchID - (void)WJTouchIDAuthorizeErrorTouchIDNotEnrolled; //該設(shè)備的TouchID無效 - (void)WJTouchIDAuthorizeErrorTouchIDNotAvailable;
感謝各位的閱讀!關(guān)于“iOS指紋驗證TouchID怎么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。