亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS中指紋識別常見問題匯總

2020-07-26 03:02:51
字體:
來源:轉載
供稿:網友

最近公司的 app 要使用指紋支付了;總體來說還是蠻順利的;但是中間有遇到一些坑;下面就對坑進行匯總;

一.基本知識

點開這個LocalAuthentication.framework,發現里面主要有這么幾個東西

LocalAuthentication.framework
- LAContext.h
- LAError.h
- LAPublicDefines.h
- LocalAuthentication.h
LocalAuthentication.h

這個沒什么可講的吧,代碼就兩行,一行導入LAContext.h,一行導入LAError.h,這個LocalAuthentication類是暴露出來方便開發者調用的類。

LAPublicDefines.h

先從簡單的開始講吧,首先是LAPublicDefines.h,從名字上來看是公共宏定義類,里面包含了許多定義好的宏,這些宏會在LAContext.h得到使用。

//// LAPublicDefines.h// LocalAuthentication//// Copyright (c) 2014 Apple. All rights reserved.//#ifndef LocalAuthentication_LAPublicDefines_h#define LocalAuthentication_LAPublicDefines_h// Policies#define kLAPolicyDeviceOwnerAuthenticationWithBiometrics 1#define kLAPolicyDeviceOwnerAuthentication 2// Options#define kLAOptionUserFallback 1#define kLAOptionAuthenticationReason 2// Credential types#define kLACredentialTypePasscode -1#define kLACredentialTypePassphrase -2#define kLACredentialCTKPIN -3// Error codes#define kLAErrorAuthenticationFailed -1#define kLAErrorUserCancel -2#define kLAErrorUserFallback -3#define kLAErrorSystemCancel -4#define kLAErrorPasscodeNotSet -5#define kLAErrorTouchIDNotAvailable -6#define kLAErrorTouchIDNotEnrolled -7#define kLAErrorTouchIDLockout -8#define kLAErrorAppCancel -9#define kLAErrorInvalidContext -10// Error domain#define kLAErrorDomain "com.apple.LocalAuthentication"#endif

LAError.h

這個類其實也不用贅述,就是一個枚舉,里面寫的是錯誤的類型,其實就是把上面的kLAError宏寫進這個枚舉了,具體代碼注釋寫的很清晰,大概翻譯了一下

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

LAContext.h

重頭戲來了,想在自己的項目中使用TouchID,就要用到LAContext這個類里面的方法首先映入眼簾的是一個NS_ENUM枚舉LAPolicy。

typedef NS_ENUM(NSInteger, LAPolicy){LAPolicyDeviceOwnerAuthenticationWithBiometrics NS_ENUM_AVAILABLE(NA, 8_0) __WATCHOS_AVAILABLE(3.0) __TVOS_AVAILABLE(10.0) = kLAPolicyDeviceOwnerAuthenticationWithBiometrics,LAPolicyDeviceOwnerAuthentication NS_ENUM_AVAILABLE(10_11, 9_0) = kLAPolicyDeviceOwnerAuthentication} NS_ENUM_AVAILABLE(10_10, 8_0) __WATCHOS_AVAILABLE(3.0) __TVOS_AVAILABLE(10.0);

第一個枚舉LAPolicyDeviceOwnerAuthenticationWithBiometrics就是說,用的是手指指紋去驗證的;NS_ENUM_AVAILABLE(NA, 8_0)iOS8 可用

第二個枚舉LAPolicyDeviceOwnerAuthentication少了WithBiometrics則是使用TouchID或者密碼驗證,默認是錯誤兩次指紋或者鎖定后,彈出輸入密碼界面;NS_ENUM_AVAILABLE(10_11, 9_0)iOS 9可用

首先暴露出來的幾個方法,注意這里都是實例方法,所以需要創建一個實例對象去才能調用,使用LAContext *context = [LAContext alloc] init];創建一個LAContext對象。

canEvaluatePolicy:error:方法用來檢查當前設備是否可用touchID,返回一個BOOL值

evaluatePolicy:localizedReason:reply:調用驗證方法,注意這里的三個參數:

第一個參數policy是要使用上面那個LAPolicy的枚舉
第二個參數localizedReason是NSString類型的驗證理由
第三個參數reply則是一個回調Block,block內有一個BOOL類型的success判斷是否成功驗證,還有一個用于判斷錯誤信息的NSError類型的error

invalidate方法用來廢止這個context

第一次touchID 樣式

