You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS应用Touch ID启用开关实现方案咨询:需自定义plist属性吗?

最佳解决方案:自定义Touch ID开关状态管理

嘿,刚好做过类似的功能,给你理清楚这个问题:

首先明确一点:系统并没有提供现成的isEnableTouchId属性,这个开关状态需要我们自己来管理,而plist文件的作用和这个不是一回事,下面分两部分给你讲:

一、用户开关状态的存储(核心)

用户通过Switch控件选择是否开启Touch ID,这个属于用户偏好设置,最合适的存储方式是用UserDefaults,它能持久化保存用户的选择,下次打开应用还能读取到状态。

具体实现步骤:

  1. 给Switch控件绑定一个切换事件(IBAction),把状态存入UserDefaults:
@IBAction func touchIdSwitchChanged(_ sender: UISwitch) {
    // 用一个自定义的key来存储,比如"isTouchIDEnabled"
    UserDefaults.standard.set(sender.isOn, forKey: "isTouchIDEnabled")
    // 可选:立即同步(不过UserDefaults默认会自动同步,这里加不加都行)
    UserDefaults.standard.synchronize()
}
  1. 在需要触发Touch ID验证的地方,先读取这个状态,再决定是否执行验证:
// 读取用户设置的开关状态,默认值可以设为true(即默认开启)
let isTouchIDEnabled = UserDefaults.standard.bool(forKey: "isTouchIDEnabled")

if isTouchIDEnabled {
    // 执行Touch ID/Face ID验证逻辑
    let context = LAContext()
    var authError: NSError?
    
    // 先检查设备是否支持生物识别
    if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &authError) {
        let reason = "验证你的身份以继续操作"
        context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: reason) { [weak self] success, error in
            DispatchQueue.main.async {
                guard let self = self else { return }
                if success {
                    // 验证成功,处理后续逻辑
                    print("Touch ID验证通过")
                } else {
                    // 验证失败,提示用户
                    print("Touch ID验证失败:\(error?.localizedDescription ?? "未知错误")")
                }
            }
        }
    } else {
        // 设备不支持生物识别,或者用户未设置
        print("设备不支持Touch ID/Face ID")
    }
} else {
    // 用户关闭了Touch ID,直接跳过验证,执行后续逻辑
    print("用户已关闭Touch ID验证")
}

二、plist文件的作用(别搞混)

plist文件里不需要新建什么isEnableTouchId属性,它的作用是配置应用使用生物识别的权限描述——如果你的应用要调用Touch ID/Face ID,必须在Info.plist中添加对应的描述字段,否则会崩溃:

  • 支持Face ID(iOS 11+):添加NSFaceIDUsageDescription,值为你要向用户说明的使用原因(比如"用于快速登录你的账号")
  • 仅支持Touch ID(iOS 10及以下):添加NSBiometricUsageDescription,同样填写使用原因

总结最佳实践

  • 用UserDefaults存储用户的Touch ID开关状态,这是最符合iOS偏好设置设计的方式
  • plist只用来配置必要的生物识别权限描述,不要用它存动态的用户设置

内容的提问来源于stack exchange,提问作者Diogenes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:40:30