React Native 0.84.1 + Expo集成Firebase推送通知时遭遇「Default FirebaseApp is not initialized」错误
React Native 0.84.1 + Expo集成Firebase推送通知时遭遇「Default FirebaseApp is not initialized」错误
我之前在Expo + React Native 0.8x版本集成FCM推送时也踩过完全一样的坑!这个错误看似是Firebase初始化的问题,但其实大多是Expo构建流程、配置路径或密钥匹配度的问题,给你几个我亲测有效的排查和解决方向:
1. 核对google-services.json的路径与配置一致性
这是最容易踩的坑,一定要仔细核对:
- 你在
app.json里配置的googleServicesFile是"./google-services.json",但你说把文件放在了/android/app目录下,路径必须完全对应!正确的配置应该是:"android": { "package": "com.teste123.naxemobile", "googleServicesFile": "./android/app/google-services.json" } - 同时要确认
google-services.json是从Firebase控制台对应你的Android包名下载的:打开文件检查client_info.mobilesdk_app_id是否和Firebase项目里的App ID一致,package_name是否和app.json里的android.package完全匹配(大小写、字符都不能错!) - 如果你用EAS Build构建,要确保这个文件没被
.gitignore排除,可通过eas build:inspect --platform android --stage archive查看构建包是否包含了正确的文件
2. 确认FCM服务账户密钥的正确性
Expo推送服务需要专门的FCM V1密钥,别和普通服务账户密钥搞混:
- 密钥必须从Firebase控制台的「项目设置 → 服务账户 → Cloud Messaging」页面下载,而不是通用的服务账户密钥
- 检查Expo项目后台的「Push Notifications」配置里,是否上传了正确的V1密钥
- 另外,确认代码里的EAS Project ID是否正确:可以直接打印
Constants.expoConfig,或者暂时硬编码ID测试:
如果硬编码后成功,说明const token = await Notifications.getExpoPushTokenAsync({ projectId: "你的EAS项目ID", // 替换成真实ID });Constants.expoConfig?.extra?.eas.projectId没有正确读取到配置
3. 禁止手动初始化Firebase
Expo环境下完全不需要手动调用FirebaseApp.initializeApp()!Expo的expo-notifications会通过Firebridge自动处理Firebase初始化,手动初始化反而会冲突。
- 检查
package.json,如果安装了firebase或@react-native-firebase/app这类包,建议暂时卸载,这些包会和Expo的自动流程冲突
4. 本地Gradle构建的额外配置
如果你用本地Gradle构建(而非EAS Build),需要手动补全Firebase的Gradle配置:
- 在
android/build.gradle的buildscript.dependencies里添加:dependencies { // 其他依赖... classpath 'com.google.gms:google-services:4.4.0' // 版本匹配你的google-services.json } - 在
android/app/build.gradle的最底部添加:apply plugin: 'com.google.gms.google-services' - 执行
npx expo prebuild --platform android,让Expo根据app.json生成正确的Android配置文件,再执行Gradle构建命令
5. 缓存清理与重建
缓存导致的配置不生效很常见,按以下步骤清理:
- 删除
android/.gradle、android/app/build目录 - 执行
npx expo prebuild --clean --platform android重新生成Android项目文件 - 重新执行Gradle构建(比如
./gradlew assembleRelease)
6. 设备与权限检查
- 必须用真实设备测试,模拟器无法获取有效推送Token
- 检查设备的Google Play服务是否更新到最新版本,旧版本会导致Firebase初始化失败
- 确认
AndroidManifest.xml(预构建后生成的android/app/src/main/AndroidManifest.xml)包含FCM所需权限:<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
我当时就是因为google-services.json路径写错+EAS Project ID不匹配,改完这两个点就解决了问题,你可以按这个顺序逐一排查,应该能快速定位到原因!