錯誤后 touchID 樣式

- (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)error __attribute__((swift_error(none)));- (void)evaluatePolicy:(LAPolicy)policylocalizedReason:(NSString *)localizedReasonreply:(void(^)(BOOL success, NSError * __nullable error))reply;- (void)invalidate;

枚舉LACredentialType,LAAccessControlOperation,這個東西和下面的幾個方法我查了很久也沒弄明白用在哪,蘋果官方文檔也看的不太懂,枚舉中只有一個LACredentialTypeApplicationPassword。

不過通過這個NS_ENUM_AVAILABLE(10_11, 9_0)還有方法后面的NS_AVAILABLE(10_11, 9_0)知道這個枚舉和這兩個方法只能在OS X 10.11和iOS 9.0以上版本使用,所以可能是比較新的東西,后面蘋果還會對他擴充吧。

下面是方法的說明:

// 目前額外加密就一種就是應用密碼// 輸入進去將會是 UTF-8 的字符串typedef NS_ENUM(NSInteger, LACredentialType){LACredentialTypeApplicationPassword = 0,} NS_ENUM_AVAILABLE(10_11, 9_0);// 以下方法據我理解應該是:可以在驗證Touch ID之后額外加密?// 設置解鎖額外加密憑證- (BOOL)setCredential:(nullable NSData *)credentialtype:(LACredentialType)type NS_AVAILABLE(10_11, 9_0);// 判斷加密憑證是否設置成功- (BOOL)isCredentialSet:(LACredentialType)type NS_AVAILABLE(10_11, 9_0);// 通過Touch ID來驗證加密憑證是否通過- (void)evaluateAccessControl:(SecAccessControlRef)accessControloperation:(LAAccessControlOperation)operationlocalizedReason:(NSString *)localizedReasonreply:(void(^)(BOOL success, NSError * __nullable error))replyNS_AVAILABLE(10_11, 9_0);typedef NS_ENUM(NSInteger, LAAccessControlOperation){// 創建額外加密LAAccessControlOperationCreateItem,// 使用額外加密LAAccessControlOperationUseItem,// 創建額外加密keyLAAccessControlOperationCreateKey,// 使用額外加密key簽名LAAccessControlOperationUseKeySign} NS_ENUM_AVAILABLE(10_11, 9_0);

屬性的話,這里有5個

@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(NA, 9_0) __WATCHOS_UNAVAILABLE __TVOS_UNAVAILABLE;

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分鐘。

二.常見問題

1. 指紋識別的版本問題

iOS 9 之前是沒有LAErrorTouchIDLockout鎖定這個選項的,默認錯誤5次后;第6次驗證是自動彈出輸入密碼界面;

iOS 9 之后鎖定指紋識別之后,如果需要立即彈出輸入密碼界面需要使用LAPolicyDeviceOwnerAuthentication這個屬性重新發起驗證

如果輸入了鎖屏密碼,指紋解密鎖定會默認解除

iOS 8 錯誤5次鎖定后,第6次驗證需要密碼

支付寶微信對于鎖定的不同處理

2. 指紋識別的LAPolicy

第一個枚舉LAPolicyDeviceOwnerAuthenticationWithBiometrics就是說,用的是手指指紋去驗證的;NS_ENUM_AVAILABLE(NA, 8_0)iOS8 可用

第二個枚舉LAPolicyDeviceOwnerAuthentication少了WithBiometrics則是使用TouchID或者密碼驗證,默認是錯誤兩次指紋或者鎖定后,彈出輸入密碼界面;NS_ENUM_AVAILABLE(10_11, 9_0)

iOS 9可用

3. 指紋識別LAContext的方法

canEvaluatePolicy:error:方法用來檢查當前設備是否可用touchID,返回一個BOOL值;不會彈驗證指紋密碼框

evaluatePolicy:localizedReason:reply:調用驗證方法,會彈驗證指紋密碼框

4. feedback按鈕顯示

默認第一次識別只有取消按鈕

錯誤一次之后,會顯示 feedBack 按鈕

如果不想顯示 feedback 按鈕;可以設置 feedBackTitle = @""

設置 feedbackTitle 為@""

設置 feedbackTitle 為@"驗證登錄密碼"

5. CancelTitle按鈕顯示

該屬性, iOS 10 才可以進行設置,iOS 以前是不可以進行設置的

6. 指紋識別慢的問題

