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

react-native-biometrics调用报错及跨端兼容问题与Expo替代方案咨询

解决react-native-biometrics的TypeError及Expo替代方案

问题描述

报错信息:

TypeError: null is not an object (evaluating 'bridge.isSensorAvailable')

使用react-native-biometrics(版本2.1.4、3.0.1)时,在iOS/Android模拟器及新版Android真机上均无法正常工作,已检查依赖项。代码参考官方示例:

import ReactNativeBiometrics from 'react-native-biometrics'

ReactNativeBiometrics.isSensorAvailable()
  .then((resultObject) => {
    const { available, biometryType } = resultObject

    if (available && biometryType === ReactNativeBiometrics.TouchID) {
      console.log('TouchID is supported')
    } else if (available && biometryType === ReactNativeBiometrics.FaceID) {
      console.log('FaceID is supported')
    } else if (available && biometryType === ReactNativeBiometrics.Biometrics) {
      console.log('Biometrics is supported')
    } else {
      console.log('Biometrics not supported')
    }
  })

其他同类生物识别包可正常运行,排除导出错误或设备生物识别功能问题。

针对react-native-biometrics的解决办法

  • 检查自动链接完整性:
    RN 0.60+虽支持自动链接,但偶尔会出现链接不完整的情况:
    • iOS:进入ios目录执行pod install,然后清理Xcode缓存(Cmd+Shift+K)后重新编译。
    • Android:检查android/app/src/main/java/[你的包名]/MainApplication.java是否添加了ReactNativeBiometricsPackage,没加就手动添上;同时确认android/settings.gradle里有该模块的引用。
  • 切换包版本:
    试试降级到2.1.3或升级到3.1.0版本,重新安装依赖后测试,避开已知问题版本。
  • 模拟器配置检查:
    • iOS模拟器:必须在模拟器设置里启用Touch ID/Face ID(通过Xcode的Hardware -> Face ID/Touch ID选项设置)。
    • Android模拟器:要在AVD管理器里创建支持生物识别的模拟器(选带Play Store的镜像,系统版本至少Android 10),并在模拟器设置中添加指纹。
  • 权限配置验证:
    • iOS:在Info.plist中添加NSFaceIDUsageDescription字段,说明Face ID的使用目的;Touch ID无需额外权限,但要确保设备支持。
    • Android:在AndroidManifest.xml中添加<uses-permission android:name="android.permission.USE_BIOMETRIC" />(Android 10+)或<uses-permission android:name="android.permission.USE_FINGERPRINT" />(旧版本),同时确认目标SDK版本配置正确。
  • 调整初始化时机:
    确保RN应用完全初始化后再调用isSensorAvailable,比如把代码放在函数组件的useEffect钩子或类组件的componentDidMount里,别在应用启动初期调用,避免bridge还没初始化完成。

可生成密钥的Expo替代方案(除Local Auth外)

  • expo-crypto + expo-secure-store:通过生物识别验证用户身份后,用expo-crypto生成加密密钥,再用expo-secure-store安全存储到本地,实现密钥的生成与管理。
  • react-native-keychain(Expo预构建/Dev Client):这个包支持生成和存储与生物识别绑定的密钥,只有通过生物识别验证才能访问密钥,需要在Expo项目中使用预构建或expo-dev-client模式来集成。
  • 自定义后端密钥管理:通过生物识别验证用户身份后,调用后端接口获取密钥,再将密钥存储到expo-secure-store中,由后端负责密钥的生成和分发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:45:32