You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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配置:

  1. android/build.gradlebuildscript.dependencies里添加:
    dependencies {
      // 其他依赖...
      classpath 'com.google.gms:google-services:4.4.0' // 版本匹配你的google-services.json
    }
    
  2. android/app/build.gradle最底部添加:
    apply plugin: 'com.google.gms.google-services'
    
  3. 执行npx expo prebuild --platform android,让Expo根据app.json生成正确的Android配置文件,再执行Gradle构建命令

5. 缓存清理与重建

缓存导致的配置不生效很常见,按以下步骤清理:

  • 删除android/.gradleandroid/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不匹配,改完这两个点就解决了问题,你可以按这个顺序逐一排查,应该能快速定位到原因!

火山引擎 最新活动