如何在Android上使用相同的bundle ID设置多个Firebase项目?

如何在Android上使用相同的bundle ID设置多个Firebase项目?,android,firebase,Android,Firebase,我正在开发一款Android应用程序,它使用Firebase实现一些不同的功能。我目前正试图从一个Firebase项目扩展到3个,以表示开发、暂存和生产环境 由于我正在使用的另一个工具(RevenueCat)的限制,我的所有项目都需要使用相同的bundle ID。我注意到,在这个设置中,即使使用不同的google services.json文件,我也总是指向我最初的生产Firebase项目 我四处搜索,看到了一些关于需要在Android上添加SHA-1值以区分应用的事情。我已尝试将Google

我正在开发一款Android应用程序,它使用Firebase实现一些不同的功能。我目前正试图从一个Firebase项目扩展到3个,以表示开发、暂存和生产环境

由于我正在使用的另一个工具(RevenueCat)的限制,我的所有项目都需要使用相同的bundle ID。我注意到,在这个设置中,即使使用不同的
google services.json
文件,我也总是指向我最初的生产Firebase项目

我四处搜索,看到了一些关于需要在Android上添加SHA-1值以区分应用的事情。我已尝试将Google Play控制台中的应用程序签名密钥证书中的SHA-1添加到生产项目中,并将
/gradlew signingReport
输出中的SHA-1添加到临时项目中。不幸的是,仍然没有骰子


有没有人有过这种设置的经验或其他想法可以尝试?非常感谢

在一个项目中使用相同的bundleId/packageName拥有多个不同的应用程序是不可能的。不过,您可以对多个应用程序使用一个
googleservices.json
——您只需将多个应用程序添加到项目中即可。不过,这些应用程序的packageName/bundleId应该有所不同

对于您的案例来说,这是非常常见的-将应用程序拆分为几种风格,以具有appId后缀。例如
com.example.app.prod
com.example.app.stage
com.example.app.dev
-可以在
gradle.build
中为每种口味配置后缀。问题是,firebase项目中必须有不同的应用程序,或者每种口味都有不同的项目,这取决于您的需要。例如,当应用程序是同一项目的一部分时,它们将共享身份验证和数据库存储,但将具有单独的crashlitycs等。不同的项目将具有不同的一切

SHA-1有点不同——它旨在根据签名证书限制/启用/禁用API的使用。同一软件包名称可能有多个SHA-1。此外,SHA-1仅适用于Android应用程序

你可以做的是创建多个项目-每种口味一个,并在每个项目中以相同的软件包名称注册应用程序-你可以做到这一点!每个版本都必须在相应的文件夹中有自己的
google services.json
文件。

它可以很好地处理不同的包名


我从未用相同的packageName尝试过这种方法,我不知道可能存在的缺点,因此我认为您可能会面临一些问题。或者不是。

在大多数情况下,使用google-services.json的简单配置足以在应用程序中使用不同的Firebase环境。但正如我们所看到的,事情可能会很快变得复杂,根据需求,可能需要定制配置和初始化Firebase服务的方法。在这篇文章中,我试图总结实现这一目标的不同方法,并分享我的个人经验。我希望它对您有帮助,您也喜欢它。

在这种情况下,我只需要清除
app/build
文件夹。显然,Firebase配置在构建之间以某种方式“缓存”,因此清除它会强制它使用新配置


我刚刚添加了它作为构建过程中的一个步骤。在这一小改动之后,一切都按预期进行。

您能解释一下为什么需要使用完全相同的bundle ID进行调试/uat/prod吗?我没有使用RevenueCat的经验,但有什么限制。当然可以。RevenueCat主要作为Android/iOS上的本机支付和应用程序代码之间的抽象层。但是,应用内购买的设置方式都在本机商店中,商店要求您为应用指定单一捆绑ID(据我所知)。例如,我不能在Google Play控制台上将我的bundle ID指定为
com.example.app
/
com.example.app.dev
/
com.example.staging
。为什么不在RevenueCat中也创建三个应用程序呢?那么Firebase+RevenueCat中的每个环境都有一个应用程序?不幸的是,真相的来源是应用程序商店/谷歌游戏商店。所以我很确定这需要在每个应用程序中创建3个独立的应用程序,我觉得应该有比这更好的解决方案。谢谢你的回复。事实上,我之前遵循了您所设计的结构:每种口味都有不同的ID(
com.example.app.prod
com.example.app.stage
com.example.app.dev
),以及每种口味的独立Firebase项目。我有一个系统可以在构建时使用正确的
googleservices.json
。问题其实只是将其调整为单个应用程序ID。我的Android应用程序现在总是指向同一个Firebase项目,无论我使用哪个
google services.json