IOS 指纹识别

指纹识别必须ios8 以上真机,面部识别据说同一套API 没有支持面部识别的机器,没有测试,直接贴代码了,注释比较清晰,关键点在于业务逻辑,由于指纹识别只是类似授权自动登录,所以那些账户密码。必须存储,在授权成功自动登录,存储密码可参考keychain

ZbTouchManager.h

//
//  ZbTouchManager.h
//  TestFFmpegDemo
//
//  Created by syStudio sy on 2019/4/22.
//  Copyright © 2019 syStudio sy. All rights reserved.
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN
typedef  enum _LOCALTOUCHIDRESULT{
    LOCALTOUCHID_NOT_SUPPORT = 0 ,/*设备不支持*/
    LOCALTOUCHID_SUCCESS,/*成功*/
    LOCALTOUCHID_FAILD,/*失败*/
    LOCALTOUCHID_UserCancel,/*用户取消*/
    LOCALTOUCHID_UserFallback,/*用户选择输入密码*/
    LOCALTOUCHID_SystemCancel,/*系统来电等导致*/
    LOCALTOUCHID_PasscodeNotSet,/*用户没有设置密码*/
    LOCALTOUCHID_NOT_Enrolled,/*用户没有设置touchID*/
    LOCALTOUCHID_NOT_Available,/*用户touchiD无效*/
    LOCALTOUCHID_Other_Reason,/*其它原因*/
    
}LocalAuthent_result;


@interface ZbTouchManager : NSObject

+(id)sharedInstance;
-(int)checkTouchIDActionWithComplete:(void(^)(NSDictionary*resultDic,LocalAuthent_result result))callback;
@end

NS_ASSUME_NONNULL_END

ZbTouchManager.m

//
//  ZbTouchManager.m
//  TestFFmpegDemo
//
//  Created by syStudio sy on 2019/4/22.
//  Copyright © 2019 syStudio sy. All rights reserved.
//

#import "ZbTouchManager.h"
#import <LocalAuthentication/LocalAuthentication.h>
#define RetDicReasonKey @"ZbResultDscStr"
@implementation ZbTouchManager
static ZbTouchManager *instance = nil;
+(id)sharedInstance{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance = [[ZbTouchManager alloc]init];
    });
    return instance;
}
-(int)checkTouchIDActionWithComplete:(void(^)(NSDictionary*resultDic,LocalAuthent_result result))callback{
    NSMutableDictionary *retDic = [NSMutableDictionary dictionary];
    if(NSFoundationVersionNumber < NSFoundationVersionNumber_iOS_8_0){
        [retDic setValue:RetDicReasonKey forKey:@"版本低于8.0 不支持Touch ID"];
        callback(retDic,LOCALTOUCHID_NOT_SUPPORT);
        return LOCALTOUCHID_NOT_SUPPORT;
    }
    LAContext *context = [[LAContext alloc]init];
//    指纹认证错误后的第二个按钮文字(不写默认为“输入密码”)
    context.localizedFallbackTitle = @"密码";
    if (@available(iOS 10.0.0,*)) {
        context.localizedCancelTitle = @"取消";
    }
    NSError *error = nil;
    if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthentication error:&error]) {
        [context evaluatePolicy:LAPolicyDeviceOwnerAuthentication localizedReason:@"home 键指纹识别" reply:^(BOOL success, NSError * _Nullable error) {
            if (success) {
                dispatch_async(dispatch_get_main_queue(), ^{
                    [retDic setValue:@"指纹识别验证成功" forKey:RetDicReasonKey];
                    callback(retDic,LOCALTOUCHID_SUCCESS);
                });
            }else if(error){
                switch (error.code) {
                    case LAErrorAuthenticationFailed:
                         [retDic setValue:@"指纹识别验证失败" forKey:RetDicReasonKey];
                        callback(retDic,LOCALTOUCHID_FAILD);
                        break;
                    case LAErrorUserCancel:
                         [retDic setValue:@"用户取消" forKey:RetDicReasonKey];
                       
                        callback(retDic,LOCALTOUCHID_UserCancel);
                        break;
                        case LAErrorUserFallback:
                        [retDic setValue:@"用户不使用TouchID 选择搜懂输入密码" forKey:RetDicReasonKey];
                        callback(retDic,LOCALTOUCHID_UserFallback);
                        break;
                    case LAErrorSystemCancel:
                         [retDic setValue:@"系统取消 比如遇到来电,等" forKey:RetDicReasonKey];
                        callback(retDic,LOCALTOUCHID_SystemCancel);
                        break;
                    case LAErrorPasscodeNotSet:
                        [retDic setValue:@"用户没有设置密码" forKey:RetDicReasonKey];
                        callback(retDic,LOCALTOUCHID_PasscodeNotSet);
                        break;
                    case LAErrorTouchIDNotEnrolled:
                        [retDic setValue:@"用户没有设置touchID" forKey:RetDicReasonKey];
                        callback(retDic,LOCALTOUCHID_NOT_Enrolled);
                        NSLog(@"用户没有设置touchID");
                        break;
                    case LAErrorTouchIDNotAvailable:
                        [retDic setValue:@"用户touchiD 无效" forKey:RetDicReasonKey];
                        callback(retDic,LOCALTOUCHID_NOT_Available);
                        break;
                    default:
                        [retDic setValue:@"其它未知原因" forKey:RetDicReasonKey];
                        callback(retDic,LOCALTOUCHID_Other_Reason);
                        break;
                }
            }
        }];
    }else{
        [retDic setValue:@"设备不支持touchiID" forKey:RetDicReasonKey];
        callback(retDic,LOCALTOUCHID_NOT_SUPPORT);
    }
    return LOCALTOUCHID_NOT_SUPPORT;
}
@end

参考文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值