<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>GCP on zed的博客</title><link>https://www.dust-zed.site/tags/gcp/</link><description>Recent content in GCP on zed的博客</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Thu, 26 Feb 2026 09:59:33 +0800</lastBuildDate><atom:link href="https://www.dust-zed.site/tags/gcp/index.xml" rel="self" type="application/rss+xml"/><item><title>Google 移动端基建踩坑：GCP 与 Firebase 项目关系</title><link>https://www.dust-zed.site/android/google-mobile-infra-pitfalls/</link><pubDate>Thu, 26 Feb 2026 09:59:33 +0800</pubDate><guid>https://www.dust-zed.site/android/google-mobile-infra-pitfalls/</guid><description>&lt;p>接入 Google 登录、Firebase Analytics、Crashlytics、FCM 等能力时，经常会遇到一个割裂感：有些配置在 GCP，有些配置在 Firebase，包名和 SHA-1 又会触发全局唯一性冲突。&lt;/p>
&lt;p>这篇复盘的重点是理清 GCP 与 Firebase 的项目关系，避免以后重复踩坑。&lt;/p>
&lt;h2 id="问题现象">问题现象
&lt;/h2>&lt;p>常见表现：&lt;/p>
&lt;ol>
&lt;li>已经在 GCP 创建 OAuth Client，Firebase 再添加 Android 应用时报冲突；&lt;/li>
&lt;li>Firebase Analytics 正常，但 Google 登录失败；&lt;/li>
&lt;li>Debug / Release SHA-1 配置不完整，导致某个构建变体不可用；&lt;/li>
&lt;li>&lt;code>google-services.json&lt;/code> 下载了，但 Web Client ID 和预期不一致；&lt;/li>
&lt;li>同一个包名 + SHA-1 被绑定到另一个 Google 项目。&lt;/li>
&lt;/ol>
&lt;h2 id="根因">根因
&lt;/h2>&lt;p>Firebase 项目底层一定绑定一个 Google Cloud 项目。&lt;/p>
&lt;p>可以理解成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Firebase Console
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> -&amp;gt; 更面向移动端开发者的入口
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> -&amp;gt; 底层绑定 GCP Project
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> -&amp;gt; 间接创建 OAuth Client / API 配置
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Google Cloud Console
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> -&amp;gt; 更底层的云资源入口
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> -&amp;gt; 管理 API、OAuth、服务账号、权限
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>问题通常出在：一开始直接在 GCP 创建了项目和 OAuth Client，后来又在 Firebase 创建了另一个项目。此时同一个 Android 应用的包名和 SHA-1 已经被前一个项目占用，Firebase 再注册就会冲突。&lt;/p>
&lt;h2 id="推荐流程">推荐流程
&lt;/h2>&lt;p>新 Android 项目如果会用 Firebase 生态，建议以 Firebase 作为入口。&lt;/p>
&lt;ol>
&lt;li>在 Firebase Console 创建项目；&lt;/li>
&lt;li>在 Firebase 项目中添加 Android 应用；&lt;/li>
&lt;li>填写 applicationId；&lt;/li>
&lt;li>同时配置 Debug 和 Release SHA-1 / SHA-256；&lt;/li>
&lt;li>下载 &lt;code>google-services.json&lt;/code>；&lt;/li>
&lt;li>在 Firebase Authentication 中开启 Google 登录；&lt;/li>
&lt;li>如需地图、YouTube、Play 相关 API，再进入该 Firebase 绑定的 GCP 项目开启。&lt;/li>
&lt;/ol>
&lt;p>原则：&lt;/p>
&lt;blockquote>
&lt;p>Firebase 负责移动端应用配置，GCP 负责底层 API 和云资源；不要为同一个 App 分别创建两套项目。&lt;/p>&lt;/blockquote>
&lt;h2 id="排查清单">排查清单
&lt;/h2>&lt;p>遇到登录或 Firebase 配置异常时，按这个顺序看：&lt;/p>
&lt;ol>
&lt;li>当前 &lt;code>applicationId&lt;/code> 是否和 Firebase 里注册的一致；&lt;/li>
&lt;li>Debug/Release 使用的 keystore 是否都配置了 SHA-1；&lt;/li>
&lt;li>&lt;code>google-services.json&lt;/code> 是否来自当前 Firebase 项目；&lt;/li>
&lt;li>GCP OAuth Client 是否属于同一个底层 GCP 项目；&lt;/li>
&lt;li>是否存在另一个历史项目占用了相同包名和 SHA-1；&lt;/li>
&lt;li>Google Sign-In 使用的 Web Client ID 是否正确。&lt;/li>
&lt;/ol>
&lt;h2 id="迁移建议">迁移建议
&lt;/h2>&lt;p>如果已经出现项目分裂：&lt;/p>
&lt;ol>
&lt;li>先确认线上正在使用哪个 Firebase/GCP 项目；&lt;/li>
&lt;li>不要直接删除历史 OAuth Client；&lt;/li>
&lt;li>记录所有 Debug/Release keystore 指纹；&lt;/li>
&lt;li>统一到一个 Firebase 项目；&lt;/li>
&lt;li>必要时在 GCP 中清理旧 Client 或重新绑定；&lt;/li>
&lt;li>重新下载并替换 &lt;code>google-services.json&lt;/code>。&lt;/li>
&lt;/ol>
&lt;h2 id="回看清单">回看清单
&lt;/h2>&lt;ol>
&lt;li>Firebase 项目底层绑定 GCP 项目。&lt;/li>
&lt;li>同一个包名 + SHA-1 不应该分散注册到多个项目。&lt;/li>
&lt;li>接入移动端 Google 能力时，优先从 Firebase 创建项目。&lt;/li>
&lt;li>高级 API 再进入 Firebase 绑定的 GCP 项目开启。&lt;/li>
&lt;li>&lt;code>google-services.json&lt;/code>、OAuth Client 和 SHA-1 必须属于同一套项目关系。&lt;/li>
&lt;/ol></description></item></channel></rss>