Expo开发构建后报错:未创建Firebase App '[DEFAULT]'
确认Firebase初始化时机优先级
确保startFirebase()在所有Firebase相关代码(包括FCM模块)执行前调用。如果app.tsx中先导入了expo-firebase-messaging或其他FCM相关模块,再调用初始化函数,就会导致FCM尝试访问未初始化的Firebase实例。建议直接在app.tsx文件最顶部同步执行初始化:// app.tsx 顶部 import { startFirebase } from './index'; startFirebase(); // 之后再导入其他Firebase/FCM相关模块 import { getToken } from 'expo-firebase-messaging';检查
startFirebase()的实现正确性
打开index.ts,确认函数内确实调用了initializeApp且传入了完整有效的firebaseConfig:// index.ts import { initializeApp, getApps } from 'firebase/app'; const firebaseConfig = { // 确保所有配置项(apiKey, projectId, etc.)都正确填写 }; export function startFirebase() { // 避免重复初始化的判断(可选但推荐) if (!getApps().length) { initializeApp(firebaseConfig); } }注意:如果
firebaseConfig中的参数为空或错误,initializeApp可能静默失败,导致没有创建DEFAULT实例。排查EAS构建的环境变量问题
若你使用环境变量存储Firebase配置(比如EXPO_PUBLIC_FIREBASE_API_KEY),需确保EAS构建时这些变量已正确注入:- 检查
eas.json中对应构建配置的env字段是否包含所需变量 - 确认Expo Secrets中已添加这些变量(如果使用了Secrets管理)
构建时环境变量缺失会导致firebaseConfig不完整,初始化失败。
- 检查
验证Firebase与Expo包版本兼容性
添加FCM时若升级了Firebase相关包,可能出现版本不匹配问题。确保expo-firebase-messaging、firebase/app等包的版本与当前Expo SDK版本兼容。避免在组件生命周期内延迟初始化
不要将startFirebase()放在useEffect或组件内部的异步逻辑中,这类操作会延后初始化时机,导致FCM代码先执行。必须在应用启动的最早期同步执行初始化。检查是否存在重复初始化或冲突
排查项目中是否有其他地方调用了initializeApp,或第三方库隐式初始化了Firebase。可通过getApps()方法检查当前已初始化的实例,避免重复操作。
内容的提问来源于stack exchange,提问作者RenaissanceMan

