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

Firebase密钥存储与Expo EAS构建环境变量注入方案咨询

问题解答

1. 把Firebase API密钥存在.env是否合理?

Firebase的客户端配置(包括API_KEY)本身就是可以公开的,Firebase的安全防护核心依赖于Firebase规则(数据库、云存储、身份验证的权限规则),而非隐藏这些客户端参数。即使这些配置被公开,没有正确的规则授权,外部用户也无法滥用你的Firebase服务。

不过如果你出于合规或个人偏好想要隐藏这些配置,存在.env文件里是可行的,但需要注意Expo构建环境下的变量注入方式,不能仅依赖本地的.env文件。

2. EAS构建时注入环境变量的方法

方法一:使用app.config.js函数式配置 + Expo Constants

修改你的app.config.js为函数式导出,这样EAS构建时会执行该文件并读取环境变量:

require('dotenv').config();

export default () => ({
  expo: {
    // 你的其他Expo配置(name, slug, version等)
    extra: {
      apiKey: process.env.API_KEY,
      authDomain: process.env.AUTH_DOMAIN,
      databaseURL: process.env.DATABASE_URL,
      projectId: process.env.PROJECT_ID,
      storageBucket: process.env.STORAGE_BUCKET,
      messagingSenderId: process.env.MESSAGING_SENDER_ID,
      appId: process.env.APP_ID,
      measurementId: process.env.MEASUREMENT_ID,
    },
  },
});

然后在firebase.js中通过expo-constants读取配置,替代@env的导入方式:

import Constants from 'expo-constants';

const config = {
  apiKey: Constants.expoConfig.extra.apiKey,
  authDomain: Constants.expoConfig.extra.authDomain,
  databaseURL: Constants.expoConfig.extra.databaseURL,
  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,
};

方法二:使用EAS Secrets存储环境变量(推荐)

将环境变量存储到Expo的EAS Secrets中,构建时会自动注入到构建环境,无需依赖本地.env文件:

  1. 安装EAS CLI(如果没装):npm install -g eas-cli
  2. 登录Expo账号:eas login
  3. 逐个添加密钥:
    eas secret:create --name API_KEY --value "你的Firebase API密钥" --type project
    eas secret:create --name AUTH_DOMAIN --value "你的Auth域名" --type project
    # 重复添加其他Firebase配置项
    
  4. 之后直接运行eas build --platform android即可,EAS会自动把这些密钥注入到process.env中,app.config.js的函数式配置会正常读取到变量。

方法三:构建命令行直接传递环境变量(临时测试用)

如果只是临时测试,可以在构建命令中直接传递变量:

eas build --platform android --env API_KEY=你的密钥 AUTH_DOMAIN=你的域名 DATABASE_URL=你的数据库URL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:22:44