我的 iphone 7 Plus指紋識別啟動過程需要2s 左右的時間;如果發現啟動比較慢,這個是正?,F象

支付寶和微信為了消除用戶的緊張情緒,在開啟指紋識別的時候都有放 HUD

指紋識別完成后,需要返回主線程進行相應的 操作;否者你會發現有時候識別完4-5秒才有反應

微信支付 HUD顯示案例

demo的 HUD顯示案例

[SVProgressHUD show];LAContext *context = [[LAContext alloc]init];//使用 new 不會給一些屬性初始化賦值context.localizedFallbackTitle = @"";//這樣可以不讓 feedBack 按鈕顯示//LAPolicyDeviceOwnerAuthenticationWithBiometrics[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"請驗證已有指紋" reply:^(BOOL success, NSError * _Nullable error) {[SVProgressHUD dismiss];//SVProgressHUD dismiss 需要 0.15才會消失;所以dismiss 后進行下一步操作;但是0.3是適當延長時間;留點余量dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.3* NSEC_PER_SEC)), dispatch_get_main_queue(), ^{if (success){NSLog(@"指紋識別成功");// 指紋識別成功,回主線程更新UIdispatch_async(dispatch_get_main_queue(), ^{//成功操作});}if (error) {//指紋識別失敗,回主線程更新UINSLog(@"指紋識別成功");dispatch_async(dispatch_get_main_queue(), ^{//失敗操作});}});}];

7.彈窗顯示級別問題

指紋識別的彈窗的級別非常之高,高到離譜,經過驗證應用程序內部沒有比指紋識別的window的級別更高的UIWindowLevel,也就說了他是系統級的彈窗。需要注意的是,如果指紋彈窗顯示和消失應用程序會調用:

- (void)applicationWillResignActive:(UIApplication *)application;- (void)applicationDidBecomeActive:(UIApplication *)application;

所以應用程序內部無法獲取。不知道越獄之后的手機能否獲取到,如果能獲取到,那就不可描述了,所以推薦各位看官沒什么剛需不要越獄。

8.檢測指紋庫中指紋是否發生改變

蘋果官方文檔解釋如下

This property returns a value only when the canEvaluatePolicy(:error:) method succeeds for a biometric policy or the evaluatePolicy(:localizedReason:reply:) method is called and a successful Touch ID authentication is performed. Otherwise, nil is returned.
The returned data is an opaque structure. It can be used to compare with other values returned by this property to determine whether the database of authorized fingerprints has been updated. However, the nature of the change cannot be determined from this data.

總結來說:

當你增加或者刪除指紋時候,你在使用使用canEvaluatePolicy(_:error:)或者evaluatePolicy(_:localizedReason:reply:)方法驗證;成功后evaluatedPolicyDomainState屬性會返回一個 NSData 對象;否則返回 nil;
但是返回的evaluatedPolicyDomainState屬性并不能說明發生了什么樣子的改變;只是告訴你發生了改變

根據上面的信息,我們就可以每次使用指紋的時候檢測指紋數據庫是否發生改變并作出相應的操作;下面是stackOverFlow 做的一個相應示例

demo

TouchIDDemo

