国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

iOS 8 SDK Touch ID指紋識別功能

2019-11-09 16:07:41
字體:
來源:轉載
供稿:網友

前言

      iOS 8 SDK向開發者公布了Touch ID指紋識別功能,允許App對用戶身份進行本地驗證。

Touch ID支持系統和機型

      iOS系統的Touch ID指紋識別功能最低支持的機型為iphone 5s,最低支持系統為iOS 8.

依賴框架

LocalAuthentication.framework

該框架下只有兩個頭文件: LAContext.h LAError.h

LAContext

簡介

通過該對象可完成指紋識別。

typedef NS_ENUM(NSInteger, LAPolicy){ // 指紋驗證 LAPolicyDeviceOwnerAuthenticationWithBiometrics NS_ENUM_AVAILABLE(NA, 8_0) __WATCHOS_AVAILABLE(3.0) __TVOS_AVAILABLE(10.0) = kLAPolicyDeviceOwnerAuthenticationWithBiometrics, // 使用Touch ID或者密碼驗證,默認是錯誤兩次指紋或者鎖定后,彈出輸入密碼界面 LAPolicyDeviceOwnerAuthentication NS_ENUM_AVAILABLE(10_11, 9_0) = kLAPolicyDeviceOwnerAuthentication};
常用屬性
// 回退按鈕標題// 默認標題為“輸入密碼”,當設置成空字符串的時候,該按鈕被隱藏@PRoperty (nonatomic, nullable, copy) NSString *localizedFallbackTitle;// 取消按鈕標題// 設置驗證TouchID時彈出Alert的取消按鈕的標題@property (nonatomic, nullable, copy) NSString *localizedCancelTitle;// 允許驗證失敗最大次數@property (nonatomic, nullable) NSNumber *maxBiometryFailures;@property (nonatomic, nullable, readonly) NSData *evaluatedPolicyDomainState;// 指定TouchID驗證的間隔,間隔期之內可以免驗證讀取Keychain數據@property (nonatomic) NSTimeInterval touchIDAuthenticationAllowableReuseDuration;
核心函數
// 判斷設備是否支持Touch ID- (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)error __attribute__((swift_error(none)));// 驗證身份的函數- (void)evaluatePolicy:(LAPolicy)policy localizedReason:(NSString *)localizedReason reply:(void(^)(BOOL success, NSError * __nullable error))reply;

LAError

簡介

主要用于Touch ID驗證身份失敗后的一些錯誤處理。

核心函數
typedef NS_ENUM(NSInteger, LAError){ // 授權失敗 LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed, // 用戶取消Touch ID授權 LAErrorUserCancel = kLAErrorUserCancel, // 用戶選擇輸入密碼 LAErrorUserFallback = kLAErrorUserFallback, // 系統取消授權(例如其他APP切入) LAErrorSystemCancel = kLAErrorSystemCancel, // 系統未設置密碼 LAErrorPasscodeNotSet = kLAErrorPasscodeNotSet, // 設備Touch ID不可用,例如未打開 LAErrorTouchIDNotAvailable = kLAErrorTouchIDNotAvailable, // 設備Touch ID不可用,用戶未錄入 LAErrorTouchIDNotEnrolled = kLAErrorTouchIDNotEnrolled, // 用戶多次連續使用Touch ID失敗,Touch ID被鎖,需要用戶輸入密碼解鎖,這個錯誤的交互LocalAuthentication.framework已封裝過,不需要開發者處理 LAErrorTouchIDLockout NS_ENUM_AVAILABLE(10_11, 9_0) __WATCHOS_AVAILABLE(3.0) __TVOS_AVAILABLE(10.0) = kLAErrorTouchIDLockout, // 與LAErrorSystemCancel相似,都是當前軟件被掛起取消了授權,LAErrorAppCancel該錯誤是用戶自己切到了別的應用,例如按Home鍵掛起。 LAErrorAppCancel NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorAppCancel, // 授權過程中,LAContext對象被釋放掉了,造成的授權失敗 LAErrorInvalidContext NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorInvalidContext}

代碼

核心代碼

//新建LAContext實例 LAContext *authenticationContext= [[LAContext alloc]init]; authenticationContext.localizedFallbackTitle = @"點,驗證其他"; NSError *error; //1:檢查Touch ID 是否可用 if ([authenticationContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) { NSLog(@"touchId 可用"); //2:執行認證策略 [authenticationContext evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"需要驗證您的指紋來確認您的身份信息" reply:^(BOOL success, NSError * _Nullable error) { if (success) { NSLog(@"通過了Touch Id指紋驗證"); }else{ NSLog(@"error===%@",error); switch (error.code) { case LAErrorAuthenticationFailed:{//授權失敗 NSLog(@"Authentication Failed"); break; } case LAErrorUserCancel:{// 用戶取消Touch ID授權 NSLog(@"Authentication was cancelled by the user"); break; } case LAErrorUserFallback:{//用戶選擇輸入密碼 NSLog(@"User selected to enter custom passWord"); [[NSOperationQueue mainQueue] addOperationWithBlock:^{ // TODO SOMETHING }]; break; } case LAErrorSystemCancel:{//系統取消授權(例如其他APP切入) NSLog(@"Authentication was cancelled by the system"); //切換到其他APP,系統取消驗證Touch ID break; } case LAErrorAppCancel:{//與LAErrorSystemCancel相似,都是當前軟件被掛起取消了授權,LAErrorAppCancel該錯誤是用戶自己切到了別的應用,例如按Home鍵掛起。 NSLog(@"app cancle the authentication"); break; } case LAErrorInvalidContext:{//授權過程中,LAContext對象被釋放掉了,造成的授權失敗 NSLog(@"context is invalidated"); break; } default:{ [[NSOperationQueue mainQueue] addOperationWithBlock:^{ //其他情況,切換主線程處理 }]; break; } } } }]; }else{ //todo goto 輸入密碼頁面 NSLog(@"error====%@",error); NSLog(@"抱歉,touchId 不可用"); }

Demo地址

待填坑


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 忻城县| 高台县| 襄樊市| 望谟县| 洛隆县| 陆良县| 杭锦后旗| 洛宁县| 通化市| 太康县| 临城县| 都昌县| 安丘市| 余江县| 繁昌县| 化德县| 平塘县| 远安县| 海兴县| 平阳县| 施甸县| 乡宁县| 凤翔县| 安顺市| 永年县| 吉水县| 普格县| 科尔| 洪洞县| 渝北区| 田东县| 江川县| 宁阳县| 杭州市| 康保县| 息烽县| 镇巴县| 关岭| 阜新市| 监利县| 闽清县|