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

React Native Expo项目配置Firebase Analytics时出现默认App未初始化报错的解决求助

React Native Expo项目配置Firebase Analytics时出现默认App未初始化报错的解决求助

我卡了好长时间了!明明按照相关文档配置了Firebase Analytics,但每次尝试设置用户ID时都会弹出这个错误:

error while setting analytics user id:  [Error: No Firebase App '[DEFAULT]' has been created - call firebase.initializeApp()]

求大家给点实用的解决办法,不要只甩文档链接,我已经翻了好多遍了😭

先贴一下我的代码,麻烦帮我看看问题出在哪:

App.js 核心代码

import { auth } from './firebase.js'
import analytics from '@react-native-firebase/analytics';
import { useState, useEffect } from 'react';
import { NavigationContainer } from '@react-navigation/native';
import AuthNavigator from './path-to-AuthNavigator';
import MainNavigator from './path-to-MainNavigator';

const App = () => {
  
  const [currentUser, setCurrentUser] = useState(null);

  useEffect(() => {
    (async () => {
      if(currentUser){
        console.log("I have current user: ", analytics())
        try{
            await analytics().setUserId(currentUser.uid)
            console.log("all done")
        }catch(error){
          console.log("error while setting analytics user id: ", error);
        }
      }
    })();
  }, [currentUser]);

  useEffect(() => {
   const unsubscribe = auth.onAuthStateChanged((user) =>  {
        if (user) {
          setCurrentUser(user);
        }
    });
   return () => unsubscribe();
 }, []);


  if(!currentUser){
      return (
        <NavigationContainer>
          <AuthNavigator />
        </NavigationContainer>
      );
  }
  else{
    return (
        <NavigationContainer>
          <MainNavigator />
        </NavigationContainer>
    );
  }
};

export default App;

firebase.js 配置文件

import firebase from "firebase/compat/app";
import 'firebase/compat/firestore'
import 'firebase/compat/auth'

const firebaseConfig = {
  apiKey: "some_key",
  authDomain: "some_domain",
  databaseURL: "some_url",
  projectId: "some_project_id",
  storageBucket: "some_id",
  messagingSenderId: "id",
  appId: "id",
  measurementId: "id"
};

if (firebase.apps.length === 0) {
  firebase.initializeApp(firebaseConfig);
}


const authState = firebase.auth();
export const auth = authState;
export const firestore = firebase.firestore();

实用解决方案(亲测有效)

问题根源

你确实踩了「新旧Firebase SDK混用」的坑!firebase/compat/*是旧版命名空间式的SDK,而@react-native-firebase/analytics是新版模块化的SDK,这俩的初始化逻辑完全独立,所以新版Analytics找不到旧版Compat初始化的App实例,就会报这个错误。

下面给你两个可行的修复方案,推荐第一个:


方案一:统一使用新版模块化Firebase SDK(推荐,未来兼容性更好)

  1. 先确保安装了新版核心依赖:
    # 安装新版核心包
    npm install firebase
    # Bare React Native项目还需安装对应的Analytics包
    npm install @react-native-firebase/analytics @react-native-firebase/app
    
  2. 重写firebase.js文件,改用新版模块化初始化:
    // firebase.js
    import { initializeApp, getApp, getApps } from 'firebase/app';
    import { getAuth } from 'firebase/auth';
    import { getFirestore } from 'firebase/firestore';
    
    const firebaseConfig = {
      apiKey: "some_key",
      authDomain: "some_domain",
      databaseURL: "some_url",
      projectId: "some_project_id",
      storageBucket: "some_id",
      messagingSenderId: "id",
      appId: "id",
      measurementId: "id"
    };
    
    // 确保只初始化一次App实例
    const app = !getApps().length ? initializeApp(firebaseConfig) : getApp();
    
    // 获取Auth和Firestore实例
    const auth = getAuth(app);
    const firestore = getFirestore(app);
    
    export { auth, firestore };
    
  3. 优化App.js中的Analytics使用:
    新版SDK会自动关联已初始化的App,现有代码只需小改即可:
    // App.js中的useEffect可以优化为更清晰的写法
    useEffect(() => {
      const setAnalyticsUserId = async () => {
        if (!currentUser) return;
        try {
          await analytics().setUserId(currentUser.uid);
          console.log("all done");
        } catch (error) {
          console.log("error while setting analytics user id: ", error);
        }
      };
      setAnalyticsUserId();
    }, [currentUser]);
    

方案二:继续使用旧版Compat SDK(过渡用)

如果你暂时不想切换新版,那就把Analytics也换成Compat版本:

  1. 安装Compat版Analytics:
    npm install firebase/compat/analytics
    
  2. 修改firebase.js文件,添加Analytics的导入和导出:
    import firebase from "firebase/compat/app";
    import 'firebase/compat/firestore'
    import 'firebase/compat/auth'
    import 'firebase/compat/analytics'; // 新增
    
    const firebaseConfig = {
      // 你的配置保持不变
    };
    
    if (firebase.apps.length === 0) {
      firebase.initializeApp(firebaseConfig);
    }
    
    const authState = firebase.auth();
    const analytics = firebase.analytics(); // 新增
    
    export const auth = authState;
    export const firestore = firebase.firestore();
    export { analytics }; // 新增
    
  3. 调整App.js中的使用方式:
    从firebase.js导入analytics,替换原有的@react-native-firebase/analytics:
    // App.js的导入改为
    import { auth, analytics } from './firebase.js';
    
    // useEffect中直接使用导入的analytics实例
    try {
      await analytics.setUserId(currentUser.uid);
      console.log("all done");
    } catch (error) {
      console.log("error while setting analytics user id: ", error);
    }
    

最后必检查的两个点

  1. 确保平台配置文件正确:
    • Android:android/app/google-services.json已放在指定目录
    • iOS:ios/[你的项目名]/GoogleService-Info.plist已添加到Xcode项目中
  2. 确保Firebase初始化最早执行:在App.js最顶部就导入./firebase.js,避免在初始化完成前调用Firebase服务。

备注:内容来源于stack exchange,提问作者newbie coder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 14:33:00