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

react-native-biometrics调用isSensorAvailable报错:无法读取null的属性

解决react-native-biometrics库"cannot read property isSensorAvailable of null"错误

可能原因及对应解决方案

1. 库版本与React Native/Expo环境不兼容

你代码中引入了expo-status-bar,说明是Expo项目,但react-native-biometrics作为第三方原生库,在Expo环境下自动链接大概率失效:

  • 若为Expo项目,直接替换为expo-local-authentication,Expo对官方维护的生物认证库支持更完善,无需手动配置原生链接。
  • 若为纯RN项目,检查react-native-biometrics版本兼容性:v3+要求RN 0.60+,如果你的RN版本过低,降级库到对应兼容版本。

2. 初始化时机错误导致实例为null

组件渲染时库可能未完成加载,把初始化和检测逻辑放到useEffect中,确保在组件挂载后执行:

import { StatusBar } from 'expo-status-bar';
import React, { useEffect } from 'react';
import { StyleSheet, Text, View } from 'react-native';
import ReactNativeBiometrics, { BiometryTypes } from 'react-native-biometrics'

const LocalAuthg=(props)=>{
    useEffect(() => {
        const checkBiometricsSupport = async () => {
            try {
                const rnBiometrics = new ReactNativeBiometrics({ allowDeviceCredentials: true });
                const result = await rnBiometrics.isSensorAvailable();
                const { available, biometryType } = result;

                if (available && biometryType === BiometryTypes.TouchID) {
                    console.log('TouchID is supported')
                } else if (available && biometryType === BiometryTypes.FaceID) {
                    console.log('FaceID is supported')
                } else if (available && biometryType === BiometryTypes.Biometrics) {
                    console.log('Biometrics is supported')
                } else {
                    console.log('Biometrics not supported')
                }
            } catch (err) {
                console.error('Biometrics check failed:', err);
            }
        };

        checkBiometricsSupport();
    }, []);

    return(
        <View style={ styles.fingerPrint }>
            <Text style={ styles.fpText } allowFontScaling={ false }>One-Touch Login</Text>
        </View>
    )
}

const styles = StyleSheet.create({
    fingerPrint: {
        // 补充你的样式代码
    },
    fpText: {
        // 补充你的样式代码
    }
})

export default LocalAuthg;

3. 纯RN项目手动验证原生链接配置

自动链接失效后,手动检查原生项目配置:

  • iOS端:
    1. 打开ios/[你的项目名].xcworkspace,确认Libraries目录下存在ReactNativeBiometrics.xcodeproj,没有则右键添加node_modules/react-native-biometrics/ios/ReactNativeBiometrics.xcodeproj。
    2. 进入项目Build Phases → Link Binary With Libraries,添加libReactNativeBiometrics.a。
    3. 在Info.plist中添加权限描述:
      <key>NSFaceIDUsageDescription</key>
      <string>需要使用FaceID进行身份验证</string>
      <key>NSBiometryUsageDescription</key>
      <string>需要使用指纹进行身份验证</string>
      
  • Android端:
    1. 检查android/app/src/main/java/[包名]/MainApplication.java,确认已添加包和注册:
      import com.rnbiometrics.ReactNativeBiometricsPackage;
      // ...
      @Override
      protected List<ReactPackage> getPackages() {
        List<ReactPackage> packages = new PackageList(this).getPackages();
        packages.add(new ReactNativeBiometricsPackage());
        return packages;
      }
      
    2. 确认android/settings.gradle包含:
      include ':react-native-biometrics'
      project(':react-native-biometrics').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-biometrics/android')
      
    3. android/app/build.gradle的dependencies中添加:
      implementation project(':react-native-biometrics')
      

4. 清理缓存并重新构建

不管是Expo还是纯RN项目,清理缓存后重新构建:

  • 纯RN项目:
    npx react-native start --reset-cache
    cd ios && pod install && cd ..
    npx react-native run-ios
    # 或Android端
    npx react-native run-android
    
  • Expo项目:
    expo r -c
    

5. 重新安装库确保完整性

卸载后重新安装,避免安装过程中出现文件损坏:

npm uninstall react-native-biometrics
npm install react-native-biometrics
# 纯RN项目手动补链接
npx react-native link react-native-biometrics

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 12:16:00