本片博客主要介紹如何在自己的APP中添加指紋解鎖/密碼解鎖技術。主要是對蘋果的LocalAuthentication的介紹。看過之後你將會知道如何使用蘋果的指紋解鎖和本地密碼驗證功能。 ...
轉載請註明原文鏈接:http://www.cnblogs.com/zhanggui/p/6839554.html
前言
本片博客主要介紹如何在自己的APP中添加指紋解鎖/密碼解鎖技術。主要是對蘋果的LocalAuthentication的介紹。看過之後你將會知道如何使用蘋果的指紋解鎖和本地密碼驗證功能。
正文
Apple有好多Frameworks,包括常用的UIKit、Foundation和Accounts等等。其中還有一個Framework:LocalAuthentication。該Framework名如其功能,提供額本地認證的功能:也就是我們平時說的密碼驗證和指紋解鎖功能。該Framework的內容如下:
它包含了三個類
LAContext.h
LAError.h
LAPublicDefines.h
LocalAuthentication.h(包含文件,即裡面包含了該Framework裡面的其他類頭文件)
LAPublicDefines.h該類是本地驗證的定義類,裡面定義了五類String:Pocicies/Options/Credential types/Error codes/Error domain。
Policies:
LAPolicyDeviceOwnerAuthenticationWithBiometrics:使用Touch id來驗證設備所有者
LAPolicyDeviceOwnerAuthentication:使用Touch id或者設備密碼來驗證用戶
Options:
kLAOptionUserFallback
kLAOptionAuthenticationReason
Credential types:
kLACredentialTypePasscode
kLACredentialTypePassphrase
kLACredentialCTKPIN
Error codes:
kLAErrorAuthenticationFailed:認證失敗
kLAErrorUserCancel:用戶取消
kLAErrorUserFallback
kLAErrorSystemCancel:系統取消
kLAErrorPasscodeNotSet:沒有設置密碼
kLAErrorTouchIDNotAvailable: Touch id不可用
kLAErrorTouchIDNotEnrolled
kLAErrorTouchIDLockout
kLAErrorAppCancel: app 取消
kLAErrorInvalidContext
Error domain:
kLAErrorDomain:
LAContext.h該類中有個LAPolicy的枚舉:LAPolicyDeviceOwnerAuthenticationWithBiometrics(使用 touch id 認證)和LAPolicyDeviceOwnerAuthentication(使用密碼或者設備密碼進行驗證設備所有者)。
需要註意,對於LAPolicyDeviceOwnerAuthenticationWithBiometrics,Touch ID認證的時候我們的設備必須有Touch ID設置,如果沒有或者該設備本身不支持Touch ID,前者認證就會失敗,如果Touch ID被鎖定,則需要輸入密碼來解鎖Touch ID。另外,Touch ID如果輸入錯誤5次將會被鎖定,此時用戶必須使用輸入密碼的方式來結果它。如果密碼輸入也錯誤的話,你在設置--->Touch ID裡面就會看到:
並且只有經過一段時間之後才能使用。
對於後者的LAPolicyDeviceOwnerAuthentication,它的意思是Touch ID或者密碼來解鎖。意思就是如果Touch ID可用,並且沒有鎖定,用戶第一次會要求使用指紋解鎖,否則就會使用密碼解鎖。這裡和另一個枚舉不一樣的是:
對於LAPolicyDeviceOwnerAuthenticationWithBiometrics:
對於LAPolicyDeviceOwnerAuthentication:
除了前面的兩個提示外,還有
直接上代碼,看看如何實現指紋解鎖或者指紋+密碼解鎖:
- (IBAction)authAction:(id)sender {
LAContext *myContext = [[LAContext alloc] init];
NSError *myError = nil;
if ([myContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthentication error:&myError]) {
[myContext evaluatePolicy:LAPolicyDeviceOwnerAuthentication localizedReason:@"通過Home鍵驗證已有手機指紋" reply:^(BOOL success, NSError * _Nullable error) {
if (success) {
NSLog(@"認證成功");
}else {
NSLog(@"認證失敗,%@",[error description]);
}
}];
}else {
NSLog(@"error %@",[myError description]);
}
}
首先是實例化一個LAContext的上下文,然後首先有個方法:
- (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)error __attribute__((swift_error(none)));
驗證一下我們制定的LAPolicy是否可以使用,error用來記錄不可使用的原因。
接下來就是:
- (void)evaluatePolicy:(LAPolicy)policy
localizedReason:(NSString *)localizedReason
reply:(void(^)(BOOL success, NSError * __nullable error))reply;
其中的policy就是我們剛纔驗證的policy,然後localizedReason是我們使用驗證的原因,也就是上面途中顯示的“通過Home鍵驗證已有手機指紋”。最後通過block回調判斷結果,succes查看是否成功,error查看如果失敗的話,失敗的原因。
到這裡,你已經知道瞭如何使用指紋解鎖,為你的app添加指紋解鎖功能。
後續LAContext裡面其他的method或者property有瞭解了再補充。