背景:有个朋友说有没有办法把iPhone上的相册、备忘录加密(现在的备忘录是苹果已经加入了加密功能),于是想了下要怎么实现保存的数据实现访问加密、解密功能。
要提高逼格肯定是使用指纹识别,于是在苹果提供的文档里面搜索了“Touch ID”(没看之前以为会很难的)。、
苹果没有过多的介绍这个功能,提供了一个关于钥匙串存储密码和Touch ID 验证的Demo,然后就是一段怎么使用Local Authentication框架的代码。
先看效果图:
Touch ID验证代码:
LAContext *myContext = [[LAContext alloc] init];
NSError *authError = nil;
//授权原因
NSString *myLocalizedReasonString = @"我需要授权";
//if条件判断设备是否支持Touch ID 是否开启Touch id等这个一定要写上(曾经3D Touch使用的时候没判断导致iOS9以后的系统启动app就崩溃)
if ([myContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&authError]) {
//弹出指纹识别界面
[myContext evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:myLocalizedReasonString reply:^(BOOL success, NSError *authenticationError) {
if (success) {
/*如果验证成功了,如果你只需要使用指纹验证功能的话(注意这个验证的密码是你设置里面设置的那个密码,也就是一般人都会用来解锁iphone的那个密码) 在这里面可实现你设计的功能了,如果你的应用需要独立密码的话,需要让Touch ID 和 那个独立密码绑定 ,支付宝是在验证成功之后 跳转到设置支付密码的页面 让这个Touch和支付密码绑定,实现指纹支付,每次指纹识别通过间接性的使用了支付密码(本质还是支付密码)*/
NSLog(@"验证成功成功");
}
else {
switch (authenticationError.code) {
case LAErrorAuthenticationFailed:
{
NSLog(@"用户提供的指纹不对");
break;
}
case LAErrorUserCancel:
{
NSLog(@"用户点击了取消按钮");
break;
}
case LAErrorUserFallback:
{
NSLog(@"用户选择输入密码");
break;
}
case LAErrorSystemCancel :
{
NSLog(@"切换到其他的app(按了Home按键),被系统取消");
break;
}//
case LAErrorTouchIDLockout :
{
NSLog(@"用户指纹错误多次,TOuch ID 被锁定");
break;
}//9.0 我试了验证过程中电话进来 返回的LAErrorSystemCancel 错误码 不是这个
case LAErrorAppCancel:
{
NSLog(@"被(突如其来的)应用(电话)取消");
break;
}//LAErrorInvalidContex
default:
{
break;
}
}
}
}];
}
else {
switch (authError.code) {
//9.0 试过了不设置密码返回的是 LAErrorTouchIDNotEnrolled 错误码
case LAErrorPasscodeNotSet:
{
NSLog(@"在设置里面没有设置密码");
break;
}
case LAErrorTouchIDNotAvailable:
{
NSLog(@"设备不支持Touch ID");
break;
}
case LAErrorTouchIDNotEnrolled:
{
NSLog(@"在设置里面没有设置Touch Id 指纹");
break;
}
case LAErrorInvalidContext:
{
NSLog(@"创建的指纹对象失效");
break;
}
default:
{
break;
}
}
}