环境变量是否会覆盖Firebase Auth的googleServicesFile配置?如何排查?
排查Expo项目Google登录配置冲突:确定生效的Client ID
我接手了一个Expo项目,目前正在排查「Google登录」功能异常的原因,怀疑Firebase Auth存在配置冲突:
- 一方面,
app.json中关联了标准Firebase配置文件google-services.json(iOS对应GoogleService-Info.plist),该文件包含api_key和client_id; - 另一方面,应用代码通过
config.js读取EAS构建中设置的环境变量。
问题:如何确定哪个client_id生效?或者如何通过实验验证? 注:生产构建在EAS服务器上进行,无法本地调试。
相关代码/配置片段
app.json 片段
{ "expo": { "ios": { "googleServicesFile": "./GoogleService-Info.plist" }, "android": { "googleServicesFile": "./google-services.json" } }
google-services.json 片段
{ "client": { "oauth_client": { "client_id": "123456789-abcdef123456789.apps.googleusercontent.com" } } }
config.js 片段
import { GOOGLE_ANDROID_CLIENT_ID } from "@env"; // 使用react-native-dotenv const Config = { googleAndroidClientId: GOOGLE_ANDROID_CLIENT_ID } export default Config;
EAS环境变量
GOOGLE_ANDROID_CLIENT_ID=987654321-abcdef123456789.apps.googleusercontent.com
验证方法
1. 打印生效的Client ID到应用日志
在Google登录的初始化或调用逻辑里,添加日志输出当前使用的client_id:
import Config from './config'; // 打印代码中读取的环境变量ID console.log('当前代码使用的Google Client ID:', Config.googleAndroidClientId); // 若项目基于Firebase Auth实现登录,同时打印Firebase内部加载的配置 import { getAuth } from 'firebase/auth'; const auth = getAuth(); console.log('Firebase Auth 加载的配置:', auth.app.options);
提交代码触发EAS构建后,通过以下方式查看日志:
- Android:用
adb logcat过滤应用日志,搜索打印的关键词 - iOS:通过Xcode设备日志查看器或
console.app抓取应用日志
2. 给不同配置来源加标识区分
在EAS环境变量中新增CONFIG_SOURCE=EAS_ENV,然后修改config.js:
import { GOOGLE_ANDROID_CLIENT_ID, CONFIG_SOURCE } from "@env"; const Config = { googleAndroidClientId: GOOGLE_ANDROID_CLIENT_ID, configSource: CONFIG_SOURCE || 'LOCAL_FILE' } export default Config;
同时在google-services.json中添加自定义字段(不影响Firebase解析):
{ "client": { "oauth_client": { "client_id": "123456789-abcdef123456789.apps.googleusercontent.com" } }, "custom_config_source": "LOCAL_FILE" }
之后在代码中同时打印两个来源的标识,就能明确当前生效的配置路径。
3. 临时替换配置验证登录结果
- 方案A:把
google-services.json中的client_id改成和EAS环境变量一致,构建后测试登录是否正常。如果正常,说明之前是本地配置文件的ID生效; - 方案B:把EAS环境变量改成和
google-services.json一致,构建后测试。如果正常,说明环境变量的ID生效。
注:操作前备份原配置,测试后及时恢复。
内容的提问来源于stack exchange,提问作者giraffe.guru
相关产品推荐
相关产品推荐

