中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS指紋驗證TouchID怎么用

發布時間:2021-08-04 10:06:11 來源:億速云 閱讀:169 作者:小新 欄目:移動開發

這篇文章給大家分享的是有關iOS指紋驗證TouchID怎么用的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

第一部分:調用原生服務實現指紋驗證

這部分了解個大概就可以了

第一步:添加LocalAuthentication.framework庫

iOS指紋驗證TouchID怎么用

iOS指紋驗證TouchID怎么用

iOS指紋驗證TouchID怎么用

第二步:在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>

第四步:實現指紋驗證 

這一步就是很重要的地方了,在- (void)viewDidLoad中寫入驗證實現的代碼,這里只有兩步,因為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;

一個是判斷設備是否支持touchid,一個是進行驗證返回不同的結果,之前在網上經常可以一些文章中寫了,指紋驗證的第一步都是先判斷設備的系統版本等等,現在似乎都不需要了,只要調用該方法就可以了。全部的代碼 如下:

- (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,系統取消驗證Touch ID");
  //切換到其他APP,系統取消驗證Touch ID
  break;
  }
  case LAErrorUserCancel:
  {
  NSLog(@"用戶取消驗證Touch ID");
  //用戶取消驗證Touch ID
  break;
  }
  case LAErrorUserFallback:
  {
  NSLog(@"用戶選擇輸入密碼");
  [[NSOperationQueue mainQueue] addOperationWithBlock:^{
  //用戶選擇其他驗證方式,切換主線程處理
  }];
  break;
  }
  default:
  {
  NSLog(@"LAErrorAuthenticationFailed,授權失敗");
  //授權失敗
  [[NSOperationQueue mainQueue] addOperationWithBlock:^{
  //其他情況,切換主線程處理
  }];
  break;
  }
 }
 }
 }]; 
 }else
 {
 //不支持指紋識別,LOG出錯誤詳情

 switch (error.code) {
 case LAErrorTouchIDNotEnrolled:
 {
 NSLog(@"設備Touch ID不可用,用戶未錄入");
 break;
 }
 case LAErrorPasscodeNotSet:
 {
 NSLog(@"系統未設置密碼");
 break;
 }
 case LAErrorTouchIDNotAvailable:
 {
 NSLog(@"設備Touch ID不可用,例如未打開");
 break;
 }
 default:
 {
 NSLog(@"系統未設置密碼");
 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了,可能有些小問題,到時候需要的話可以自調整。這里附上這個demo的guithub鏈接看這里看這里,鏈接在這呢。

第二部分:利用現有的第三方組件實現

這個部分可以好好學習一下。

在這里呢,我要推薦一個別人寫的一個第三方的組件,就是[WJTouchID](https://github.com/hu670014125/WJTouchID);這個控件的話,在這個鏈接上其實已經有寫出怎么用了,其實不需要我再都說什么,但是我還是要說下吧。 

調用時只需要一兩行代碼調用,但是回調函數還是需要寫不少東西的。

1:復制文件進去

iOS指紋驗證TouchID怎么用

2:引入頭文件

#import "WJTouchID.h"

3:遵守協議

@interface ViewController ()<WJTouchIDDelegate>

4: 創建對象

@property (nonatomic, strong) WJTouchID *touchID;

5:調用

- (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:實現回調函數

@required

 //TouchID驗證成功
- (void)WJTouchIDAuthorizeSuccess;

 //TouchID驗證失敗
- (void)WJTouchIDAuthorizeFailure;

@optional

 //當前設備不支持指紋識別
- (void)WJTouchIDIsNotSupport;

 //當前軟件被掛起取消了授權(如突然來了電話,應用進入前臺)
- (void)WJTouchIDAuthorizeErrorAppCancel;

 //取消TouchID驗證 (用戶點擊了取消)
- (void)WJTouchIDAuthorizeErrorUserCancel;

 //在TouchID對話框中點擊輸入密碼按鈕
- (void)WJTouchIDAuthorizeErrorUserFallback;

 //在驗證的TouchID的過程中被系統取消 例如突然來電話、按了Home鍵、鎖屏...
- (void)WJTouchIDAuthorizeErrorSystemCancel;

 //無法啟用TouchID,設備沒有設置密碼
- (void)WJTouchIDAuthorizeErrorPasscodeNotSet;

 //多次連續使用Touch ID失敗,Touch ID被鎖,需要用戶輸入密碼解鎖
- (void)WJTouchIDAuthorizeErrorTouchIDLockout;

 //當前軟件被掛起取消了授權 (授權過程中,LAContext對象被釋)
- (void)WJTouchIDAuthorizeErrorInvalidContext;

 //設備沒有錄入TouchID,無法啟用TouchID
- (void)WJTouchIDAuthorizeErrorTouchIDNotEnrolled;

 //該設備的TouchID無效
- (void)WJTouchIDAuthorizeErrorTouchIDNotAvailable;

感謝各位的閱讀!關于“iOS指紋驗證TouchID怎么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

ios
AI

五指山市| 洛宁县| 肥城市| 邯郸市| 互助| 岳普湖县| 龙川县| 庄河市| 道真| 霍州市| 田阳县| 图木舒克市| 德阳市| 顺义区| 长乐市| 韶关市| 比如县| 堆龙德庆县| 襄垣县| 舞钢市| 新安县| 石狮市| 牡丹江市| 淮阳县| 安化县| 邹城市| 凤阳县| 南和县| 八宿县| 绍兴市| 达日县| 荥阳市| 陈巴尔虎旗| 伊宁市| 荆州市| 包头市| 阳信县| 石林| 宜黄县| 开阳县| 安国市|