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
相关产品推荐
相关产品推荐

