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

使用react-native-firebase调用Firestore请求失败求助

解决Expo托管工作流中react-native-firebase的Firestore初始化错误

你碰到的错误核心原因是:react-native-firebase不支持Expo纯托管工作流——它依赖原生代码配置,而托管工作流不允许直接修改原生文件(如MainApplication.java),你参考的官方配置步骤实际是针对Expo预构建工作流或裸React Native项目的。

下面是两种可行的解决方向:

方案1:切换到Expo预构建工作流(推荐)

这种方式既保留Expo的大部分便利,又能正常使用react-native-firebase:

  • 执行预构建命令生成原生项目文件:
    npx expo prebuild
    
  • 预构建完成后,react-native-firebase的插件会自动完成原生项目配置(包括MainApplication.java中的Package导入),无需手动修改。
  • 后续需使用eas build构建应用,运行时使用expo start --dev-client,不能再用纯托管的expo start。

方案2:改用Expo官方Firebase集成(保留纯托管工作流)

如果想继续使用纯托管工作流,放弃react-native-firebase,改用Expo官方维护的Firebase库:

  • 安装依赖:
    npx expo install expo-firebase-core expo-firebase-firestore expo-firebase-app-check
    
  • 修改App.js代码适配Expo Firebase API:
    import { useState, useEffect } from 'react';
    import { StatusBar } from 'expo-status-bar';
    import { StyleSheet, Text, View } from 'react-native';
    import { getFirestore, collection, getDocs } from 'firebase/firestore';
    import { initializeApp } from 'firebase/app';
    import { getAppCheck, activate, ReCaptchaV3Provider } from 'firebase/app-check';
    // 从Firebase控制台复制你的项目配置
    const firebaseConfig = {
      apiKey: "YOUR_API_KEY",
      authDomain: "YOUR_AUTH_DOMAIN",
      projectId: "YOUR_PROJECT_ID",
      storageBucket: "YOUR_STORAGE_BUCKET",
      messagingSenderId: "YOUR_SENDER_ID",
      appId: "YOUR_APP_ID"
    };
    
    export default function App() {
      const [items, setItems] = useState([]);
    
      useEffect(() => {
        const fetchData = async () => {
          // 初始化Firebase应用
          const app = initializeApp(firebaseConfig);
          
          // 配置App Check
          const appCheck = getAppCheck(app);
          activate(appCheck, {
            provider: new ReCaptchaV3Provider('YOUR_RECAPTCHA_V3_SITE_KEY'),
            isTokenAutoRefreshEnabled: true,
          });
    
          // 获取Firestore数据
          const db = getFirestore(app);
          const snapshot = await getDocs(collection(db, "test-collection"));
          const data = snapshot.docs.map(doc => doc.data());
          setItems(data);
        };
    
        fetchData();
      }, []);
    
      console.log('items', items);
    
      return (
        <View style={styles.container}>
          <Text>Open up App.js to start working on your app!</Text>
          <StatusBar style="auto" />
        </View>
      );
    }
    
    const styles = StyleSheet.create({
      container: {
        flex: 1,
        backgroundColor: '#fff',
        alignItems: 'center',
        justifyContent: 'center',
      },
    });
    
  • 这种方式完全适配纯托管工作流,无需处理任何原生代码。

补充说明

  • Firebase v9兼容性:react-native-firebase支持v9+,但仅在预构建或裸项目中有效,纯托管工作流不支持。
  • 错误提示中的原生配置步骤,是针对裸React Native项目的,在Expo托管工作流中无法执行,这也是你报错的直接原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:06:49