系统指纹登录识别--Touch ID

news/2024/7/20 22:01:39 标签: ios

文章目录

  • 一、import引入的framework
  • 二、验证是否支持Touch ID
  • 三、指纹识别
  • 四、错误状态
  • 五、判断是否有面容识别

一、import引入的framework

import LocalAuthentication

二、验证是否支持Touch ID

let deviceType = LAPolicy.deviceOwnerAuthenticationWithBiometrics
        // 单纯指纹或FaceID,LAPolicyDeviceOwnerAuthentication会有密码验证
        let context = LAContext()
        
        var error: NSError?
        let isSupport = context.canEvaluatePolicy(deviceType, error: &error)

三、指纹识别

context.evaluatePolicy(deviceType, localizedReason: desc ?? message) { success, error in
            if success == true {
                DispatchQueue.main.async {
                    block(.success, nil)
                }
            } else {
                let state = authFail(error: error)
                DispatchQueue.main.async {
                    block(state, error)
                }
            }
        }

四、错误状态

private static func authFail(error: Error?) -> GXTouchIDState {
        guard let c = error as? NSError else {
            return .notSupport
        }
        let cc = LocalAuthentication.LAError.Code.init(rawValue: c.code)
        var state: GXTouchIDState = .fail
        switch cc {
        case LocalAuthentication.LAError.authenticationFailed:
            print("授权失败")
            state = .fail
        case LocalAuthentication.LAError.userCancel:
            print("用户取消验证Touch ID")
            state = .userCancel
        case LocalAuthentication.LAError.userFallback:
            print("用户选择输入密码,切换主线程处理")
            state = .inputPassword
            
        case LocalAuthentication.LAError.systemCancel:
            print("系统取消授权,如其他APP切入")
            state = .systemCancel
            
        case LocalAuthentication.LAError.passcodeNotSet:
            print("系统未设置密码")
            state = .passwordNotSet
        case LocalAuthentication.LAError.biometryNotAvailable:
            print("设备Touch ID不可用,例如未打开")
            state = .touchIDNotAvailable
        case LocalAuthentication.LAError.biometryNotEnrolled:
            print("设备Touch ID不可用,用户未录入")
            state = .touchIDNotSet
        
        default:
            print("其他情况,切换主线程处理")
        }
        return state
    }

五、判断是否有面容识别

public static func haveFaceID() -> Bool {
        var haveFaceID = false
        let myContext = LAContext()
        if myContext.biometryType == .touchID {
            
        } else if myContext.biometryType == .faceID {
            haveFaceID = true
        }
        return haveFaceID
    }

http://www.niftyadmin.cn/n/4966949.html

相关文章

Mysql报错 mysqladmin flush-hosts

出现这个的原因是错误连接达到数据库设置的最大值。 此时需要释放重置连接最大值。 进入mysql使用命令 flush-hosts;环境说明: 内网测试服务器192.168.18.251 为WEB服务器,安装了mysql; 内网音视频转码服务器192.168.18.253安装了转码工具&#xff0…

导入功能importExcel (现成直接用)

1. 实体类字段上加 Excel(name "xxx"), 表示要导入的字段 Excel(name "用户名称")private String nickName; 2. controller (post请求) /*** 导入用户数据** param file 文件* param updateSupport 是否更新支持,如果已存在,则进…

解决redis-server.exe不是内部或外部命令

报错:redis-server.exe不是内部或外部命令 原因:未进入到redis的安装目录下 解决:先找到redis安装路径,复制之后,在终端中输入cd xxxxx(redis的安装路径),进入安装目录之后再次输入redis-server.exe就成功了…

VScode中写Verilog时,iverilog语法自动纠错功能不起作用

VScode中编写Verilog时,iverilog语法自动纠错功能不起作用 问题:按照教程搭建vscode下Verilog编译环境,发现语法纠错功能一直无效,检查了扩展Verilog-HDL/SystemVerilog/Bluespec SystemVerilog的配置也没有任何问题。 错误原因&a…

《Go 语言第一课》课程学习笔记(十一)

控制结构 if 的“快乐路径”原则 针对程序的分支结构,Go 提供了 if 和 switch-case 两种语句形式;而针对循环结构,Go 只保留了 for 这一种循环语句形式。 if 语句 if 语句是 Go 语言中提供的一种分支控制结构,它也是 Go 中最常…

ARM开发,stm32mp157a-A7核IIC实验(采集温湿度传感器值)

1.实验目标:采集温湿度传感器值; 2.分析框图(模拟IIC控制器); 3.代码; ---iic.h封装时序协议头文件--- #ifndef __IIC_H__ #define __IIC_H__ #include "stm32mp1xx_gpio.h" #include "st…

有限与无限游戏 | 真北荐书

2023佛山敏捷之旅暨DevOps Meetup志愿者为进行大会的组织与准备,每周三晚有一个例会。 例会前等人的时间,涌现出一个小的分享环节。今天分享这本书:《有限与无限游戏》。 大家选择成为志愿者,是一个无限游戏。而组织活动和完成各种…

MyBatis-Plus updateById不更新null值

文章目录 前言方式一 调整全局的验证策略方式二 调整字段验证注解方式三 使用 UpdateWrapper 前言 在 MyBatis-Plus3.x 中,使用updateById,null字段并不会更新,其实是和更新的策略有关,当然,也有插入策略,…