iOS-传感器之TouchID
2018-11-08 本文已影响0人
XTK_iOS
仿支付宝TouchID登录方法
支付宝登录流程.gif1.观看一波完,可以看到支付宝的登录流程:
(1) 当我们连续三次指纹识别错误后,进行提示 指纹不匹配
(2) 再次点击 指纹识别,再两次识别失败后,Touch ID功能被锁定,弹出密码来进行身份验证进行解锁TouchID功能
(3) 当我们 五次 指纹未识别后并且使用密码进行解锁TouchID后,再次弹出TouchID 来进行验证指纹
(4) 当我们进行验证密码登录后 就会切换到 自己支付宝账号的密码进行 登录
以上就是 支付宝整个TouchID的登录流程
2.上代码
- (IBAction)fingerprintButton:(UIButton *)sender {
//首先判断版本
if (NSFoundationVersionNumber < NSFoundationVersionNumber_iOS_8_0) {
NSLog(@"系统版本不支持TouchID");
return;
}else {
// 验证指纹是否匹配,需要弹出输入密码的弹框的话:
// iOS9之后用 LAPolicyDeviceOwnerAuthentication可输入手机密码的验证方式
// iOS9之前用LAPolicyDeviceOwnerAuthenticationWithBiometrics 只有指纹的验证方式
[self startTouchIDWithPolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics];
}
}
- (void)startTouchIDWithPolicy:(LAPolicy )policy {
LAContext *context = [[LAContext alloc]init];
//设置 输入密码 按钮的标题
//localizedFallbackTitle=@“”,不会出现“输入密码”按钮
context.localizedFallbackTitle = @"验证登录密码";
//设置 取消 按钮的标题 iOS10之后
if (@available(iOS 10.0, *)) {
context.localizedCancelTitle = @"取消";
}else {
// Fallback on earlier versions
}
NSError *error;
_localizedReason = @"通过Home键验证已有手机指纹";
if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthentication error:&error]) {//判断设备是否支持TouchID
[context evaluatePolicy:policy localizedReason:_localizedReason reply:^(BOOL success, NSError * _Nullable error) {
if (success) {
NSLog(@"指纹识别成功");
// 指纹识别成功,回主线程更新UI
dispatch_async(dispatch_get_main_queue(), ^{
if (policy == LAPolicyDeviceOwnerAuthentication) {
[self startTouchIDWithPolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics];
}else {
}
});
}else {
//指纹识别失败,回主线程更新UI
NSLog(@"指纹识别失败");
dispatch_async(dispatch_get_main_queue(), ^{
//失败操作
[self handelWithError:error];
});
}
}];
}else {
NSLog(@"当前设备不支持TouchID");
}
}
/**
处理错误数据
@param error 错误信息
*/
- (void)handelWithError:(NSError *)error {
if (error) {
/**
-1 LAErrorAuthenticationFailed, // 验证信息出错,就是说你指纹不对
-2 LAErrorUserCancel // 用户取消了验证
-3 LAErrorUserFallback // 用户点击了手动输入密码的按钮,所以被取消了
-4 LAErrorSystemCancel // 被系统取消,就是说你现在进入别的应用了,不在刚刚那个页面,所以没法验证
-5 LAErrorPasscodeNotSet // 用户没有设置TouchID
-6 LAErrorTouchIDNotAvailable // 用户设备不支持TouchID
-7 LAErrorTouchIDNotEnrolled // 用户没有设置手指指纹
-8 LAErrorTouchIDLockout // 用户错误次数太多,现在被锁住了
-9 LAErrorAppCancel // 在验证中被其他app中断
-10 LAErrorInvalidContext // 请求验证出错
*/
NSLog(@"指纹识别错误描述 %@",error.description);
NSString *message;
LAError errorCode = error.code;
switch (errorCode) {
case LAErrorAuthenticationFailed:
message = @"已经连续三次指纹识别错误了,请输入密码验证";
_localizedReason = @"指纹验证失败";
[self createAlterView:message];
break;
case LAErrorUserFallback:
NSLog(@"手动输入密码的按钮,切换其他方式登录");
message = @"手动输入密码的按钮,切换其他方式登录";
[self createAlterView:message];
break;
case LAErrorTouchIDLockout:
//touchID 被锁定--ios9才可以
[self handleLockOutAliPay];
break;
default:
break;
}
}
}
/**支付宝处理锁定
*/
- (void)handleLockOutAliPay {
//开启验证--调用非全指纹 指纹验证
[self startTouchIDWithPolicy:LAPolicyDeviceOwnerAuthentication];
}