上述两个函数都是LAContext的member function.目前LAPolicy只有一个值: LAPolicyDeviceOwnerAuthenticationWithBiometrics.
如果canEvaluatePolicy返回YES,表示设备支持指纹识别,那么便可以调用evaluatePolicy:函数进行指纹识别了.调用evaluatePolicy函数后会弹出一个alert,如下图:
该alert可定制的只有两处:
1.”To access your photos”提示文字是由localizedReason参数指定的,用来向用户说明使用Touch ID的目的.
2.”Enter Password”可由LAContext的localizedFallbackTitle属性设置(LAContext目前只有这一个属性),如果不设置的话,默认是”Enter Password”.值得注意的是,如果该属性设置为@“”(空字符串),该按钮会被隐藏,Evernote应该就是这么做的.
其他的免谈,当然更别提获取用户的指纹数据了.
理论上三种情况下会退出验证(alert会被dismiss,reply回调会被调用):
1.用户指纹通过验证
2.用户点击”Enter Password”按钮
3.用户点击”Cancel”按钮
还有一种情况:用户输入了错误的指纹.这种情况下,该alert不会被dismiss,其标题会由”Touch ID”改为”Try Again”,有弹簧状的动画效果过渡.好了,代码如下(不要忘了引入头文件 <LocalAuthentication/LocalAuthentication.h>):
LAContext *context = [LAContext new];
NSError *error;
context.localizedFallbackTitle = @"";
if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error])
{
NSLog(@"Touch
ID is available.");
[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
localizedReason:NSLocalizedString(@"Use
Touch ID to log in.", nil)
reply:^(BOOL success, NSError *error)
{
if (success)
{
NSLog(@"Authenticated
using Touch ID.");
} else {
if (error.code == kLAErrorUserFallback)
{
NSLog(@"User
tapped Enter Password");
} else if (error.code == kLAErrorUserCancel)
{
NSLog(@"User
tapped Cancel");
} else {
NSLog(@"Authenticated
failed.");
}
}];
} else {
NSLog(@"Touch
ID is not available: %@", error);
}