以上所述是小編給大家介紹的iOS中指紋識別常見問題匯總,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本一区二区三区在线播放| 欧美日韩在线视频一区二区| 久久资源免费视频| 国产精品av免费在线观看| 欧美激情精品久久久久久黑人| 欧美一级bbbbb性bbbb喷潮片| 丰满岳妇乱一区二区三区| 精品精品国产国产自在线| 午夜免费在线观看精品视频| 欧美另类99xxxxx| 这里只有精品视频| 久久久久久尹人网香蕉| 中文字幕日本精品| 成人欧美一区二区三区黑人| 欧美成人中文字幕在线| 国产精品久久久久久久久久小说| 亚洲国产精品va在线看黑人动漫| 自拍偷拍亚洲区| 91国产精品电影| 国产精品白嫩美女在线观看| 欧美日韩激情美女| 久久精品国产清自在天天线| 国产视频久久久久久久| 日韩视频免费看| 亲子乱一区二区三区电影| 国产成人啪精品视频免费网| 有码中文亚洲精品| 深夜福利一区二区| 精品久久久久久久久久| 97久久精品人搡人人玩| 欧美大片大片在线播放| 国产精品网红直播| 57pao成人永久免费视频| 在线成人激情视频| 中文字幕av一区二区三区谷原希美| 亚洲欧美在线x视频| 亚洲欧洲在线看| www.久久草.com| 国产综合在线视频| 欧美日韩国产在线看| 国产69精品99久久久久久宅男| 亚洲性线免费观看视频成熟| 欧美亚洲第一页| 国产精品第100页| 92国产精品久久久久首页| 国外色69视频在线观看| 亚洲国产精品美女| 亚洲aⅴ日韩av电影在线观看| 亚洲精品www| 亚洲人成网站免费播放| 九九热在线精品视频| 2019中文字幕免费视频| 一级做a爰片久久毛片美女图片| 欧美性极品xxxx做受| 欧美人在线观看| 日韩精品一二三四区| 国产精品99久久久久久久久| 日韩欧美亚洲范冰冰与中字| 国产视频在线一区二区| 日韩大片在线观看视频| 国产精品久久久久久久久久| 色综合久久悠悠| 亚洲色图17p| 狠狠久久五月精品中文字幕| 久久69精品久久久久久久电影好| 欧美亚洲一区在线| 欧美日韩性生活视频| 国内精品模特av私拍在线观看| 久久久久久久国产精品视频| 国产精品久久久久久亚洲调教| 国产精品色午夜在线观看| 亚洲一区二区三区四区在线播放| 国产精品免费在线免费| 欧美国产在线视频| 亚洲国产精品推荐| 亚洲free性xxxx护士白浆| 精品国产乱码久久久久酒店| 久久久女人电视剧免费播放下载| 亚洲二区中文字幕| 成年人精品视频| 日韩av在线免费看| 精品网站999www| 亚洲国产精品小视频| 中文字幕精品国产| 欧美黑人一区二区三区| 欧美中文在线免费| 国产视频精品一区二区三区| 久久久最新网址| 韩剧1988免费观看全集| 亚洲国产三级网| 日韩视频在线免费| 欧美激情一区二区三区久久久| 米奇精品一区二区三区在线观看| 日韩专区中文字幕| 久久理论片午夜琪琪电影网| 欧美激情在线有限公司| 中文字幕无线精品亚洲乱码一区| 欧美黑人性视频| 狠狠躁夜夜躁久久躁别揉| 中文字幕日韩精品在线观看| 亚洲欧美日韩高清| 中文字幕日韩欧美精品在线观看| 91夜夜揉人人捏人人添红杏| 国产91热爆ts人妖在线| 国产视频在线观看一区二区| 亚洲夜晚福利在线观看| 欧美日韩国产成人高清视频| 欧美激情精品久久久| 欧美精品video| 成人激情春色网| 欧美激情乱人伦一区| 中文字幕精品在线视频| 亚洲精品乱码久久久久久按摩观| 久久久在线观看| 精品久久久久久久久久ntr影视| 亚洲女在线观看| 日韩av成人在线| 亚洲国产精品电影在线观看| 亚洲日韩欧美视频一区| 亚洲免费伊人电影在线观看av| 亚洲国产高清福利视频| 精品国产鲁一鲁一区二区张丽| 成人久久18免费网站图片| 精品亚洲va在线va天堂资源站| 色悠悠久久久久| 午夜欧美不卡精品aaaaa| 77777亚洲午夜久久多人| 超碰精品一区二区三区乱码| 在线视频一区二区| 欧美性感美女h网站在线观看免费| 日韩av免费在线观看| 美女福利视频一区| 国产精品丝袜高跟| zzijzzij亚洲日本成熟少妇| 久久好看免费视频| 亚洲新声在线观看| 成人网在线免费观看| 精品无人国产偷自产在线| 久久久久久网址| 中文字幕不卡在线视频极品| 国产91精品在线播放| 日韩精品视频在线| 最近2019好看的中文字幕免费| 国产精品盗摄久久久| 日韩av一区二区在线观看| 欧美黑人xxx| 日产精品99久久久久久| 国产精品久久久久免费a∨大胸| 国产日韩欧美夫妻视频在线观看| 18一19gay欧美视频网站| 国产成人自拍视频在线观看| 亚洲欧美激情另类校园| 亚洲一区二区三区777| 在线日韩中文字幕| 最近2019免费中文字幕视频三| 日本aⅴ大伊香蕉精品视频| 欧美日韩999| 97超级碰碰人国产在线观看| 久久69精品久久久久久国产越南| 在线精品国产成人综合| www.欧美精品| 日韩欧中文字幕| 欧美午夜久久久| 久久国产精品视频|