还有其他难题,或是您的问题未在下面列出?请报告 bug 或提出功能需求,并在 Stack Overflow 上参与讨论。
Firebase 项目和 Firebase 应用
Firebase 项目介绍
Firebase 项目是 Firebase 的顶级实体。在项目中,您可以注册 Apple、Android 或 Web 应用。在 Firebase 中注册应用后,您可以向应用添加特定于产品的 Firebase SDK,例如 Analytics、Cloud Firestore、Crashlytics 或 Remote Config。
您应在单个 Firebase 项目中注册 Apple、Android 和 Web 应用变体。您可以使用多个 Firebase 项目来支持多个环境(如开发环境、预演环境和生产环境)。
下面列出了一些资源,可帮助您详细了解 Firebase 项目:
- 了解 Firebase 项目 - 简要介绍 Firebase 项目的一些重要概念,包括它们与 Google Cloud 的关系以及项目及其应用和资源的基本层次结构。
- 设置 Firebase 项目的常规最佳实践 - 提供了有关设置 Firebase 项目以及在项目中注册应用的概括性常规最佳实践,以便设置使用不同环境并且清晰明确的开发工作流。
请注意,对于所有 Firebase 项目,Firebase 都会在 Google Cloud 控制台中的项目标签页面内自动添加 firebase:enabled
标签。如需详细了解此标签,请参阅我们的常见问题解答。
什么是 Google Cloud 组织?
Google Cloud 组织是 Google Cloud 项目(包括 Firebase 项目)的容器。这种层次结构可让您更好地整理您的 Google Cloud 项目和 Firebase 项目,方便管理对这些项目的访问权限以及对其进行审核。如需了解详情,请参阅创建和管理组织。
如何将 Firebase 添加到现有 Google Cloud 项目中?
您可以通过 Google Cloud 控制台或 Google API 控制台管理现有的 Google Cloud 项目。
您可以使用以下任一选项将 Firebase 添加到这些现有项目中:
- 使用 Firebase 控制台:
在 Firebase 控制台着陆页中,点击添加项目,然后从项目名称菜单中选择现有的项目。 - 使用程序化选项:
- 调用 Firebase Management REST API 端点
addFirebase
。 - 运行 Firebase CLI 命令
firebase projects:addfirebase
。 - 使用 Terraform。
- 调用 Firebase Management REST API 端点
为什么我的 Google Cloud 项目有一个 firebase:enabled
标签?
在 Google Cloud 控制台中,您的项目的标签页面可能会显示 firebase:enabled
标签(具体而言就是 Key
为 firebase
,Value
为 enabled
)。
此标签是 Firebase 自动添加的,因为您的项目是 Firebase 项目,这意味着您的项目启用了特定于 Firebase 的配置和服务。您可以详细了解 Firebase 项目与 Google Cloud 之间的关系。
我们强烈建议您不要修改或删除此标签。Firebase 和 Google Cloud 使用此标签来列出您的 Firebase 项目(例如,使用 REST API projects.list
端点或 Firebase 控制台内的菜单)。
请注意,手动将此标签添加到项目标签列表并不会为您的 Google Cloud 项目启用特定于 Firebase 的配置和服务。要做到这一点,您需要通过 Firebase 控制台添加 Firebase(或者,对于高级用例,您需要使用 Firebase Management REST API 或 Firebase CLI)。
为什么我的 Firebase 项目未显示在 Firebase 项目列表中?
如果您在以下位置找不到 Firebase 项目,请参阅此常见问题解答:
- 您在 Firebase 控制台中查看的项目列表中
- 调用 REST API
projects.list
端点时的响应中 - 运行 Firebase CLI 命令
firebase projects:list
时的响应中
请尝试执行以下问题排查步骤:
- 首先,请尝试通过直接输入项目的网址来访问该项目。请使用以下格式:
https://console.firebase.google.com/project/PROJECT-ID/overview
- 如果您无法访问项目或收到权限错误,请检查以下各项:
- 确保您登录 Firebase 使用的 Google 账号有权访问该项目。您可以通过点击控制台右上角的账号头像登录和退出 Firebase 控制台。
- 检查您是否可以在 Google Cloud 控制台中查看项目。
- 在 Google Cloud 控制台中,确保您项目的标签页面上有
firebase:enabled
标签。Firebase 和 Google Cloud 会使用此标签列出您的 Firebase 项目。如果您没有看到此标签,但为您的项目启用了 Firebase Management API,则应手动添加此标签(具体而言就是Key
为firebase
,Value
为enabled
)。 - 确保您拥有某个基本 IAM 角色(Owner、Editor 或 Viewer)或者拥有包含 Firebase 相关权限的某个角色(例如,一个 Firebase 预定义角色)。您可以在 Google Cloud 控制台的“IAM”页面中查看自己的角色。
- 如果您的项目属于某个 Google Cloud 组织,您可能需要额外的权限才能查看 Firebase 控制台中列出的项目。请与管理您的 Google Cloud 组织的人员联系,为您授予适当的角色(例如,Browser 角色),以便您可以查看项目。
如果上述所有问题排查步骤都不能让您在 Firebase 项目列表中看到您的项目,请与 Firebase 支持团队联系。
一个账号中可以有多少个项目?
- Spark 定价方案 - 您只能拥有少量项目配额(通常约为 5-10 个)。
- Blaze 定价方案 - 只要您的 Cloud Billing 账号信誉良好,您的每个 Cloud Billing 账号的项目配额就会大幅增加。
项目配额限制对大多数开发者而言很少会构成问题,但如果您有需要,可以申请增加项目配额。
请注意,彻底删除项目需要 30 天时间,且在彻底删除前仍计入您的项目配额。
一个 Firebase 项目中可以有多少个 Firebase 应用?
Firebase 项目是一种用于存放 Firebase Apple 应用、Firebase Android 应用和 Firebase Web 应用的容器。Firebase 对一个 Firebase 项目中的 Firebase 应用数量有限制,总数不得超过 30 个。
超过此数量后,性能会开始下降(对于 Google Analytics 尤其明显)。最终,当应用数量较多时,某些产品功能会停止运行。此外,如果您将 Google 登录用作身份验证提供方,则系统会为项目中的每个应用创建一个基础 OAuth 2.0 客户端 ID。在一个项目中大约只能创建 30 个客户端 ID。
您应该确保一个 Firebase 项目中的所有 Firebase 应用在最终用户看来是同一应用针对不同平台的变体。例如,如果您开发一个白标应用,则每个有独立标签的应用都应该有自己的 Firebase 项目,但该标签的 Apple 和 Android 版本可以属于同一个项目。如需了解详情,请参阅有关设置 Firebase 项目的常规最佳实践。
如果您的项目需要的应用超出 30 个(此情况极少发生),您可以申请提高应用数量上限。如需申请提高上限,您的项目必须采用 Blaze 定价方案。如需提出申请并接受评估,请访问 Google Cloud 控制台。如需详细了解配额管理,请参阅 Google Cloud 文档。
如果我将项目标记为“生产”环境,会发生什么情况?
在 Firebase 控制台中,您可以为 Firebase 项目标记环境类型,例如将其标记为“生产”环境或“未指定”(非生产)环境。
为项目标记环境类型不会影响 Firebase 项目的运作或其功能。不过,标记有助于您和您的团队在应用生命周期内管理各种 Firebase 项目。
如果您将项目标记为生产环境,则系统会在 Firebase 控制台中为此项目添加颜色鲜明的生产标记,提醒您任何更改都可能影响关联的正式版应用。将来,我们可能会为标记为生产环境的 Firebase 项目增添更多功能和安全保障。
如需更改 Firebase 项目的环境类型,请访问settings项目设置 > 常规,然后在“您的项目”卡片中的“环境”下方点击 edit 以更改环境类型。
在哪里可以找到我的 Firebase 应用的 ID?
在 Firebase 控制台中,前往settings 项目设置。向下滚动到“您的应用”卡片,然后点击所需的 Firebase 应用即可查看该应用的信息(包括其应用 ID)。
以下是一些应用 ID 值示例:
-
Firebase iOS 应用:
1:1234567890:ios:321abc456def7890
-
Firebase Android 应用:
1:1234567890:android:321abc456def7890
-
Firebase Web 应用:
1:1234567890:web:321abc456def7890
将 Google Play / AdMob / Google Ads / BigQuery 关联到我的 Firebase 项目或应用有何前提条件?
- 如需关联您的 Google Play 账号,您需要符合以下条件:
- 您是以下任一 Firebase 角色:
Owner 或 Firebase Admin;以及 - 以下任一 Google Play 访问权限级别:账号所有者或管理员
- 您是以下任一 Firebase 角色:
- 如需关联 AdMob 应用,您必须同时是 Firebase 项目所有者和 AdMob 管理员。
- 如需关联 AdWords 账号,您必须同时是 Firebase 项目所有者和 AdWords 管理员。
- 要关联 BigQuery 项目,您必须是 Firebase 项目所有者。
我需要在应用中包含哪些开源声明?
在 Apple 平台上,Firebase pod 包含一份内含相关条目的 NOTICES 文件。Firebase Android SDK 包含一个用于显示许可信息的帮助程序 Activity
。
权限设置和 Firebase 项目访问权限
如何为项目成员分配角色(如 Owner 角色)?
若要管理分配给每个项目成员的角色,您必须是 Firebase 项目的所有者(或者被分配了具有 resourcemanager.projects.setIamPolicy
权限的角色)。
您可以在以下位置分配和管理角色:
- Firebase 控制台为您提供了一种简单的方法来为项目成员分配角色,只需依次点击 settings > 项目设置,然后打开“用户和权限”标签页即可进行分配。在 Firebase 控制台中,您可以分配任何基本角色(Owner、Editor、Viewer)、Firebase Admin/Viewer 角色或任何 Firebase 预定义的产品类别角色。
- Google Cloud 控制台提供了一套丰富的工具,可供您在 IAMIAM 页面中为项目成员分配角色。在 Cloud 控制台中,您还可以创建和管理自定义角色,以及向服务账号授予项目的访问权限。
请注意,在 Google Cloud 控制台中,项目成员称为“主账号”。
如果您项目的所有者无法再执行所有者的任务(例如,该人员从贵公司离职),并且您的项目并非通过 Google Cloud 组织管理(请参见下一段),那么您可以与 Firebase 支持团队联系,询问如何申请访问 Firebase 项目。
请注意,如果 Firebase 项目属于 Google Cloud 组织,则可能没有所有者。如果您无法找到 Firebase 项目的所有者,请与管理 Google Cloud 组织的人员联系,请求为项目分配 Owner 角色。
如何查找拥有 Firebase 项目 Owner 角色的用户?
您可以在以下位置查看项目成员及其角色:
- 如果您有权在 Firebase 控制台中访问项目,则可以在 Firebase 控制台的“用户和权限”页面中查看项目成员列表(包括所有者)。
- 如果您无权在 Firebase 控制台中访问项目,请确认您是否能够在 Google Cloud 控制台中访问该项目。如果可以,那么您便可以在 Google Cloud 控制台的“IAM”页面中查看项目成员列表(包括所有者)。
如果您项目的所有者无法再执行所有者的任务(例如,该人员从贵公司离职),并且您的项目并非通过 Google Cloud 组织管理(请参见下一段),那么您可以与 Firebase 支持团队联系,请求分配临时 Owner 角色。
请注意,如果 Firebase 项目属于 Google Cloud 组织,它可能没有所有者。不过,管理 Google Cloud 组织的人员可以执行所有者可以执行的许多任务。不过,如需执行一些仅限所有者执行的任务(例如分配角色或管理 Google Analytics 媒体资源),管理员可能需要为自己分配实际所有者角色才能执行这些任务。如果您无法找到 Firebase 项目的所有者,请与管理您的 Google Cloud 组织的人员联系,请求为项目分配 Owner 角色。
应在什么时候或者出于什么原因为项目成员分配 Owner 角色?
为了确保妥善管理 Firebase 项目,必须为其设置所有者。项目所有者是指可以执行多项重要管理操作[例如分配角色和管理 Google Analytics 媒体资源]的人员,Firebase 支持团队只能完成所演示项目的所有者发出的管理请求。
为 Firebase 项目设置所有者后,请务必及时更新这些分配。
请注意,如果 Firebase 项目属于 Google Cloud 组织,则管理 Google Cloud 组织的人员可以执行所有者可以执行的许多任务。但是,对于一些特定于 Owner 角色的任务(例如分配角色或管理 Google Analytics 媒体资源),管理员可能需要为自己分配实际的 Owner 角色才能执行这些任务。
我认为自己没有 Firebase 项目,但却收到了有关某个项目的电子邮件。如何可以访问该项目?
您收到的电子邮件应包含可用于打开该 Firebase 项目的链接。点击电子邮件中的链接应该会在 Firebase 控制台中打开该项目。
如果您无法通过该链接打开项目,请确保您登录 Firebase 使用的 Google 账号与您接收项目相关电子邮件使用的账号是同一个。您可以通过点击控制台右上角的账号头像登录和退出 Firebase 控制台。
请注意,如果您是 Google Cloud 组织的管理员,那么您可能会收到有关组织内 Firebase 项目变更的通知。但是,您可能并没有足够的权限来打开这些 Firebase 项目。在这种情况下,最简单的解决方案是为您自己分配实际的 Owner 角色,这样便可以打开该项目并执行所需的操作。详细了解应在什么时候或者出于什么原因分配 Owner 角色。
平台和框架
如需获取实用提示和更多常见问题解答,请访问针对具体平台的问题排查和常见问题解答页面。
Firebase 控制台
哪些浏览器可用于访问 Firebase 控制台?
可以通过最新版本的常用桌面浏览器(例如 Chrome、Firefox、Safari 和 Edge)访问 Firebase 控制台。但目前尚未全面支持移动浏览器。
我可以加载 Firebase 控制台,但为什么我找不到或无法访问自己的 Firebase 项目?
如果您遇到以下任一问题,请参阅此常见问题解答:
- Firebase 控制台返回一个错误页面,指出您的项目可能不存在或者您无权访问该项目。
- 即使您在 Firebase 控制台的搜索字段中输入了您的项目 ID 或项目名称,该项目也不会显示。
请尝试执行以下问题排查步骤:
- 首先,请尝试通过直接输入项目的网址来访问该项目。请使用以下格式:
https://console.firebase.google.com/project/PROJECT-ID/overview
- 如果您仍无法访问项目或收到权限错误,请检查以下各项:
- 确保您登录 Firebase 使用的 Google 账号有权访问该项目。您可以通过位于控制台右上角的账号头像登录和退出 Firebase 控制台。
- 确保已为项目启用 Firebase Management API。
- 确保您拥有某个基本 IAM 角色(Owner、Editor 或 Viewer)或者拥有包含 Firebase 相关权限的某个角色(例如,一个 Firebase 预定义角色)。您可以在 Google Cloud 控制台的“IAM”页面中查看自己的角色。
- 如果您的项目属于某个 Google Cloud 组织,您可能需要额外的权限才能查看 Firebase 控制台中列出的项目。请与管理您的“Google Cloud”组织的人员联系,请其向您授予查看项目的适当角色(例如 Browser 角色)。
如果完成上述所有问题排查步骤后,您仍无法找到或访问您的项目,请与 Firebase 支持团队联系。
为什么系统没有为我加载 Firebase 控制台?
如果您遇到以下任何问题,请参阅此常见问题解答:
- Firebase 控制台中的某个页面始终未能完成加载。
- 某个页面中的数据未能按预期加载。
- 加载 Firebase 控制台时收到浏览器错误消息。
请尝试执行以下问题排查步骤:
- 请查看 Firebase 状态信息中心的“控制台”行,了解可能会发生的任何服务中断。
- 确保您使用的是受支持的浏览器。
- 尝试以无痕模式或在无痕浏览窗口中加载 Firebase 控制台。
- 停用所有浏览器扩展程序。
- 确认网络连接未被广告拦截器、防病毒软件、代理、防火墙或其他软件屏蔽。
- 尝试使用其他网络或设备加载 Firebase 控制台。
- 如果您使用的是 Chrome,请访问开发者工具控制台,查看是否存在任何错误。
如果上述所有问题排查步骤都不能解决问题,请与 Firebase 支持团队联系。
如何确定我的 Firebase 控制台语言?
Firebase 控制台的语言设置取决于您在 Google 账号设置中选择的语言。
如需更改语言偏好设置,请参阅更改语言。
Firebase 控制台支持以下语言:
- 英语
- 葡萄牙语(巴西)
- 法语
- 德语
- 印度尼西亚语
- 日语
- 韩语
- 俄语
- 简体中文
- 西班牙语
- 繁体中文
Firebase 控制台支持哪些角色和权限?
Firebase 控制台和 Google Cloud 控制台使用相同的基础角色和权限。如需详细了解角色和权限,请参阅 Firebase IAM 文档。
Firebase 支持的基础(基本)角色有 Owner、Editor 和 Viewer:
- 项目 Owner 可以向项目添加其他成员,设置集成(将项目关联到 BigQuery 或 Slack 等服务),并拥有项目的完整修改权限。
- 项目 Editor 拥有对项目的完整修改权限。
- 项目 Viewer 只拥有对项目的读取权限。请注意,Firebase 控制台目前不会对项目 Viewer 隐藏/停用界面修改控件,但对于分配了 Viewer 角色的项目成员,这些操作将失败。
Firebase 还支持以下角色:
- Firebase 预定义角色 - 精选的 Firebase 特有角色。相比 Owner、Editor 和 Viewer 等基本角色,这些角色可帮助实现更精细的访问权限控制。
- 自定义角色 - 由您创建的完全自定义的 IAM 角色,用于定制一组满足贵组织具体要求的权限。
价格
哪些产品需要付费?哪些是免费的?
Firebase 的付费基础架构产品包括 Realtime Database、Cloud Storage for Firebase、Cloud Functions、Hosting、Test Lab 和电话身份验证。我们为所有这些功能都提供了免费层级。
Firebase 还有许多免费产品:Analytics、Cloud Messaging、Notifications Composer、Remote Config、App Indexing、Dynamic Links 和 Crash Reporting。在所有方案(包括我们的免费 Spark 方案)中,使用这些产品仅需遵循相应产品的流量控制政策(例如配额、合理访问和其他服务保护措施)。此外,电话身份验证以外的所有 Authentication 功能都是免费的。
Firebase 是否提供付费产品的免费试用赠金?
您可以根据Google Cloud免费试用使用 Firebase 付费服务。Google Cloud 和 Firebase 新用户可以利用 90 天的试用期(包括 $300 的免费 Cloud Billing 赠金)来探索和评估 Google Cloud 和 Firebase 产品和服务。
在 Google Cloud 免费试用期内,您将获得一个免费试用 Cloud Billing 账号。在免费试用期间,任何使用该结算账号的 Firebase 项目都将采用 Blaze 定价方案。
别担心,开设此免费试用 Cloud Billing 账号不会导致我们向您收取费用。除非您通过将免费试用 Cloud Billing 账号升级为付费账号来明确启用结算功能,否则我们不会向您收费。您可以在试用期间随时升级为付费账号。升级后,您仍然可以使用剩余赠金(在 90 天内)。
免费试用期结束后,您需要将项目降级为 Spark 定价方案,或在 Firebase 控制台中设置 Blaze 定价方案以继续使用您的 Firebase 项目。
详细了解 Google Cloud 免费试用。
我如何知道哪个定价方案适合我?
Spark 定价方案
我们的 Spark 方案非常适合您免费开发应用。您可以使用所有免费的 Firebase 功能(Analytics、Notifications Composer、Crashlytics 等),并获得付费基础架构功能的宽裕配额。然而,如果您在一个日历月中使用的 Spark 方案资源超出限额,您的应用将在该月剩余的时间内关闭。此外,采用 Spark 方案时,无法使用 Google Cloud 功能。
Blaze 定价方案
我们的 Blaze 方案设计用于生产应用。升级为 Blaze 方案后,您还可以使用付费 Google Cloud 功能扩展您的应用。您只需为您消耗的资源付费,因而可以根据需求调整使用规模。我们致力于使 Blaze 方案的价格与行业领先的云服务提供商提供的价格相比具有竞争力。
Spark 方案中的免费短信功能有何变化?
从 2024 年 9 月开始,为提高电话身份验证的安全性和服务质量,Firebase 项目必须与 Cloud Billing 账号相关联,才能启用和使用短信服务。
如何监控使用量和结算?
您可以在 Firebase 控制台的以下任一信息中心内跟踪您的项目资源用量:
Flame 定价方案有何变化?
自 2020 年 1 月起,Flame 定价方案(即 $25/月的附加配额)便已不再接受新的注册申请且系统已移除该选项。彼时该方案的现有用户则获得了一个宽限期,以便他们有时间可以将自己的项目从 Flame 方案中迁出。但是,自 2022 年 2 月起,如果还有采用 Flame 定价方案的项目,系统便会将这些项目降级为 Spark 定价方案。
相应地,
- 采用 Spark 和 Blaze 方案的现有项目以及任何新项目都不能再改用 Flame 方案,也无法注册该方案。
- 如果之前已将采用 Flame 方案的项目改用其他定价方案,则该项目无法再重新采用 Flame 方案。
- 降级为 Spark 方案的项目可以升级到 Blaze 方案,继续享用额外的付费服务。
- Flame 方案的参考内容已从文档中移除。
您还有关于停用 Flame 方案的其他问题吗?查看下文的其他常见问题解答中的部分内容。
想了解 Firebase 提供的其他定价方案吗?请访问我们的 Firebase 价格页面。如果您想开始让任何现有项目改用其他定价方案,可以在项目的 Firebase 控制台中执行相应操作。
有关停用 Flame 方案的其他常见问题解答
我有一个采用固定 Firebase 费用的项目、流程或业务模式。我该怎么做?
注册 Blaze 定价方案,并务必设置预算提醒。
我能获得特殊权限来创建采用 Flame 方案的新项目吗?
不能,Firebase 没有提供可让项目改用 Flame 方案或注册 Flame 方案的特殊权限。
我已将采用 Flame 方案的项目改为使用其他定价方案。我该如何改为重新使用 Flame 方案?
无法再重新采用 Flame 方案。要访问 Flame 方案提供的服务,请务必使用 Blaze 定价方案,并考虑为您的项目设置预算提醒。
由于 Flame 方案停用,我的项目已自动改用其他定价方案。我该怎么做?
如果 Spark 方案提供的配额无法满足项目需求,您可以将项目升级为 Blaze 定价方案。
为什么要停用 Flame 方案?
这几年来,我们发现 Flame 方案的使用率在下降,并且大多数采用该方案的项目都没有充分利用其价值。整体来说,保留此定价方案的成本效益不佳。我们认为,如果将资源分配给其他 Firebase 计划,我们可以更好地为所有用户提供服务。
Blaze 方案中的免费使用量与 Spark 方案中的免费使用量有何不同?
Blaze 方案中的免费使用量按天计算。对于 Cloud Functions、电话身份验证和 Test Lab,Blaze 方案的用量限额也与 Spark 方案不同。
对于 Cloud Functions,Blaze 方案中的免费使用量在 Cloud Billing 账号级(而非项目级)计算,并且具有以下限制:
- 200 万次调用/月
- 40 万 GB-秒/月
- 20 万 CPU-秒/月
- 5 GB 的网络出站流量/月
对于电话身份验证,Blaze 方案中的免费使用量按月计算。
对于 Test Lab,Blaze 方案中的免费使用量具有以下限制:
- 30 分钟/天(真机设备)
- 60 分钟/天(虚拟设备)
我从 Spark 方案转换到 Blaze 方案后,免费使用量配额会重置吗?
Blaze 方案包含 Spark 方案提供的免费使用量。 您转换到 Blaze 方案后,免费使用量不会重置。
什么是“数据库并发连接”?
并发连接相当于连接到数据库的一台移动设备、浏览器标签页或服务器应用。Firebase 对应用数据库的并发连接数设定了硬性限制。这些限制是为了保护 Firebase 和我们的用户,以避免滥用问题。
Spark 方案的上限为 100,并且不能增加。Flame 和 Blaze 方案的限制为每个数据库 20 万个并发连接。
限制数量并不等于您的应用的用户总数,因为这些用户不会在同一时间全部连接。如果您需要的并发连接数超过 20 万个,请参阅利用多个数据库进行扩缩。
如果我超出了 Spark 方案的 Realtime Database 存储或下载限制,会发生什么情况?
为了向您提供可预测的价格,Spark 方案对您可以使用的资源数设定了上限值。这意味着,如果您在任一月份超过了方案上限,您的应用将被关闭,这样一来,您将无法进一步使用资源,也不会产生额外费用。
如果我超出了 Realtime Database 的 Spark 方案并发连接数上限,会发生什么情况?
当您的应用达到 Spark 方案的并发连接数限值时,后续的任何连接都将被拒,直到某些现有连接关闭为止。已建立连接的用户可以继续使用应用。
Firebase 与 Google Cloud 如何集成?
Firebase 与 Google Cloud 深度集成。 项目在 Firebase 和 Google Cloud 之间共享,因此可以启用 Firebase 服务和 Google Cloud 服务。您可以从 Firebase 控制台或 Google Cloud 控制台访问同一个项目。 具体而言:
- 某些 Firebase 产品由 Google Cloud 直接提供支持,例如 Cloud Storage for Firebase。Google Cloud 支持的产品将随着时间的推移而不断增加。
- Firebase 和 Google Cloud 将共享您的众多设置(包括协作者和结算信息)。 您对 Firebase 和 Google Cloud 的用量将出现在同一账单上。
此外,当您升级至 Blaze 方案后,您可以按标准 Google Cloud 价格在 Firebase 项目中直接使用 Google Cloud 的任何一流基础架构即服务和 API。您还可以将数据从 Google Cloud 直接导出到 BigQuery 进行分析。如需了解详情,请参阅将 BigQuery 与 Firebase 相关联。
将 Google Cloud 与 Firebase 集成使用具有诸多益处,例如可加强安全性、缩短延迟时间以及节省时间(与其他不在同一位置的云服务相比)。如需了解详情,请访问 Google Cloud 网站。
如果我在 Google Cloud 控制台中为我的 Firebase 项目添加或移除结算账号,该项目会发生什么情况?
如果在 Google Cloud 控制台中向项目中添加 Cloud Billing 账号,而该项目目前正在使用 Spark 方案,则该项目将自动升级为 Firebase Blaze 方案。
相反,如果在 Google Cloud 控制台中从项目中移除现有的活跃 Cloud Billing 账号,该项目将被降级为 Firebase Spark 方案。
我是否能够随时升级、降级或取消?
是的,您能够随时升级、降级或取消。请注意,在降级或取消的情况下,我们不提供按比例退款。 这意味着,如果您在结算周期结束之前降级或取消,您仍需要支付该月剩余时间的费用。
我将得到何种支持?
所有 Firebase 应用(包括使用免费方案的应用)在工作时间(按照美国太平洋时间)都能得到 Firebase 团队的电子邮件支持。对于结算相关问题、账号相关问题、技术(问题排查)问题和突发事件报告,所有账号都可享受不受限制的支持。
我可以为 Blaze 方案设置使用量上限吗?
不可以,目前您不能设置 Blaze 方案使用的上限。我们正在评估支持 Blaze 方案使用上限的选项。
Blaze 用户可以为自己的项目或账号定义预算,并在支出接近预算限制时收到提醒。 了解如何设置预算提醒。
什么是自动备份?是否提供每小时备份服务?
自动备份是面向 Blaze 定价方案客户的高级功能,可以每天备份一次 Firebase Realtime Database 数据,并将这些数据上传到 Google Cloud Storage。
我们不提供每小时备份。
是否提供开源、公益或教育项目折扣?
我们的 Spark 方案适用于任何个人或组织,包括非营利组织、学校和开源项目。由于这些方案已包含足够的配额,因此我们不为开源、公益或教育项目提供特别折扣。
是否提供企业合同、价格、支持或专用基础设施托管?
我们的 Blaze 方案适用于各种规模的企业,我们的服务等级协议符合或超过云基础架构的业界标准。但是,目前我们不会为 Realtime Database 等服务提供企业合同、定价或支持,也不会为这些服务提供专用基础架构托管(即现场安装)。我们正在努力尝试添加这些功能。
是否提供临时定价?我只想以随用随付模式使用一两项功能。
我们在 Blaze 方案中提供临时定价,您只需为您使用的功能支付费用。
付费 Firebase 方案如何与 Ads 搭配使用?付费方案是否赠送免费的广告信用额度?
Firebase 定价方案独立于 Ads,因此没有免费的广告额度。作为 Firebase 开发者,您可以将 Ads 账号与 Firebase 关联,以支持转化跟踪。
所有广告系列均由 Ads 直接管理,Ads 结算由 Ads 控制台管理。
Cloud Functions 价格
为什么我需要有结算账号才能使用 Cloud Functions for Firebase?
Cloud Functions for Firebase 依赖于部分付费 Google 服务。如果使用 Firebase CLI 11.2.0 及更高版本部署新函数,则需要用到 Cloud Build 和 Artifact Registry。部署到旧版本以同样的方式使用 Cloud Build,但依赖于 Container Registry 和 Cloud Storage 进行存储,而不是 Artifact Registry。除了现有价格外,您还需要支付这些服务的使用费用。
Firebase CLI 11.2.0 及更高版本的存储空间
Artifact Registry 会提供运行函数的容器。Artifact Registry 会免费提供 500 MB 空间,因此最初的一些函数部署可能不会产生任何费用。超出该阈值后,每增加 1 GB 的存储空间,需按 $0.10/月的价格支付费用。
Firebase CLI 11.1.x 及更低版本的存储空间
对于部署到旧版本的函数,Container Registry 提供了运行函数的容器。您需要为部署函数所需的每个容器付费。您可能会注意到,您需要为每个存储的容器支付少量费用。例如,1GB 的存储空间按 $0.026/月的价格计费。
如需详细了解账单可能如何变化,请查看以下内容
- Cloud Functions 价格:现有的免费层级保持不变。
- Cloud Build 价格:Cloud Build 提供免费层级。
- Artifact Registry 定价。
- Container Registry 价格。
Cloud Functions for Firebase 仍然提供免费用量吗?
是。在 Blaze 方案中,Cloud Functions 为调用、计算时间和互联网流量提供了免费层级。每月前 200 万次调用、40 万 GB-秒、20 万 CPU-秒和 5 GB 的互联网出站流量免费。您只需要为超过这些阈值的使用量付费。
超过 500 MB 的免费存储空间后,每项部署操作都会因函数的容器所使用的存储空间而产生少量费用。如果您的开发过程依赖于部署函数以进行测试,那么您可以在开发过程中使用 Firebase Local Emulator Suite 进一步将费用减至最低。
请参阅 Firebase 定价方案和 Cloud Functions 价格示例场景。
Firebase 打算提高“Cloud Functions for Firebase”的配额和限制吗?
没有。除了移除构建时间上限之外,还没有更改配额的计划;当达到 120 分钟的每日构建配额时,您将需要按照 Blaze 定价方案的条款支付费用,而不是仅仅收到错误或警告。请参阅配额和限制。
我可以获得 Google Cloud $300 赠金吗?
可以,您可以在 Google Cloud 控制台中创建 Cloud Billing 账号以获得 $300 赠金,然后将相应 Cloud Billing 账号与 Firebase 项目关联。
如需详细了解 Google Cloud 赠金,请点击此处。
请注意,如果您执行此操作,则必须在 Firebase 控制台中设置 Blaze 定价方案,以便您的项目在 300 美元的赠金用尽后继续运行。
我想通过 Codelab 来了解 Firebase。可以为我提供一个临时结算账号吗?
抱歉,不行。您可以使用 Firebase 模拟器进行开发,而无需拥有 Cloud Billing 账号。或者可以试试申请 Google Cloud 免费试用。如果您仍然由于此变更而无法支付结算费用,请与 Firebase 支持团队联系。
我担心要支付巨额账单。
您可以在 Google Cloud 控制台中设置预算提醒,以帮助控制费用。此外,您还可以设置限制,限制为每个函数创建的计费实例的数量。如需了解典型场景的费用核算,请参阅 Cloud Functions 价格示例。
如何查看我当前的结算费用?
您可以在 Firebase 控制台中查看使用量和结算信息中心。
我在使用 Firebase Extensions,我需要结算账号吗?
需要。由于扩展程序使用 Cloud Functions 函数,因此扩展程序会与其他函数产生相同的费用。
如需使用扩展程序,您需要升级到 Blaze 定价方案。除了使用 Firebase 服务所产生的任何费用,您还需要为安装的每个扩展程序所需的 Firebase 资源支付少量费用(通常约 $0.01/月,即使没有使用该程序也需支付)。
Cloud Storage for Firebase 价格
如何预测上传和下载操作将支付多少费用?
访问 Firebase 价格页面并使用 Blaze 方案计算器。 计算器会列出 Cloud Storage for Firebase 的所有用量类型。
使用滑块输入 Storage 存储桶的预期用量。计算器用于估算您的每月账单费用。
如果我超过了 Cloud Storage for Firebase 的 Spark 方案的上传、下载或存储限制,会发生什么情况?
如果您的项目超出了 Spark 方案的 Cloud Storage 限制,结果将取决于您超出的限制类型:
- 如果超过了存储的 GB 限制,您将无法在该项目中存储更多数据,除非您移除存储的部分数据或升级到提供更多存储空间或无限存储空间的方案。
- 如果超过了下载的 GB 限制,您的应用将无法在第二天(从美国太平洋时间午夜开始)之前下载更多数据,除非升级到限制较少的方案或无限制的方案。
- 如果超过了上传或下载操作次数限制,您的应用将无法在第二天(从美国太平洋时间午夜开始)之前上传或下载更多数据,除非升级到限制较少的方案或无限制的方案。
隐私权
我可以在何处找到关于 Firebase 中隐私权和安全性的信息?
请参阅 Firebase 中的隐私权和安全性页面。
Firebase SDK 会在 Google Analytics 之外记录任何使用情况/诊断信息吗?
会。目前仅适用于 iOS,但将来可能会发生变化。默认情况下,Firebase Apple 平台 SDK 包含 FirebaseCoreDiagnostics
框架。Firebase 会使用该框架来收集 SDK 使用情况和诊断信息,以便帮助确定未来产品改进事项的优先级别。FirebaseCoreDiagnostics
是可选的。因此,如果您想要停止发送 Firebase 诊断日志,只需从您的应用中解除库关联即可。您可以在 GitHub 上浏览完整的源代码,包括记录的值。
A/B Testing
A/B Testing:我可以创建和运行多少个实验?
每个项目最多可以有 300 个实验,最多包括 24 个正在运行的实验,其余为实验草稿或已完成的实验。
A/B Testing:在将项目与 Google Analytics 解除关联,然后再重新关联后,为什么看不到实验?
如果关联到其他 Google Analytics 媒体资源,您将无法访问之前创建的实验。若要重新获取之前实验的访问权限,请重新将您的项目与创建实验时所关联的 Google Analytics 媒体资源相关联。
A/B Testing:创建 Remote Config 实验时,为什么我收到“项目未与 Google Analytics 关联”消息?
如果您已经启用将 Firebase 与 Google Analytics 相关联,但仍然看到 Google Analytics 未关联的消息,请确保项目中的所有应用都存在 Analytics 数据流。目前,项目中的所有应用都必须连接到 Google Analytics 数据流,才能使用 A/B Testing。
您可以在 Firebase 控制台内的 Google Analytics 集成详细信息页面上找到所有活跃数据流的列表,该页面可通过 settings 项目设置 chevron_right 集成 chevron_right Google Analytics chevron_right 管理进行访问。
为任何没有 Google Analytics 数据流的应用创建 Google Analytics 数据流应该可以解决此问题。您可以通过以下几种方式为缺失的应用创建数据流:
-
如果您只有一两个应用缺少关联的 Google Analytics 数据流,您可以选择以下方法之一来添加 Google Analytics 数据流:
- 在 Firebase 控制台中删除并重新添加没有活跃数据流的任何应用。
- 在 Google Analytics 控制台下,选择管理员,点击数据流,然后点击添加数据流,添加缺失应用的详细信息,然后点击注册应用。
-
如果您有较多缺失的应用数据流,那么解除与 Google Analytics 媒体资源的关联并重新关联是创建缺失应用数据流的最快且最有效的方法:
- 从 settings 项目设置中,选择集成。
- 在 Google Analytics 卡片中,点击管理以访问 Firebase 和 Google Analytics 设置。
- 记下 Google Analytics 媒体资源 ID 和已关联的 Google Analytics 账号。
- 点击 more_vert 更多,然后选择解除 Analytics 与此项目的关联。
-
查看显示的警告(不用担心;您将在下一步中重新关联同一媒体资源),然后点击解除与 Google Analytics 的关联。
解除关联后,您将被重定向到集成页面。 - 在 Google Analytics 卡片中,点击启用以开始重新关联流程。
- 从选择账号列表中选择您的 Analytics 账号。
-
在自动在此账号中创建新媒体资源旁边,点击 edit 修改,然后从显示的 Google Analytics 媒体资源列表中选择您的媒体资源 ID。
您项目中所有应用的列表随即显示。系统会列出每个应用的现有数据流映射,对于没有数据流的应用,系统会为其创建数据流。 - 点击启用 Google Analytics ,以重新关联该媒体资源。
- 点击完成。
如果您在执行这些步骤后使用 Remote Config 创建 A/B 测试时仍然遇到错误,请联系 Firebase 支持。
AdMob
AdMob:我能否将我的 Windows 应用关联到 Firebase?
不能,系统目前不支持 Windows 应用。
AdMob:为什么我无法从 Firebase 控制台将我的应用关联到 AdMob?
您可以通过 AdMob 控制台将 AdMob 应用关联到 Firebase 应用。了解具体方法。
AdMob:将 Firebase 应用关联到 AdMob 应用需要哪些权限或访问权限?
要执行此关联操作,您需要拥有以下访问权限:
- AdMob:您必须是 AdMob 管理员。
- Firebase:您必须拥有
firebase.links.create
权限(该权限包含在 Owner 角色和 Firebase Admin 角色中。 - Google Analytics:对于关联 Firebase 项目的媒体资源,您必须拥有“修改”角色或“管理用户”角色。 了解详情。
AdMob:同一 AdMob 账号中的多个用户能否关联 AdMob 应用和 Firebase 应用?
对于多用户 AdMob 账号,创建第一个 Firebase 关联并接受 Firebase 服务条款的用户是唯一可以在 AdMob 应用和 Firebase 应用之间创建新关联的用户。
AdMob:如需使用 AdMob,我应该使用哪些 SDK?
如需使用 AdMob,请始终按照本常见问题解答中所述使用 Google Mobile Ads SDK。此外(可选),如果您想要收集 AdMob 的用户指标,也可以视需要将 Firebase SDK for Google Analytics 添加到应用。
- 对于 iOS 项目:
按照 AdMob iOS 文档中的说明导入 Google Mobile Ads SDK。 - 对于 Android 项目:
请将 Google Mobile Ads SDK 的依赖项添加到您的build.gradle
文件:
implementation 'com.google.android.gms:play-services-ads:23.5.0'
- 对于 C++ 项目和 Unity 项目:请按照各自文档中的说明操作。
Google Analytics
Analytics:在使用 Firebase 产品时,为什么建议使用 Google Analytics?
Google Analytics 是一款免费且无限制的分析解决方案,可兼容 Firebase 功能,并提供强有力的数据洞见。您可用它查看 Crashlytics 中的事件日志、FCM 中的通知有效性、Dynamic Links 的深层链接效果,以及 Google Play 中的应用内购买数据。它是 Remote Config、Remote Config 个性化等工具中的高级受众群体定位功能的技术后盾。
Google Analytics 在 Firebase 控制台中充当“情报中心”,针对如何开发优质应用、扩大用户群并赚取更多收益,为您提供更具实际指导意义的数据洞见。
要开始使用,请阅读具体文档。
Analytics:如何控制与 Firebase 的其他部分共享 Analytics 数据的方式?
默认情况下,您的 Google Analytics 数据会用于增强其他 Firebase 和 Google 功能。您可以随时在项目设置中控制 Google Analytics 数据的共享方式。 详细了解数据共享设置。
Analytics:如何更新 Google Analytics 媒体资源设置?
在 Google Analytics 媒体资源的管理页面中,您可以更新媒体资源设置,例如:
- 数据共享设置
- 数据保留设置
- 时区和币种设置
如需更新您的媒体资源设置,请按以下步骤操作:
- 在 Firebase 控制台中,前往 settings > 项目设置。
- 前往“集成”标签页,然后在 Google Analytics 卡片中点击管理或查看链接。
- 点击您的 Google Analytics 账号链接,以打开账号和媒体资源设置。
我的 iOS 应用中的 Analytics:我可以安装 Analytics,而不使用广告归因和 IDFA 收集功能吗?
是。如需了解详情,请参阅配置数据收集和使用方式页面。
Analytics:Google Analytics 部分在 2021 年 10 月更新后发生了哪些变化?
如需查看这些变化的摘要,请参阅 Firebase 帮助中心文章 Google Analytics for Firebase 中新增了 Google Analytics 4 功能。
Analytics:在解除 Firebase 与 Google Analytics 的关联后,为什么我在 Firebase 控制台中看不到任何 Analytics 数据?
Analytics 数据存储在 Google Analytics 媒体资源中,而非存储在 Firebase 项目中。如果您删除或解除关联该媒体资源,Firebase 将无法访问 Analytics 数据,并且 Firebase 控制台内的 Analytics 信息中心将为空。请注意,由于这些数据仍位于之前关联的媒体资源中,因此您随时可以将媒体资源重新关联到 Firebase,并在 Firebase 控制台中查看 Analytics 数据。
将全新的 Google Analytics 账号(以及新的 Google Analytics [分析]媒体资源)关联到您的 Firebase 项目会导致 Firebase 控制台中的 Analytics 信息中心为空。不过,如果您之前关联的媒体资源仍然存在,则可以将现有数据从旧媒体资源移至新媒体资源。
Analytics:如果我的 Analytics 媒体资源及其数据被删除了,是否可以恢复?
不可以。如果您的资源已被删除,您将无法恢复删除的媒体资源,也无法检索之前收集的 Analytics 数据(存储在该媒体资源中)。
如果您想再次开始使用 Google Analytics,可以将新媒体资源或现有媒体资源与您的 Firebase 项目关联。您可以在 Firebase 控制台或 Google Analytics 界面中进行关联。详细了解如何将 Google Analytics 媒体资源与 Firebase 项目相关联。
Analytics:如果我的 Google Analytics 媒体资源被删除了,我可以将新的 Google Analytics 媒体资源与我的 Firebase 项目关联并重新开始使用 Analytics 吗?
如果您想再次开始使用 Google Analytics,可以将新媒体资源或现有媒体资源与您的 Firebase 项目关联。您可以在 Firebase 控制台或 Google Analytics 界面中进行关联。详细了解如何将 Google Analytics 媒体资源与您的 Firebase 项目相关联。
请注意,由于所有 Analytics 数据存储在媒体资源(而非 Firebase 项目)中,因此无法检索之前收集的 Analytics 数据。
Analytics:删除 Analytics 媒体资源对 Firebase 产品或集成的 Google 产品有何影响?
一些 Firebase 产品依赖于 Google Analytics 集成。如果您的 Analytics 媒体资源及其数据被删除,则当您使用以下产品时,会出现以下情况:
- Crashlytics - 您再也看不到未遇到崩溃问题的用户、面包屑导航日志和/或疾速崩溃提醒。
- Cloud Messaging 和 In-App Messaging - 您无法再使用定位、广告系列指标、受众群细分和分析标签。
- Remote Config - 您无法再使用有针对性的配置或个性化功能。
- A/B Testing - 由于实验衡量由 Google Analytics 提供,因此您无法再使用 A/B Testing。
- Dynamic Links - 任何依赖 Google Analytics 数据的功能都将中断。
此外,以下集成将受到影响:
- 您无法再将 Analytics 数据导出到 BigQuery。
- 您无法再利用 Google Ads 集成或 Google AdMob 集成。
Analytics:如何划分出不符合某些条件的用户?
您可以通过“排除性定位”这些用户来换个角度解读这个问题。例如,将问题重新解读为“不向已购物的用户展示广告”,以此构造由要定位的用户构成的受众群体。
Analytics:在 Google Analytics 界面中定义的受众群体和/或事件在 Firebase 控制台中也可用吗?
您的受众群体和用户属性将会同步。但若要使用某些功能(如细分和封闭漏斗),您需要使用 Google Analytics 界面。您可以从 Firebase 控制台中的深层链接直接访问 Google Analytics 界面。
您在 Firebase 控制台中做出的任何更改均可以在 Google Analytics 中执行,而且这些更改会体现在 Firebase 中。
Authentication
Firebase Authentication:哪些区域支持电话身份验证?
Firebase Authentication 在全球范围内支持电话号码验证,但并非所有网络都能可靠地传递验证消息。以下区域的短信送达率很高,电话身份验证应该可以正常运行。如上所述,有些运营商由于短信送达成功率很低而无法在某个区域提供服务。
区域 (Region) | 代码 |
---|---|
AD | 安道尔 |
AE | 阿拉伯联合酋长国 |
AF | 阿富汗 |
AG | 安提瓜和巴布达 |
AL | 阿尔巴尼亚 |
AM | 亚美尼亚 |
AO | 安哥拉 |
AR | 阿根廷 |
AS | 美属萨摩亚 |
AT | 奥地利 |
AU | 澳大利亚 |
AW | 阿鲁巴 |
AZ | 阿塞拜疆 |
BA | 波斯尼亚和黑塞哥维那 |
BB | 巴巴多斯 |
BD | 孟加拉国 |
BE | 比利时 |
BF | 布基纳法索 |
BG | 保加利亚 |
BJ | 贝宁 |
BM | 百慕大 |
BN | 文莱达鲁萨兰国 |
BO | 玻利维亚 |
BR | 巴西 |
BS | 巴哈马 |
BT | 不丹 |
BW | 博茨瓦纳 |
BY | 白俄罗斯 |
BZ | 伯利兹 |
CA | 加拿大 |
CD | 刚果(金) |
CF | 中非共和国 |
CG | 刚果(布) |
CH | 瑞士 |
CI | 科特迪瓦 |
CK | 库克群岛 |
CL | 智利 |
CM | 喀麦隆 |
CO | 哥伦比亚 |
CR | 哥斯达黎加 |
CV | 佛得角 |
CW | 库拉索 |
CY | 塞浦路斯 |
CZ | 捷克 |
DE | 德国 |
DJ | 吉布提 |
DK | 丹麦 |
DM | 多米尼克 |
DO | 多米尼加共和国 |
DZ | 阿尔及利亚 |
EC | 厄瓜多尔 |
EG | 埃及 |
ES | 西班牙 |
ET | 埃塞俄比亚 |
FI | 芬兰 |
FJ | 斐济 |
FK | 福克兰群岛(马尔维纳斯群岛) |
FM | 密克罗尼西亚联邦 |
FO | 法罗群岛 |
FR | 法国 |
GA | 加蓬 |
GB | 英国 |
GD | 格林纳达 |
GE | 格鲁吉亚 |
GF | 法属圭亚那 |
GG | 根西岛 |
GH | 加纳 |
GI | 直布罗陀 |
GL | 格陵兰 |
GM | 冈比亚 |
GP | 瓜德罗普 |
GQ | 赤道几内亚 |
GR | 希腊 |
GT | 危地马拉 |
GY | 圭亚那 |
HK | 中国香港特别行政区 |
HN | 洪都拉斯 |
HR | 克罗地亚 |
HT | 海地 |
HU | 匈牙利 |
ID | 印度尼西亚 |
IE | 爱尔兰 |
IL | 以色列 |
IM | 马恩岛 |
IN | 印度 |
IQ | 伊拉克 |
IT | 意大利 |
JE | 泽西岛 |
JM | 牙买加 |
JO | 约旦 |
JP | 日本 |
KE | 肯尼亚 |
KG | 吉尔吉斯斯坦 |
KH | 柬埔寨 |
KM | 科摩罗 |
KN | 圣基茨和尼维斯 |
KR | 韩国 |
KW | 科威特 |
KY | 开曼群岛 |
KZ | 哈萨克斯坦 |
LA | 老挝人民民主共和国 |
LB | 黎巴嫩 |
LC | 圣卢西亚 |
LI | 列支敦士登 |
LK | 斯里兰卡 |
LS | 莱索托 |
LT | 立陶宛 |
LU | 卢森堡 |
LV | 拉脱维亚 |
LY | 利比亚 |
MA | 摩洛哥 |
MD | 摩尔多瓦 |
ME | 黑山 |
MF | 圣马丁(法国) |
MG | 马达加斯加 |
MK | 马其顿共和国 |
MM | 缅甸 |
MN | 蒙古 |
MO | 中国澳门特别行政区 |
MS | 蒙特塞拉特 |
MT | 马耳他 |
MU | 毛里求斯 |
MW | 马拉维 |
MX | 墨西哥 |
MY | 马来西亚 |
MZ | 莫桑比克 |
NA | 纳米比亚 |
NC | 新喀里多尼亚 |
NE | 尼日尔 |
NF | 诺福克岛 |
NG | 尼日利亚 |
NI | 尼加拉瓜 |
NL | 荷兰 |
NO | 挪威 |
NP | 尼泊尔 |
NZ | 新西兰 |
OM | 阿曼 |
PA | 巴拿马 |
PE | 秘鲁 |
PG | 巴布亚新几内亚 |
PH | 菲律宾 |
PK | 巴基斯坦 |
PL | 波兰 |
PM | 圣皮埃尔和密克隆群岛 |
PR | 波多黎各 |
PS | 巴勒斯坦地区 |
PT | 葡萄牙 |
PY | 巴拉圭 |
QA | 卡塔尔 |
RE | 留尼汪岛 |
RO | 罗马尼亚 |
RS | 塞尔维亚 |
RU | 俄罗斯联邦 |
RW | 卢旺达 |
SA | 沙特阿拉伯 |
SC | 塞舌尔 |
SE | 瑞典 |
SG | 新加坡 |
SH | 圣赫勒拿 |
SI | 斯洛文尼亚 |
SK | 斯洛伐克 |
SL | 塞拉利昂 |
SN | 塞内加尔 |
SR | 苏里南 |
ST | 圣多美和普林西比 |
SV | 萨尔瓦多 |
SZ | 斯威士兰 |
TC | 特克斯和凯科斯群岛 |
TG | 多哥 |
TH | 泰国 |
TL | 东帝汶 |
TM | 土库曼斯坦 |
TO | 汤加 |
TR | 土耳其 |
TT | 特立尼达和多巴哥 |
TW | 中国台湾 |
TZ | 坦桑尼亚联合共和国 |
UA | 乌克兰 |
UG | 乌干达 |
US | 美国 |
UY | 乌拉圭 |
UZ | 乌兹别克斯坦 |
VC | 圣文森特和格林纳丁斯 |
VE | 委内瑞拉玻利瓦尔共和国 |
VG | 英属维尔京群岛 |
VI | 美属维尔京群岛 |
VN | 越南 |
WS | 萨摩亚 |
YE | 也门 |
YT | 马约特岛 |
ZA | 南非 |
ZM | 赞比亚 |
ZW | 津巴布韦 |
Firebase Authentication:如何在使用手机身份验证时防止短信滥用?
为了保护您的项目免受短信流量激增和 API 滥用的影响,请按以下步骤操作:
请考虑设置短信区域政策
-
查找发送短信数量非常多且验证短信数量非常少(或为零)的区域。已验证/发送成功率就是成功率。 健康的成功率通常在 70-85% 范围内,因为短信不是一种有保证的传送协议,而且某些区域可能存在滥用行为。成功率低于 50% 意味着发送的短信很多,但成功登录的次数很少,这是作恶方和短信流量激增的常见现象。
使用短信区域政策来拒绝成功率较低的短信区域,或者如果您的应用仅打算在某些市场中分发,则仅允许某些区域。
限制已获授权的身份验证网域
使用 Authentication 设置信息中心来管理已获授权的网域。默认情况下,系统会将 localhost
网域添加到已获批准的身份验证网域中,以简化开发。请考虑从生产项目的授权网域中移除 localhost
,以防止作恶方在其 localhost
上运行代码以访问您的生产项目。
启用并强制执行 App Check
启用 App Check 可以证明请求仅来自与项目关联的应用,从而帮助您保护项目免遭 API 滥用。
如需将 App Check 与 Firebase Authentication 搭配使用,您必须升级到 Firebase Authentication with Identity Platform。
请注意,您需要在 Firebase 控制台中强制执行 App Check for Authentication(请考虑在强制执行之前监控流量)。此外,请仔细检查 reCAPTCHA Enterprise 批准的网站列表,验证其是否仅包含您的生产网站,以及您在 App Check 中注册到项目的应用列表是否准确。
请注意,App Check 会断言调用来自您的某个注册应用,从而帮助您防范自动攻击。它不会阻止用户以非预期方式使用您的应用(例如,启动然后就完全不再完成登录流程来生成发送的短信)。
Firebase Authentication:电话身份验证是否支持将电话号码携号转入新的运营商?
目前,在运营商之间转移号码将导致所有短信都无法发送给这些最终用户。此问题没有解决办法,Firebase 正在努力解决。
Firebase Authentication:在 Android 应用中,我为什么会收到以下错误:
Google sign in failed
?
Google sign in failed
如果您遇到以下错误,请按照此常见问题解答中的问题排查步骤操作:
GoogleFragment: Google sign in failed
com.google.android.gms.common.api.ApiException: 13: Unable to get token.
at
com.google.android.gms.internal.auth-api.zbay.getSignInCredentialFromIntent(com.google.android.gms:play-services-auth@@20.3.0:6)
确保已正确启用 Google 登录作为身份验证提供方:
在 Firebase 控制台中,打开 Authentication 部分。
在登录方法标签页中,停用 Google 登录方法,然后重新启用(即使已启用):
打开 Google 登录方法,将其停用,然后点击保存。
重新打开 Google 登录方法,将其启用,然后点击保存。
确保您的应用使用的是其最新的 Firebase 配置文件 (
google-services.json
)。
获取应用的配置文件。检查您是否仍遇到该错误。如果是,请继续往下执行后续的问题排查步骤。
确保所需的基础 OAuth 2.0 客户端已存在。
Firebase Authentication:在 Apple 平台应用中,我为什么会收到以下错误:
You must specify <clientID> in <GIDConfiguration>
?
You must specify <clientID> in <GIDConfiguration>
如果您遇到以下错误,请按照此常见问题解答中的问题排查步骤操作:
You must specify |clientID| in |GIDConfiguration|
确保已正确启用 Google 登录作为身份验证提供方:
在 Firebase 控制台中,打开 Authentication 部分。
在登录方法标签页中,停用 Google 登录方法,然后重新启用(即使已启用):
打开 Google 登录方法,将其停用,然后点击保存。
重新打开 Google 登录方法,将其启用,然后点击保存。
确保您的应用使用的是其最新的 Firebase 配置文件 (
GoogleService-Info.plist
)。
获取应用的配置文件。检查您是否仍遇到该错误。如果是,请继续往下执行后续的问题排查步骤。
确保所需的基础 OAuth 2.0 客户端已存在。
Firebase Authentication:在我的 Web 应用中,为什么我会收到以下错误:
AuthErrorCode.INVALID_OAUTH_CLIENT_ID
?
AuthErrorCode.INVALID_OAUTH_CLIENT_ID
如果您遇到以下错误,请按照此常见问题解答中的问题排查步骤操作:
AuthErrorCode.INVALID_OAUTH_CLIENT_ID
确保已正确启用 Google 登录作为身份验证提供方:
在 Firebase 控制台中,打开 Authentication 部分。
在登录方法标签页中,停用 Google 登录方法,然后重新启用(即使已启用):
打开 Google 登录方法,将其停用,然后点击保存。
重新打开 Google 登录方法,将其启用,然后点击保存。
此外,在 Authentication 部分的 Google 登录提供方配置中,确保 OAuth 客户端 ID 和密钥与 Google Cloud 控制台的凭据页面中显示的 Web 客户端相匹配(请查看 OAuth 2.0 客户端 ID 部分)。
Firebase Authentication:在我的 Web 应用中,为什么使用重定向登录失败并出现以下错误:
This domain YOUR_REDIRECT_DOMAIN is not
authorized to run this operation
?
This domain YOUR_REDIRECT_DOMAIN is not
authorized to run this operation
如果您遇到以下错误,请按照此常见问题解答中的问题排查步骤操作:
This domain YOUR_REDIRECT_DOMAIN is not authorized to run this operation.
导致此错误很可能是因为重定向网域未列为 Firebase Authentication 的已获授权的网域,或者您用于 Firebase Authentication 服务的 API 密钥无效。
首先确保 YOUR_REDIRECT_DOMAIN 位于 Firebase 项目的已获授权的网域列表中。如果重定向网域已在此处列出,请继续对无效 API 密钥进行问题排查。
默认情况下,Firebase Authentication JS SDK 依赖于 Firebase 项目的 API 密钥(标记为 Browser key
),并使用此密钥根据已获授权的网域列表来验证登录重定向网址是否有效。Authentication 根据您访问 Authentication SDK 的方式获取此 API 密钥:
如果您使用Hosting 提供的 Auth 辅助程序让用户通过 Authentication JS SDK 登录,则每次部署到 Firebase Hosting 时,Firebase 都会自动获取 API 密钥以及 Firebase 配置的其余部分。确保 Web 应用
firebaseConfig
中的authDomain
已正确配置为使用该 Hosting 网站的其中一个网域。如需验证这一点,您可以转到https://authDomain__/firebase/init.json
,然后检查projectId
是否与firebaseConfig
中的相应值一致。如果您自行托管登录代码,则可以使用
__/firebase/init.json
文件将 Firebase 配置提供给自托管的 Authentication JS SDK 重定向帮助程序。此配置文件中列出的 API 密钥和projectId
应与您的 Web 应用firebaseConfig
匹配。
检查以确保此 API 密钥未被删除:前往 Google Cloud 控制台中的 API 和服务 > 凭据面板,其中列出了您的项目的所有 API 密钥。
如果
Browser key
未被删除,请检查以下各项:确保 Firebase Authentication API 在要访问的密钥的允许 API 列表中(详细了解 API 密钥的 API 限制)。
如果您自行托管登录代码,请确保
__/firebase/init.json
文件中列出的 API 密钥与 Cloud 控制台中的 API 密钥匹配。如有必要,请更正该文件中的密钥,然后重新部署应用。如果
Browser key
已删除,您可以让 Firebase 为您生成新的 API 密钥:在 Firebase 控制台中,前往 settings > 项目设置,然后在您的应用部分中,点击您的 Web 应用。此操作会自动创建一个 API 密钥,您可以在 Web 应用的 SDK 设置和配置部分中查看该密钥。
请注意,在 Cloud 控制台中,这个新的 API 密钥不会称为
Browser key
;而是与您的 Firebase Web 应用的别名相同。如果您决定向这个新的 API 密钥添加 API 限制,请确保 Firebase Authentication API 位于允许的 API 列表中。创建新的 API 密钥后,请完成以下适用的步骤:
如果您使用预留的 Hosting 网址,请将您的应用重新部署到 Firebase,以便它可以自动获取新的 API 密钥以及 Firebase 配置的其余部分。
如果您自行托管登录代码,请复制新的 API 密钥并将其添加到
__/firebase/init.json
文件中,然后重新部署应用。
Firebase Authentication:如何手动构建 OAuth Web 客户端?
打开 Google Cloud 控制台中的凭据页面。
在页面顶部,依次选择创建凭据 > OAuth 客户端 ID。
如果系统提示您配置权限请求页面,请按照屏幕上的说明操作,然后执行此常见问题解答的以下步骤。
创建 OAuth Web 客户端:
对于应用类型,选择 Web 应用。
对于已获授权的 JavaScript 来源,添加以下内容:
http://localhost
http://localhost:5000
https://PROJECT_ID.firebaseapp.com
https://PROJECT_ID.web.app
对于已获授权的重定向 URI,请添加以下内容:
https://PROJECT_ID.firebaseapp.com/__/auth/handler
https://PROJECT_ID.web.app/__/auth/handler
保存 OAuth 客户端。
将新的 OAuth 客户端 ID 和客户端密钥复制到剪贴板。
在 Firebase 控制台中,打开 Authentication 部分。
在登录方法标签页中,打开 Google 登录提供方,然后粘贴您刚刚在 Google Cloud 控制台中构建和复制的 Web 服务器客户端 ID 和密钥。点击保存。
Firebase Authentication:对于可以使用电子邮件地址和密码注册的用户发送的确认电子邮件的电子邮件模板,系统如何确定 %APP_NAME%
?
在 2022 年 12 月之前,电子邮件模板中的 %APP_NAME%
会填充 OAuth 品牌名称,每当 Android 应用在 Firebase 项目中注册时,系统都会自动预配该名称。现在,由于 OAuth 品牌仅在启用 Google 登录功能时才预配,因此下面将介绍如何确定 %APP_NAME%
:
如果 OAuth 品牌名称可用,则电子邮件模板中的
%APP_NAME%
将是 OAuth 品牌名称(与 2022 年 12 月之前的行为相同)。如果 OAuth 品牌名称不可用,则确定电子邮件模板中
%APP_NAME%
的方式如下:对于 Web 应用,
%APP_NAME%
将是默认的 Firebase Hosting 网站名称(.firebaseapp.com
和.web.app
之前的值,通常是 Firebase 项目 ID)。对于移动应用:
如果请求中包含 Android 软件包名称或 iOS 软件包 ID,则
%APP_NAME%
将(分别)是 Play 商店或 App Store 中使用的应用名称。否则,
%APP_NAME%
将是默认的 Firebase Hosting 网站名称(.firebaseapp.com
和.web.app
之前的值,通常是 Firebase 项目 ID)。
请注意,如果默认的 Firebase Hosting 网站名称查询失败,则最终的后备方法是使用 Firebase 项目 ID 作为
%APP_NAME%
。
Cloud Functions
Cloud Functions 运行时支持
如何升级到最新的受支持 Node.js 版本?
- 确保您使用的是 Blaze 定价方案。
- 确保您使用的是最新版本的 Firebase CLI。
- 在您的函数的
package.json
中更新engines
字段。 - (可选)使用 Firebase Local Emulator Suite 测试您的更改。
- 重新部署所有函数。
如何确保将函数部署到特定的 Node.js 运行时?
在 Firebase 控制台中,前往函数信息中心,选择一个函数,然后在其他详细信息下查看该函数的语言。
我在使用 Firebase Extensions,Cloud Functions 运行时更新是否会影响我?
会。由于扩展程序使用 Cloud Functions 函数,因此您的扩展程序运行时需要与 Cloud Functions 函数按照相同的时间安排更新。
我们建议您定期将项目中安装的每个扩展程序更新到最新版本。您可以通过 Firebase 控制台或 Firebase CLI 升级项目的扩展程序。
Cloud Messaging
Cloud Messaging:Notifications Composer 与 Cloud Messaging 有何不同?
Firebase Cloud Messaging 通过其客户端 SDK 以及 HTTP 和 XMPP 服务器协议提供一整套消息传递功能。若要针对更复杂的消息传递要求进行部署,FCM 是一个不错的选择。
Notifications Composer 是一个基于 Firebase Cloud Messaging 构建的轻量级无服务器消息传递解决方案。由于具有易用的图形控制台,且减少了对代码的需求,因此 Notifications Composer 使用户可以轻松地发送消息以再次吸引并留住用户,促进应用增长,并助力营销宣传活动。
功能 | Notifications Composer | Cloud Messaging | |
---|---|---|---|
目标 | 单个设备 | ||
已订阅相应主题(例如天气)的客户端 | |||
预定义细分用户群(应用、版本、语言)中的客户端 | |||
Analytics 特定受众群体中的客户端 | |||
设备组中的客户端 | |||
从客户端发到服务器的上行消息 | |||
消息类型 | 通知(最大 2 kb) | ||
数据消息(最大 4 kb) | |||
传送 | 立即 | ||
将来(客户端设备本地时间) | |||
Analytics | 内置通知分析功能(数据收集与漏斗分析) |
Cloud Messaging:Apple 宣布将弃用 APNs 的旧版二进制协议。需要我做什么吗?
不需要。Firebase Cloud Messaging 已于 2017 年改为使用基于 HTTP/2 的 APNs 协议。如果您使用 FCM 向 iOS 设备发送通知,则无需执行任何操作。
Cloud Messaging:是否需要使用其他 Firebase 服务才能使用 FCM?
您可以像使用 GCM 一样将 Firebase Cloud Messaging 用作独立组件,而无需使用其他 Firebase 服务。
Cloud Messaging:我目前在使用 Google Cloud Messaging (GCM) 进行开发,我是否应改用 Firebase Cloud Messaging?
FCM 是 Firebase 品牌旗下的新版 GCM。 它继承了 GCM 的核心基础架构,并带有新的 SDK,简化了 Cloud Messaging 的开发工作。
升级至 FCM SDK 的好处包括:
- 客户端开发更简单。您无需再编写自己的注册或订阅重试逻辑。
- 开箱即用的通知解决方案。您可以使用 Notifications Composer(具有 Web 控制台的无服务器通知解决方案),让任何人都可以根据 Google Analytics 中的数据洞见向特定的目标受众群体发送通知。
Cloud Messaging:为什么我的目标设备似乎无法接收消息?
如果设备似乎无法成功接收消息,请先检查以下两个可能的原因:
通知消息的前台消息处理。 当应用位于设备前台时,客户端应用需要添加消息处理逻辑,以便处理通知消息。请参阅适用于 iOS 应用和 Android 应用的详细信息。
网络防火墙限制。如果贵组织设有防火墙以限制互联网上传/下载流量,则需要将其配置为允许连接 FCM 才能让您的 Firebase Cloud Messaging 客户端应用接收消息。要打开的端口为:
- 5228
- 5229
- 5230
FCM 通常使用 5228,有时也使用 5229 和 5230。 FCM 不提供具体 IP,因此您应允许防火墙接受指向 Google 15169 ASN 中列出的 IP 块中包含的所有 IP 地址的传出连接。
Cloud Messaging:我已在 Android 应用中实现了 onMessageReceived
,但它未被调用。
当应用在后台运行时,通知消息会显示在系统任务栏中,且系统不会调用 onMessageReceived
。包含数据载荷的通知消息显示在系统任务栏中,其中的数据可在用户点按通知时从启动的意图中检索得到。
如需了解详情,请参阅接收和处理消息。
Notifications Composer:Notifications Composer 与 Cloud Messaging 有何不同?
Notifications Composer 是一个基于 Firebase Cloud Messaging 构建的轻量级无服务器消息传递解决方案。由于具有易用的图形控制台,且减少了对代码的需求,因此 Notifications Composer 使用户可以轻松地发送消息以再次吸引并留住用户,促进应用增长,并助力营销宣传活动。
Firebase Cloud Messaging 通过客户端 SDK 以及 HTTP 和 XMPP 服务器协议提供了一组完整的消息传递功能。若要针对更复杂的消息传递要求进行部署,FCM 是一个不错的选择。
Firebase Cloud Messaging 和 Notifications Composer 的消息传递功能比较如下:
功能 | Notifications Composer | Cloud Messaging | |
---|---|---|---|
目标 | 单个设备 | ||
已订阅相应主题(例如天气)的客户端 | |||
预定义细分用户群(应用、版本、语言)中的客户端 | |||
Analytics 特定受众群体中的客户端 | |||
设备组中的客户端 | |||
从客户端发到服务器的上行消息 | |||
消息类型 | 通知(最大 2 kb) | ||
数据消息(最大 4 kb) | |||
传送 | 立即 | ||
将来(客户端设备本地时间) | |||
Analytics | 内置通知分析功能(数据收集与漏斗分析) |
Notifications Composer:我目前在使用 Google Cloud Messaging (GCM) 进行开发,但想改用 Notifications Composer。我该怎么做?
Notifications Composer 是一款开箱即用的解决方案,可让任何人根据 Google Analytics 分析结果,向特定的目标受众群体发送通知。同时,Notifications Composer 还提供每条消息的渠道分析数据,以便您轻松评估通知效果。
如果您现在是 GCM 开发者,则必须从 GCM SDK 升级到 FCM SDK 才能使用 Notifications Composer。请参阅 Android 应用和 iOS 应用的迁移指南。
FCM 功能已于 2023 年 6 月弃用
哪些 FCM API 已于 2023 年 6 月 20 日弃用?如果我正在使用这些 API,该怎么办?
以下 API/SDK 将受到弃用的影响:
服务器 API
API 名称 | API 端点 | 对用户的影响 | 需采取行动 |
---|---|---|---|
旧版 HTTP 协议 | https://fcm.googleapis.com/fcm/send | 向端点发送的请求将在 2024 年 6 月 21 日后开始失败。 | 迁移到 HTTP v1 API。 |
旧版 XMPP 协议 | fcm-xmpp.googleapis.com:5235 | 向端点发送的请求将在 2024 年 6 月 21 日后开始失败。 | 迁移到 HTTP v1 API。 |
实例 ID 服务器 API | https://iid.googleapis.com/v1/web/iid | 向端点发送的请求将在 2024 年 6 月 21 日后开始失败。 | 使用 Web JS SDK 创建 FCM Web 注册。 |
https://iid.googleapis.com/iid/* | 端点会继续工作,但 2024 年 6 月 21 日之后将不支持使用静态服务器密钥进行身份验证。 | 使用源自服务账号的 OAuth 2.0 访问令牌。 | |
Device Group Management API | https://fcm.googleapis.com/fcm/notification | 端点会继续工作,但 2024 年 6 月 21 日之后将不支持使用静态服务器密钥进行身份验证。 | 使用源自服务账号的 OAuth 2.0 访问令牌。 |
通过 XMPP 进行上行消息传递 | fcm-xmpp.googleapis.com:5235 | 2024 年 6 月 21 日之后,在应用中对 FirebaseMessaging.send 进行 API 调用不会触发发送到应用服务器的上行消息。 | 在您的服务器逻辑中实现此功能。例如,一些开发者会实现自己的 HTTP/gRPC 端点,并直接调用该端点以从其客户端向应用服务器发送消息。如需查看使用 gRPC 的上行消息传递实现示例,请参阅 gRPC 快速入门。 |
Batch Send API | https://fcm.googleapis.com/batch | 向端点发送的请求将在 2024 年 6 月 21 日后开始失败。 | 迁移到标准 HTTP v1 API 发送方法,该方法支持 HTTP/2 进行多路复用。 |
Firebase Admin SDK API
API 名称 | API 语言 | 对用户的影响 | 需采取行动 |
---|---|---|---|
sendToDevice()
|
Node.js | 该 API 将在 2024 年 6 月 21 日之后停止运行,因为它会调用旧版 HTTP send API。 | 使用 send() 方法。 |
sendToDeviceGroup()
|
Node.js | 该 API 将在 2024 年 6 月 21 日之后停止运行,因为它会调用旧版 HTTP send API。 | 使用 send() 方法。 |
sendToTopic()
|
Node.js | 该 API 将在 2024 年 6 月 21 日之后停止运行,因为它会调用旧版 HTTP send API。 | 使用 send() 方法。 |
sendToCondition()
|
Node.js | 该 API 将在 2024 年 6 月 21 日之后停止运行,因为它会调用旧版 HTTP send API。 | 使用 send() 方法。 |
sendAll()/sendAllAsync()/send_all()/sendMulticast()/SendMulticastAsync()/send_multicast()
|
Node.js、Java、Python、Go、C# | 这些 API 在 2024 年 6 月 21 日之后将会停止运行,因为它们会调用 Batch Send API。 | 请升级到最新的 Firebase Admin SDK 并改用新的 API:sendEach()/
sendEachAsync()/send_each()/sendEachForMulticast()/sendEachForMulticastAsync()/
send_each_for_multicast() 。
请注意,新 API 不再调用已弃用的批量发送 API,因此,与旧 API 相比,新 API 会创建更多并发 HTTP 连接。 |
客户端 SDK
SDK 版本 | 对用户的影响 | 需采取行动 |
---|---|---|
GCM SDK(已于 2018 年弃用) | 2024 年 6 月 21 日之后,使用 GCM SDK 的应用将无法注册令牌,也无法接收来自 FCM 的消息。 | 将您的 Android SDK 升级到最新的 Firebase SDK(如果尚未升级)。 |
JS SDK 版本低于 7.0.0(2019 年版本 7.0.0 发生了重大变化) | 2024 年 6 月 21 日之后,使用旧版 JS SDK 的 Web 应用将无法再注册令牌。 | 将您的 Firebase Web SDK 升级到最新版本。 |
在 2024 年 6 月之前,我的服务会降级吗?
不会。您可以在 12 个月(2023 年 6 月 20 日 - 2024 年 6 月 21 日)内从旧 API 迁移到新 API,在此期间,服务不会降级。我们强烈建议您尽早规划迁移,以免在 2024 年 6 月受到 API 停用的影响。
2024 年 6 月之后,使用上面列出的 API/SDK 时,您可能会发现错误有所增加或缺少功能(如需了解详情,请参阅后续的常见问题解答)。
弃用的 API 将如何以及何时停用?
FCM 将于 2024 年 7 月 22 日前后逐步停用已废弃的 API。在此日期之后,已废弃的服务将进入“闪烁”阶段,越来越多的请求将返回错误响应。在逐步关停期间,以下行为和错误响应会随着时间的推移而增加频率:
类别 | 要执行的操作 |
---|---|
旧版 HTTP 协议 | 请求被拒绝并显示 HTTP 代码 301。 |
旧版 XMPP 协议 | 请求被拒绝并显示错误代码 302。 |
FCM 上行 | FCM 后端以静默方式丢弃的消息。 |
Batch Send API | 请求被拒绝,错误代码为 UNIMPLEMENTED,并显示错误消息“The API is invalid”。 |
GCM SDK - 注册令牌 | 请求被拒绝并显示 HTTP 代码 301。 |
GCM SDK - 发送消息 | 请求被拒绝,错误代码为 400,错误消息为“V3 令牌已弃用。” |
JS SDK 版本低于 7.0.0 | 请求被拒绝并显示 HTTP 代码 501。 |
使用服务器密钥访问实例 ID 和设备群组管理 API | 请求被拒绝并显示 HTTP 代码 401。 |
OAuth 2.0 令牌和服务器密钥有何区别?
OAuth 2.0 令牌是源自服务账号的短期令牌。它是 Google 的标准身份验证模型,比静态服务器密钥更安全。
如需有关使用 Google Auth 库获取令牌的指南,请参阅使用凭据来创建访问令牌。
请注意,使用 OAuth 2.0 令牌向不同端点发送请求时,请求标头会有所不同。
- HTTP v1 API:
Authorization: Bearer $oauth_token
- Instance ID server API 和 Device group Management API:
Authorization: Bearer $oauth_token
access_token_auth: true
我可以一次性将所有请求迁移到新的 API 吗?
我们建议您循序渐进地将流量迁移至新 API。如果您预计每分钟要发送超过 60 万条消息,请与 Firebase 支持团队联系,了解如何增加配额或获得有关如何分散流量的建议。
向主题/设备组发送消息时,HTTP v1 API 与旧版 API 有何区别?
主题:使用 v1 API 时,无需向主题目标添加“/topics/”前缀。
设备组:您可以在 HTTP v1 API 中将组令牌用作令牌目标。但是,HTTP v1 API 不会在响应中返回成功/失败计数。我们建议您使用 FCM 主题或自行管理设备组。
HTTP v1 API 是否支持在一个请求中向多个令牌发送消息?
不支持。此功能在旧版 HTTP API 中称为“多播”,HTTP v1 API 不支持该功能,而 HTTP v1 API 的可伸缩性设计得更好。
对于端到端延迟时间至关重要或扇出总大小较小(少于 100 万)的用例,Google 推荐使用 HTTP v1 API 发送多个单独的请求。通过 HTTP/2 实现的 HTTP v1 API 对 99.9% 的多播请求(发送不到 100 个令牌)的效果类似。对于离群值用例(发送 1000 个令牌),它最多可获得三分之一的吞吐量速率,因此需要额外的并发性来优化这种非典型用例。与使用旧版多播相比,使用 HTTP v1 API 的用户能够体验到更高的可靠性和可用性。
对于优先考虑吞吐量和出站流量带宽或者总扇出大小较大(超过 100 万)的使用场景,Google 建议使用主题消息传递。虽然主题消息传递需要一次性操作才能让接收者订阅某个主题,但可以为每个项目提供高达 10,000 QPS 的扇出率,并且对主题大小没有最大限制。
哪些版本的 Firebase Admin SDK 提供了新 API?
平台 | Firebase Admin SDK 版本 |
---|---|
Node.js | >=11.7.0 |
Python | >=6.2.0 |
Java | >=9.2.0 |
Go | >=4.12.0 |
.NET | >=2.4.0 |
批量发送 API 和 HTTP v1 API 有何区别?
FCM Batch Send API 使用与 HTTP v1 API 相同的消息格式和身份验证机制。但是,它使用不同的端点。如果您想提高效率,应考虑使用 HTTP/2 通过同一 HTTP 连接向 HTTP v1 API 发送多个请求。
如果我无法访问项目,该怎么办?
请与 Google Cloud 支持团队联系以获取帮助。
新项目能否启用旧版 Cloud Messaging API?
不能。自 2024 年 5 月 20 日起,新项目将不能再启用旧版 API。
何时可以停用旧版 Cloud Messaging API?
确认已完全迁移到 HTTP v1 API 后,您可以停用旧版 Cloud Messaging API(如果该 API 已停用,页面可能会无法加载)。
FCM 配额和限制
我需要在 2 分钟内通知大量客户。
很遗憾,我们不支持此用例。您必须将流量分配在 5 分钟内。
我的应用会通知用户相关活动。消息必须立即送达,以支持我的商业模式。我可以获得更多配额吗?
很抱歉,我们无法出于此原因批准配额增加。您必须将流量分配在 5 分钟内。
我的消息是关于预定活动的,我需要在每小时的整点发送所有流量。
我们建议您至少在活动开始前 5 分钟开始发送通知。
我的配额申请需要多长时间才能得到处理?
这在一定程度上取决于您使用 FCM 的方式。 无论如何,您应该会在几个工作日内收到答复。在某些情况下,我们可能会就您使用 FCM 的情况和各种情况进行一些沟通,这可能会延长流程。如果满足所有要求,大多数请求都会在 2 周内得到处理。
如何监控配额使用情况?
请参阅 Google Cloud 指南,了解如何绘制和监控配额指标。
429 对我/我的业务来说很难处理。我是否可以申请豁免或获得更多配额,以避免遇到 429 错误?
虽然我们理解配额限制可能具有挑战性,但配额对于保持服务的可靠性至关重要,因此我们不能给予豁免待遇。
我可以为临时活动申请更多配额吗?
您可以申请更多配额以支持持续时间长达 1 个月的某项活动。请至少提前 1 个月提交请求,并明确说明活动的开始和结束时间,FCM 将尽量满足您的请求(不能保证一定会增加配额)。在活动结束日期之后,这些增加的配额将会还原。
我当前的配额是否会发生变化?
尽管 Google 不会轻易这样做,但为了保护系统的完整性,配额可能会根据需要进行更改。如果可能,Google 会提前通知您此类变化。
Cloud Storage for Firebase
Cloud Storage for Firebase:为什么我无法使用 Cloud Storage for Firebase?
Cloud Storage for Firebase 会在 App Engine 免费层级中创建默认存储分区。这样您可以快速启动并运行 Firebase 和 Cloud Storage for Firebase,而不必输入信用卡信息或启用 Cloud Billing 账号。您还可以轻松在 Firebase 和 Google Cloud 项目之间共享数据。
但存在两种已知情况,在这些情况下,无法创建此存储分区,造成您无法使用 Cloud Storage for Firebase:
- 从 Google Cloud 导入的包含 App Engine 主/从 Datastore 应用的项目。
-
从 Google Cloud 导入的包含网域前缀项目的项目。例如:
domain.com:project-1234
。
这些问题当前没有变通方案,我们建议您在 Firebase 控制台中创建新项目,并在该项目中启用 Cloud Storage for Firebase。
Cloud Storage for Firebase:在使用 Cloud Storage for Firebase API 时,为什么我会收到关于服务账号权限和服务账号操作失败的错误代码 412 响应?
您之所以收到 412 错误代码,可能是因为您的项目未启用 Cloud Storage for Firebase API,或者必要的服务账号缺少必需的权限。
有关详情,请参阅相关的常见问题解答。
Cloud Storage for Firebase:在采用 Spark 方案的项目中,我可以存储可执行文件吗?
对于采用免费 (Spark) 方案的项目,Firebase 会阻止 Cloud Storage for Firebase 和 Firebase Hosting 上传和托管适用于 Windows、Android 和 Apple 的特定可执行文件类型。此政策旨在防止我们的平台上出现滥用行为。
对于在 2023 年 9 月 28 日或之后创建的所有 Spark 项目,系统会阻止传送、托管和上传不允许的文件。如果现有 Spark 项目包含在该日期之前上传的文件,则此类文件仍然可以上传和托管。
此限制适用于采用 Spark 方案的项目。采用随用随付 (Blaze) 方案的项目不会受影响。
以下文件类型不能托管在 Firebase Hosting 和 Cloud Storage for Firebase 上:
- 扩展名为
.exe
、.dll
和.bat
的 Windows 文件 - 扩展名为
.apk
的 Android 文件 - 扩展名为
.ipa
的 Apple 平台文件
我需要做什么?
如果您仍想在 2023 年 9 月 28 日之后托管这些文件类型:
- 对于 Hosting:请先升级为 Blaze 方案,然后才能通过
firebase deploy
命令将这些文件类型部署到 Firebase Hosting。 - 对于 Storage:升级为 Blaze 方案,以使用 GCS CLI、Firebase 控制台或 Google Cloud 控制台将这些文件类型上传到您选择的存储分区。
使用 Firebase 工具管理 Firebase Hosting 和 Cloud Storage 资源。
- 如需管理 Firebase Hosting 中的资源,请根据本指南使用 Firebase 控制台删除发布版本。
- 如需管理“Cloud Storage”中的资源,请前往项目中的存储产品页面。
- 在文件标签页上,在文件夹层次结构中找到要删除的不允许的文件,然后使用面板左侧文件名旁边的复选框将其选中。
- 点击删除,然后确认文件已被删除。
如需详细了解如何使用 Firebase 工具管理 Hosting 资源以及如何使用客户端库管理 Cloud Storage for Firebase 存储桶,请参阅我们的文档。
Cloud Storage for Firebase:为什么我发现上传和下载操作次数意外增加?
之前,向 Cloud Storage for Firebase API 发出的下载和上传请求未得到正确统计。我们已采取措施解决此问题,自 2023 年 9 月 15 日起生效。
对于 Blaze 用户,上传和下载操作将开始计入您的每月账单。对于 Spark 用户,他们将开始计入您的每月免费限额。
我们建议您监控用量页面,了解是否有用量增加可能计入您的限额。
Cloud Storage for Firebase:为什么我会看到有新服务账号 ID 与我的使用 Cloud Storage for Firebase 的 Firebase 项目相关联?
Firebase 使用服务账号来运行和管理服务,而无需共享用户凭据。创建 Firebase 项目时,您可能会发现项目中已经有许多服务账号。
Cloud Storage for Firebase 使用的服务账号的作用域限定为您的项目,且该服务账号名为 service-PROJECT_NUMBER@gcp-sa-firebasestorage.iam.gserviceaccount.com
。
如果您在 2022 年 9 月 19 日之前使用 Cloud Storage for Firebase,则可能会在之前关联的 Cloud Storage 存储分区中看到另一个名为 [email protected]
的服务账号。从 2022 年 9 月 19 日开始,此服务账号已不再受支持。
您可以在 Firebase 控制台的“服务账号”标签页中查看与项目关联的所有服务账号。
添加此新服务账号
如果您之前移除了服务账号,或者项目中不存在服务账号,则可以执行以下任一操作来添加账号。
- (推荐)自动:使用 AddFirebase REST 端点将您的存储桶重新导入 Firebase。您只需要调用此端点一次,不需要为每个关联的存储桶分别调用该端点。
-
手动:按照创建和管理服务账号中的步骤操作。参照该指南,添加具有 IAM 角色
Cloud Storage for Firebase Service Agent
且名为service-PROJECT_NUMBER@gcp-sa-firebasestorage.iam.gserviceaccount.com
的服务账号。
移除新的服务账号
我们强烈建议您不要移除该服务账号,因为这可能会阻止您的应用访问 Cloud Storage 存储分区。如需从项目中移除服务账号,请按照停用服务账号中的说明操作。
Crashlytics
如需获取实用提示和更多常见问题解答,请访问 Crashlytics 问题排查和常见问题解答页面。
Dynamic Links
Dynamic Links:Firebase 对 Dynamic Links 的未来计划是什么?
请参阅 Dynamic Links 常见问题解答。
Dynamic Links:为什么我的 Android 应用会访问每个动态链接两次?
getInvitation
API 会清除保存的动态链接,以免访问其两次。请务必在每个深层链接 Activity 中调用此 API 并将 autoLaunchDeepLink
参数设为 false
,以便在主 Activity 以外触发 Activity 时将相应链接清除。
Firebase Local Emulator Suite
为什么 Emulator Suite 日志会显示以“Multiple projectIds are not recommended in single project mode”(在单项目模式下不建议使用多个项目 ID)开头的错误?
此消息表示 Emulator Suite 检测到它可能正在使用不同的项目 ID 运行某个特定的产品模拟器。这可能表示配置错误,并且在模拟器尝试相互通信时以及在您尝试通过代码与模拟器交互时,可能会导致问题。如果项目 ID 不匹配,通常似乎缺少数据,因为存储在模拟器中的数据与项目 ID 相关联,并且互操作性取决于匹配的项目 ID。
这一直让开发者感到困惑。因此,默认情况下,Local Emulator Suite 现在仅允许使用单个项目 ID 运行,除非您在 firebase.json
配置文件中另行指定设置。如果模拟器检测到多个项目 ID,则会记录警告,并可能会抛出严重错误。
在以下情况中检查项目 ID 声明是否存在不一致的现象:
-
在命令行中设置的默认项目。默认情况下,项目 ID 会在启动时从使用
firebase init
或firebase use
选择的项目中获取。如需查看项目列表(以及查看已选择的项目),请使用firebase projects:list
。 -
单元测试。项目 ID 通常在对规则单元测试库方法
initializeTestEnvironment
或initializeTestApp
的调用中指定。其他测试代码可以使用initializeApp(config)
进行初始化。 -
命令行
--project
标志。传递 Firebase CLI--project
标志会替换默认项目。您需要确保该标志的值与单元测试和应用初始化中的项目 ID 一致。
特定于平台的检查位置:
Web | JavaScript firebaseConfig 对象中的 projectId 属性,在 initializeApp 中使用。 |
Android | google-services.json 配置文件中的 project_id 属性。 |
Apple 平台 | GoogleService-Info.plist 配置文件中的 PROJECT_ID 属性。 |
如需停用单项目模式,请使用 singleProjectMode
键更新 firebase.json
:
{ "firestore": { ... }, "functions": { ... }, "hosting": { ... }, "emulators": { "singleProjectMode": false, "auth": { "port": 9099 }, "functions": { "port": 5001 }, ... } }
Hosting
Hosting:在采用 Spark 方案的项目上,我可以存储可执行文件吗?
对于采用免费 (Spark) 方案的项目,Firebase 会阻止 Cloud Storage for Firebase 和 Firebase Hosting 上传和托管某些 Windows、Android 和 Apple 可执行文件类型。此政策旨在防止我们的平台上出现滥用行为。
对于在 2023 年 9 月 28 日或之后创建的所有 Spark 项目,系统会阻止传送、托管和上传不允许的文件。如果现有 Spark 项目包含在该日期之前上传的文件,则此类文件仍然可以上传和托管。
此限制适用于采用 Spark 方案的项目。采用随用随付 (Blaze) 方案的项目不会受影响。
以下文件类型不能托管在 Firebase Hosting 和 Cloud Storage for Firebase 上:
- 扩展名为
.exe
、.dll
和.bat
的 Windows 文件 - 扩展名为
.apk
的 Android 文件 - 扩展名为
.ipa
的 Apple 平台文件
我需要做什么?
如果您仍想在 2023 年 9 月 28 日之后托管这些文件类型:
- 对于 Hosting:请先升级为 Blaze 方案,然后才能通过
firebase deploy
命令将这些文件类型部署到 Firebase Hosting。 - 对于 Storage:升级为 Blaze 方案,以使用 GCS CLI、Firebase 控制台或 Google Cloud 控制台将这些文件类型上传到您选择的存储分区。
使用 Firebase 工具管理 Firebase Hosting 和 Cloud Storage 资源。
- 如需管理 Firebase Hosting 中的资源,请根据本指南使用 Firebase 控制台删除发布版本。
- 如需管理 Cloud Storage 中的资源,请进入项目中的 Storage 产品页面。
- 在文件标签页上,在文件夹层次结构中找到要删除的不允许的文件,然后使用面板左侧文件名旁边的复选框将其选中。
- 点击删除,然后确认文件已被删除。
如需详细了解如何使用 Firebase 工具管理 Hosting 资源以及如何使用客户端库管理 Cloud Storage for Firebase 存储桶,请参阅我们的文档。
Hosting:为什么 Firebase 控制台中的 Hosting 版本历史记录表显示的文件数超过了我本地项目实际拥有的文件数量?
Firebase 会自动添加包含有关 Hosting 网站的元数据的额外文件,并且这些文件包含在该版本的文件总数中。
Hosting:我可以将多大的文件部署到 Firebase Hosting?
Hosting 针对单独文件设置的大小上限为 2 GB。
建议使用 Cloud Storage 存储较大的文件,该服务针对单个对象的大小上限可达 TB 级。
Hosting:每个 Firebase 项目可以有多少个 Hosting 网站?
Firebase Hosting 多网站功能支持每个项目最多 36 个网站。
Performance Monitoring
如需获取实用提示和更多常见问题解答,请访问 Performance Monitoring 问题排查和常见问题解答页面。
Performance Monitoring:我可以创建多少个自定义网址格式?
您可以为每个应用创建最多 400 个自定义网址格式,并为该应用的每个网域创建最多 100 个自定义网址格式。
Performance Monitoring:为什么我看不到实时显示的性能数据?
如需查看实时性能数据,请确保您的应用使用与实时数据处理兼容的 Performance Monitoring SDK 版本。
- iOS - v7.3.0 或更高版本
- tvOS - v8.9.0 或更高版本
- Android - v19.0.10 或更高版本(或 Firebase Android BoM v26.1.0 或更高版本)
- Web — v7.14.0 或更高版本
请注意,我们始终建议使用最新版 SDK,但上文列出的任何版本都支持 Performance Monitoring 以近乎实时的方式处理您的数据。
Realtime Database
Realtime Database:为什么我的 Realtime Database 在 2016 年 9 月至 2017 年 3 月之间报告带宽低于平均水平?
对于带宽计算,我们通常囊括了 SSL 加密开销(基于 OSI 模型的第 5 层)。然而,在 2016 年 9 月,我们引入了一个导致带宽报告忽略加密开销的错误。这可能会人为造成报告的带宽和账单有几个月偏低。
我们在 2017 年 3 月底发布了一个针对该错误的修补程序,使带宽报告和计费恢复到正常水平。
Realtime Database:Realtime Database 的缩放限制是什么?
每个 Realtime Database 实例对每秒写入操作数有限制。对于较小的写入操作,此限值约为每秒 1000 次写入操作。如果您已接近此限值, 使用多路径更新的批处理操作可以帮助您获得更高的吞吐量。
此外,每个数据库实例都有数据库并发连接数上限。 我们的默认限值对于大多数应用都已足够。如果您构建的应用需要更大规模,您可能需要将应用在多个数据库实例之间进行分片,以增加规模。您也可以考虑用 Cloud Firestore 作为替代数据库。
Realtime Database:如果超出了 Realtime Database 用量限额,该怎么办?
如果您在 Firebase 控制台中收到了有关您已超出 Realtime Database 使用限制的电子邮件提醒或通知,可以根据已超出的使用量限制情况采用相应对策。如需查看您的 Realtime Database 用量,请前往 Firebase 控制台中的 Realtime Database 用量信息中心。
如果超出了下载限制,则可以升级 Firebase 定价方案,或等到下一个结算周期开始且下载限制重置后再下载。要减少下载的数据量,请尝试以下步骤:
- 添加查询以限制您的监听操作返回的数据。
- 检查未利用索引的查询。
- 使用仅下载数据更新的监听器。例如,使用
on()
,而不是once()
。 - 使用安全规则阻止未经授权的下载。
如果您已超出存储限制,请升级您的定价方案以避免服务中断。要减少数据库中的数据量,请尝试以下步骤:
- 运行定期清理作业。
- 减少数据库中的重复数据。
请注意,您可能需要过一段时间才会看到数据删除操作反映在存储配额中。
如果超出数据库并发连接数的限制,请升级您的方案以避免服务中断。要管理数据库的并发连接数,请尝试让用户通过 REST API 进行连接(如果他们不需要实时连接)。
Remote Config
Remote Config:提取的值为什么不能更改应用的行为和外观?
除非您使用 fetchAndActivate()
提取值,否则这些值会存储在本地但不激活。要激活提取的值以使其生效,请调用 activate
。此设计可让您控制应用的行为和外观发生改变的时间,因为您可以选择何时调用 activate
。在您调用 activate
后,您的应用源代码将确定何时使用更新后的参数值。
例如,您可以先提取值,然后在下次用户启动应用时将其激活,这样就无需因应用等待从服务提取值而延长应用启动时间。之后,当应用使用更新后的参数值时,应用的行为和外观就会发生改变。
如需详细了解 Remote Config API 和使用模式,请参阅 Remote Config API 概览。
Remote Config:我在开发应用时发出了很多提取请求。应用在发送提取请求后,为什么有时不能从服务获取最新值?
在应用开发期间,您可能需要非常频繁地(每小时很多次)提取和激活配置,从而可以在开发和测试应用时快速迭代。为了让不超过 10 名开发者对项目进行快速迭代,您可以暂时在应用中设置一个最小提取间隔 (setMinimumFetchIntervalInSeconds
) 较短的 FirebaseRemoteConfigSettings
对象。
Remote Config:我的应用发送提取请求后,Remote Config 服务会以多快的速度返回所提取的值?
设备一般会在一秒内收到所提取的值,甚至常常以毫秒级延迟收到值。Remote Config 服务会以毫秒级速度处理提取请求,但完成提取请求所需的时间取决于设备的网速以及设备使用的网络连接的延迟。
如果您的目标是让提取的值尽快在您的应用中生效,同时不产生令人不悦的用户体验,请考虑在每次该应用执行全屏刷新时添加对 fetchAndActivate
的调用。
Test Lab
如需获取实用提示和常见问题解答,请访问 Test Lab 问题排查页面。
Firebase 用户细分存储
什么是 Firebase 用户细分存储?
Firebase 用户细分存储功能可用来存储 Firebase 安装 ID 以及相关属性和细分信息,以及您创建的受众群体名单,以便向使用这些 ID 及相关信息的其他 Firebase 服务(例如 Crashlytics、FCM、Remote Config 个性化等)提供定位信息。