使用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
相关产品推荐
相关产品推荐

