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

使用Local_auth时如何限制用户使用指定类型的生物识别认证?

解决local_auth调用时同时弹出指纹和Face ID选项的问题

local_auth默认调用authenticate方法时会加载系统支持的所有可用生物认证选项,要限定单一认证类型,需要通过平台专属参数指定要调用的生物类型,操作步骤如下:

1. 前置操作:获取设备可用的生物认证列表

调用getAvailableBiometrics方法先确认设备是否支持你要触发的对应认证类型,避免调用失败:

import 'package:local_auth/local_auth.dart';
import 'package:local_auth_android/local_auth_android.dart';
import 'package:local_auth_darwin/local_auth_darwin.dart';

final LocalAuth _localAuth = LocalAuth();

// 获取当前设备已录入且可用的生物认证类型
List<BiometricType> availableBiometrics = await _localAuth.getAvailableBiometrics();

返回的BiometricType枚举值对应:

  • BiometricType.fingerprint:指纹认证(iOS端对应Touch ID)
  • BiometricType.face:面部认证(iOS端对应Face ID)
  • BiometricType.weak/BiometricType.strong:安卓端的生物认证安全等级分类

2. 仅触发指纹认证的调用方式

第一次需要仅走指纹认证时,通过平台专属参数限定调用类型:

// 先判断设备是否支持指纹
if (availableBiometrics.contains(BiometricType.fingerprint)) {
  bool isFingerprintPassed = await _localAuth.authenticate(
    localizedReason: '请验证指纹以继续',
    options: AuthenticationOptions(
      biometricOnly: true,
      // 安卓端限定仅调用指纹
      androidAuthOptions: AndroidAuthOptions(
        allowedAuthenticators: AndroidAuthenticator.biometricStrong,
      ),
      // iOS端限定仅调用Touch ID(指纹)
      iOSAuthOptions: IOSAuthOptions(
        biometryType: BiometricType.fingerprint,
      ),
    ),
  );
  // 指纹验证通过后再走Face ID验证逻辑
  if (isFingerprintPassed) {
    // 调用Face ID验证逻辑
  }
} else {
  // 降级逻辑:提示用户未录入指纹,引导到系统设置录入
}

3. 仅触发Face ID/面部认证的调用方式

指纹验证通过后,再单独调用面部认证:

// 先判断设备是否支持面部认证
if (availableBiometrics.contains(BiometricType.face)) {
  bool isFacePassed = await _localAuth.authenticate(
    localizedReason: '请验证面部以继续',
    options: AuthenticationOptions(
      biometricOnly: true,
      // 安卓端限定仅调用面部认证
      androidAuthOptions: AndroidAuthOptions(
        allowedAuthenticators: AndroidAuthenticator.face,
      ),
      // iOS端限定仅调用Face ID
      iOSAuthOptions: IOSAuthOptions(
        biometryType: BiometricType.face,
      ),
    ),
  );
  if (isFacePassed) {
    // 两种认证都通过,执行后续业务逻辑
  }
} else {
  // 降级逻辑:提示用户未录入面部信息
}

注意事项

  • 以上适配基于local_auth 3.0及以上版本,低版本包需要升级后使用平台专属参数配置
  • 安卓11以下的系统部分厂商自定义ROM不支持单独限定生物认证类型,可能仍会弹出所有可选认证选项,需要做多机型适配测试
  • 调用前必须先判断设备是否支持对应类型的生物认证,避免直接调用返回认证失败的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:09:03