接入 Google 登录、Firebase Analytics、Crashlytics、FCM 等能力时,经常会遇到一个割裂感:有些配置在 GCP,有些配置在 Firebase,包名和 SHA-1 又会触发全局唯一性冲突。
这篇复盘的重点是理清 GCP 与 Firebase 的项目关系,避免以后重复踩坑。
问题现象
常见表现:
- 已经在 GCP 创建 OAuth Client,Firebase 再添加 Android 应用时报冲突;
- Firebase Analytics 正常,但 Google 登录失败;
- Debug / Release SHA-1 配置不完整,导致某个构建变体不可用;
google-services.json下载了,但 Web Client ID 和预期不一致;- 同一个包名 + SHA-1 被绑定到另一个 Google 项目。
根因
Firebase 项目底层一定绑定一个 Google Cloud 项目。
可以理解成:
Firebase Console
-> 更面向移动端开发者的入口
-> 底层绑定 GCP Project
-> 间接创建 OAuth Client / API 配置
Google Cloud Console
-> 更底层的云资源入口
-> 管理 API、OAuth、服务账号、权限
问题通常出在:一开始直接在 GCP 创建了项目和 OAuth Client,后来又在 Firebase 创建了另一个项目。此时同一个 Android 应用的包名和 SHA-1 已经被前一个项目占用,Firebase 再注册就会冲突。
推荐流程
新 Android 项目如果会用 Firebase 生态,建议以 Firebase 作为入口。
- 在 Firebase Console 创建项目;
- 在 Firebase 项目中添加 Android 应用;
- 填写 applicationId;
- 同时配置 Debug 和 Release SHA-1 / SHA-256;
- 下载
google-services.json; - 在 Firebase Authentication 中开启 Google 登录;
- 如需地图、YouTube、Play 相关 API,再进入该 Firebase 绑定的 GCP 项目开启。
原则:
Firebase 负责移动端应用配置,GCP 负责底层 API 和云资源;不要为同一个 App 分别创建两套项目。
排查清单
遇到登录或 Firebase 配置异常时,按这个顺序看:
- 当前
applicationId是否和 Firebase 里注册的一致; - Debug/Release 使用的 keystore 是否都配置了 SHA-1;
google-services.json是否来自当前 Firebase 项目;- GCP OAuth Client 是否属于同一个底层 GCP 项目;
- 是否存在另一个历史项目占用了相同包名和 SHA-1;
- Google Sign-In 使用的 Web Client ID 是否正确。
迁移建议
如果已经出现项目分裂:
- 先确认线上正在使用哪个 Firebase/GCP 项目;
- 不要直接删除历史 OAuth Client;
- 记录所有 Debug/Release keystore 指纹;
- 统一到一个 Firebase 项目;
- 必要时在 GCP 中清理旧 Client 或重新绑定;
- 重新下载并替换
google-services.json。
回看清单
- Firebase 项目底层绑定 GCP 项目。
- 同一个包名 + SHA-1 不应该分散注册到多个项目。
- 接入移动端 Google 能力时,优先从 Firebase 创建项目。
- 高级 API 再进入 Firebase 绑定的 GCP 项目开启。
google-services.json、OAuth Client 和 SHA-1 必须属于同一套项目关系。