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

React Native Android端Face ID认证实现问题咨询

React Native Android 面部解锁认证实现方案

一、问题根源

react-native-keychain 旧版本在Android端默认仅检测指纹传感器,未适配Google官方的BiometricPrompt框架——该框架支持自动识别设备上已启用的所有合规生物识别方式(包括面部、指纹),因此即使设备录入了面部解锁,也只会被判定为支持指纹。

二、解决方案

1. 升级react-native-keychain至最新版本

新版本已完全适配BiometricPrompt,可自动检测设备支持的生物识别类型:

# npm 安装
npm install react-native-keychain@latest
# yarn 安装
yarn add react-native-keychain@latest

2. 配置Android权限

在AndroidManifest.xml中添加生物识别相关权限:

<!-- 适配Android 9及以上的生物识别权限 -->
<uses-permission android:name="android.permission.USE_BIOMETRIC" />
<!-- 兼容旧版本指纹权限(可选) -->
<uses-permission android:name="android.permission.USE_FINGERPRINT" />

3. 修改认证调用逻辑

使用BIOMETRIC_STRONG类型触发系统级强生物识别,框架会自动调用设备上已启用的面部/指纹认证:

import * as Keychain from 'react-native-keychain';

// 检查当前支持的生物识别类型
const checkBiometricSupport = async () => {
  const supportType = await Keychain.getSupportedBiometryType();
  // 返回值:'TouchID'(指纹)、'FaceID'(面部)或 undefined(无可用方式)
  console.log('支持的生物识别类型:', supportType);
};

// 发起生物识别认证
const authenticate = async () => {
  try {
    const credentials = await Keychain.getGenericPassword({
      authenticationType: Keychain.AUTHENTICATION_TYPE.BIOMETRIC_STRONG,
      promptMessage: '请完成生物识别认证',
    });
    // 认证成功逻辑
    console.log('认证成功:', credentials);
  } catch (error) {
    console.log('认证失败/取消:', error);
  }
};

4. 替代方案(若升级后仍有兼容问题)

若新版本react-native-keychain仍无法识别面部,可替换为react-native-biometrics库,它对Android生物识别的适配更细致:

npm install react-native-biometrics

基础调用示例:

import ReactNativeBiometrics from 'react-native-biometrics';

const rnBiometrics = new ReactNativeBiometrics();

// 检测可用生物识别类型
const checkBiometrics = async () => {
  const { available, biometryType } = await rnBiometrics.isSensorAvailable();
  if (available) {
    switch (biometryType) {
      case ReactNativeBiometrics.BiometryTypes.FaceID:
        console.log('支持面部解锁');
        break;
      case ReactNativeBiometrics.BiometryTypes.TouchID:
        console.log('支持指纹');
        break;
      case ReactNativeBiometrics.BiometryTypes.Biometrics:
        console.log('支持通用生物识别(Android系统兼容)');
        break;
    }
  } else {
    console.log('无可用生物识别方式');
  }
};

// 发起认证
const authenticateUser = async () => {
  const { success } = await rnBiometrics.simplePrompt({
    promptMessage: '请进行生物识别',
  });
  success ? console.log('认证成功') : console.log('认证失败');
};

三、Android面部解锁支持条件

  • 系统版本:Android 10(API 29)及以上,原生支持面部解锁框架;部分Android 9设备通过厂商定制支持,但兼容性较差。
  • 硬件要求:设备配备合规的前置面部识别传感器,且已在系统设置中录入面部信息。
  • 权限配置:需在系统设置中开启「面部解锁」功能,并授予应用生物识别权限。

四、附:react-native-keychain文档截图翻译内容

生物识别认证类型说明:

  • AUTHENTICATION_TYPE.DEVICE_PASSCODE:使用设备密码(PIN/图案/密码)完成认证
  • AUTHENTICATION_TYPE.BIOMETRIC_WEAK:弱生物识别(如部分厂商的低安全级面部解锁)
  • AUTHENTICATION_TYPE.BIOMETRIC_STRONG:强生物识别(符合Android安全标准的指纹、面部识别,适用于敏感操作)

注意:Android端BiometricPrompt会自动选择设备上可用的最强生物识别方式,无需手动指定指纹或面部。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:45:43