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

Expo APK构建闪屏后崩溃,报Firebase auth/invalid-api-key错误

问题:Expo构建正式APK后因Firebase无效API密钥崩溃
  • 开发环境(Expo Go、开发构建)运行正常,正式APK启动闪屏后直接崩溃
  • Android Studio Logcat报错:Fatal Exception: mqt_native_modules,对应JavaScript异常为FirebaseError: Firebase: Error (auth/invalid-api-key)
  • Firebase配置项存储在根目录.env文件,通过app.config.js的expo.extra注入,初始化时从Constants.expoConfig.extra读取
  • 崩溃时console.log(firebaseConfig)未执行,无法确认配置值;更新FCM V1服务账号密钥后问题依旧

相关代码片段

app.config.js 配置片段

"apiKey": process.env.APIKEY,
"authDomain": process.env.AUTHDOMAIN,
"projectId": process.env.PROJECTID,
"storageBucket": process.env.STORAGEBUCKET,
"messagingSenderId": process.env.MESSAGINGSENDERID,
"appId": process.env.APPID,
"measurementId": process.env.MEASUREMENTID

firebase.js 文件

import { initializeApp } from "firebase/app";
import { getAuth } from "firebase/auth";
import { getFirestore } from "firebase/firestore";

import Constants from "expo-constants";

const firebaseConfig = {
  apiKey: Constants.expoConfig.extra.apiKey || '',
  authDomain: Constants.expoConfig.extra.authDomain || '',
  projectId: Constants.expoConfig.extra.projectId || '',
  storageBucket: Constants.expoConfig.extra.storageBucket || '',
  messagingSenderId: Constants.expoConfig.extra.messagingSenderId || '',
  appId: Constants.expoConfig.extra.appId || '',
  measurementId: Constants.expoConfig.extra.measurementId || ''
};

console.log(firebaseConfig);
const app = initializeApp(firebaseConfig);

const database = getFirestore(app);
const auth = getAuth(app);

const firebaseServices = { database, auth };

export default firebaseServices;

.env 文件(根目录)

URL_BACK=xxx
APIKEY=xxx
AUTHDOMAIN=xxx
PROJECTID=xxx
STORAGEBUCKET=xxx
MESSAGINGSENDERID=xxx
APPID=xxx
MEASUREMENTID=xx

eas.json 文件

{
  "build": {
    "development": {
      "android": {
        "buildType": "apk",
        "developmentClient": true,
        "gradleCommand": ":app:assembleDebug"
      }
    },
    "preview": {
      "android": {
        "buildType": "apk"
      }
    },
    "preview2": {
      "android": {
        "gradleCommand": ":app:assembleRelease"
      }
    },
    "production": {
      "android": {
        "buildType": "apk"
      }
    }
  }
}

解决方案

1. 确保环境变量在生产构建中正确注入

EAS Build不会自动加载根目录.env文件,需做以下操作:

  • 安装dotenv依赖(若未安装):npm install dotenv
  • 在app.config.js顶部添加require('dotenv').config(),确保环境变量被读取
  • 本地验证构建:执行eas build --profile production --local,检查生成的app.json是否包含正确的配置值

2. 检查环境变量命名与大小写

  • 确保.env中的变量名(如APIKEY)与app.config.js中process.env.APIKEY完全一致,大小写敏感
  • 避免变量名包含特殊字符或空格

3. 修改Firebase初始化逻辑,添加错误捕获

避免直接崩溃,同时输出详细诊断信息:

let app;
try {
  console.log("加载的Firebase配置:", Constants.expoConfig.extra);
  app = initializeApp(firebaseConfig);
} catch (error) {
  console.error("Firebase初始化失败:", error);
  // 可添加降级逻辑,如显示错误提示页面
}

4. 验证API密钥有效性

  • 登录Firebase控制台,确认项目API密钥与.env中APIKEY完全一致
  • 检查API密钥是否设置了使用范围限制(如仅允许特定包名/签名),若有需将生产APK的包名和签名添加到限制列表

5. 检查EAS Build配置

  • 确保eas.json中生产构建配置未覆盖环境变量注入逻辑
  • 若使用eas secret存储敏感信息,需确认生产构建时这些secret已正确加载,且优先级高于本地.env

内容的提问来源于stack exchange,提问作者TrARG

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 10:35:15