如何在React Native Android端实现人脸与指纹双认证?
React Native Android端实现人脸与指纹双认证方案
问题根源
你使用的react-native-touch-id库在Android端底层依赖FingerprintManager API,该API仅支持指纹认证,无法调用系统的人脸认证能力。要同时支持人脸和指纹,需要切换到基于Android官方BiometricPrompt API的库——这是Google推出的统一生物认证接口,支持指纹、人脸等多种生物识别方式。
解决方案:使用react-native-biometrics库
1. 替换依赖库
先卸载旧库并安装新库:
npm uninstall react-native-touch-id npm install react-native-biometrics --save # 或使用yarn yarn remove react-native-touch-id yarn add react-native-biometrics
2. 配置Android权限
在android/app/src/main/AndroidManifest.xml中添加生物认证权限:
<!-- Android 10+ 所需权限 --> <uses-permission android:name="android.permission.BIOMETRIC_AUTHENTICATE" /> <!-- 兼容Android 9及以下版本 --> <uses-permission android:name="android.permission.USE_BIOMETRIC" />
3. 检测设备支持的生物认证类型
先判断设备是否支持人脸、指纹或两者都支持:
import ReactNativeBiometrics from 'react-native-biometrics'; const checkBiometricSupport = async () => { const { available, biometryType } = await ReactNativeBiometrics.isSensorAvailable(); if (!available) { console.log("设备无可用生物认证方式"); return; } switch(biometryType) { case ReactNativeBiometrics.BiometryTypes.TouchID: console.log("仅支持指纹认证"); break; case ReactNativeBiometrics.BiometryTypes.FaceID: console.log("仅支持人脸认证"); break; case ReactNativeBiometrics.BiometryTypes.Biometrics: console.log("同时支持指纹与人脸认证"); break; } };
4. 发起生物认证调用
调用统一认证接口,Android系统会自动根据设备已注册的生物信息弹出对应认证界面(若同时支持人脸和指纹,系统会让用户选择或使用默认优先级):
const performBiometricAuth = async () => { try { const { success, error } = await ReactNativeBiometrics.simplePrompt({ promptMessage: "请完成生物认证", cancelButtonText: "取消" }); if (success) { console.log("认证成功"); // 处理认证成功后的业务逻辑 } else { console.log(`认证失败:${error}`); // 处理认证失败逻辑(如密码 fallback) } } catch (err) { console.log("认证出错:", err); } };
关键说明
- Android系统要求:人脸认证通常需要Android 10(API Level 29)及以上版本,部分厂商定制系统可能在更低版本支持,但
BiometricPrompt从Android 9(API Level 28)开始提供统一接口。 - 系统自动处理:当设备同时注册了人脸和指纹时,
BiometricPrompt会自动展示包含两种选项的认证界面,无需开发者手动区分处理。 - 兼容性:该库同时支持iOS端的FaceID和TouchID,可替代原
react-native-touch-id实现跨平台统一生物认证。
内容的提问来源于stack exchange,提问作者Himanshu Prajapati
相关产品推荐
相关产品推荐

