我正在考虑使用Firebase作为MBaaS,但是我找不到任何可靠的解决方案来解决以下问题:

我想建立两个独立的Firebase环境,一个用于开发,一个用于生产,但我不想手动复制功能(例如。开发和生产环境之间的远程配置设置、通知规则等)。

有什么我可以依赖的工具或方法吗?从头开始设置远程配置或通知规则可能是一项艰巨的任务,风险太大。

有什么建议吗?有没有比拥有两个独立环境更好的方法呢?

在你发表另一个解释如何建立独立Firebase帐户的问题答案之前:这不是问题,再读一遍。问题是:如何在独立的开发帐户和prod帐户之间转移更改或任何比在它们之间手动复制更好的解决方案。


当前回答

我正在根据我刚刚找到的信息更新这个答案。

步骤1

在firebase.google.com中,创建多个环境(即;Dev, staging, prod)


mysite-dev

mysite-staging

mysite-prod


步骤2

a.移动到你想作为默认值的直接位置(即;dev)

b.执行firebase deploy命令

c.部署完成后,执行firebase use——add命令

d.会出现一个选项,让你从当前拥有的不同项目中进行选择。

滚动到您想要添加的项目:mysite-staging,并选择它。

e.然后您将被要求为该项目提供一个别名。输入暂存。

再次为prod和dev运行a-e项,这样每个环境都将有一个别名


了解你所处的环境

使用firebase运行 默认(mysite-dev)

* dev (mysite-dev)

分期(mysite-staging)

刺激(mysite-dev)

(其中一个环境的左边会有一个星号。这就是你现在的处境。它也将以蓝色突出显示)


在环境之间切换

运行firebase使用staging或firebase使用prodiver在它们之间移动。

进入所需的环境后,运行firebase deploy,项目将部署到该环境中。

这里有一些有用的链接…

CLI参考

部署到多个环境

希望这能有所帮助。

其他回答

如果您正在使用firebase-tools,有一个命令firebase use可以让您设置用于firebase部署的项目

Firebase use -add会弹出一个项目列表,选择一个,它会问你一个别名。从那里你可以使用firebase别名和firebase部署将推送到该项目。

在我个人使用中,我在Firebase控制台中有my-app和my-app-dev两个项目。

我目前没有使用Firebase,但考虑到它像你一样。看起来要走的路是在控制台上创建一个完全独立的项目。在旧的Firebase网站上有一篇博文推荐了这个功能,不过现在看起来要被删除了。https://web.archive.org/web/20160310115701/https://www.firebase.com/blog/2015-10-29-managing-development-environments.html

同样的讨论建议: https://groups.google.com/forum/ !味精/ firebase-talk / L7ajIJoHPcA / 7 dsnutdlyryj

在firebase上使用Dev和生产环境创建Tow项目 从thre下载json文件

并设置SDK: https://firebase.google.com/docs/android/setup或Crashlytics: https://firebase.google.com/docs/crashlytics/get-started?platform=android

首先,放置各自的google_services。json为每个buildType在以下位置:

app/src/debug/google_services.json
app/src/test/google_services.json
app/google_services.json

注:根app/google_services。这个文件应该根据构建变量在根json文件中复制json代码

现在,让我们在你的:app的构建中创建一些gradle任务。Gradle自动移动适当的google_services。Json到app/google_services.json

复制到app/Gradle文件中

task switchToDebug(type: Copy) {
description = 'Switches to DEBUG google-services.json'
from "src/debug"
include "google-services.json"
into "."
}

task switchToRelease(type: Copy) {
description = 'Switches to RELEASE google-services.json'
from "src/release"
include "google-services.json"
into "."
}

很好,但是在构建应用程序之前手动运行这些任务是很麻烦的。我们希望在:assembleDebug或:assemblerrelease运行之前的某个时间运行上述适当的复制任务。让我们看看当:assemblerrelease运行时会发生什么:在/gradlew文件中复制这个

Zaks-MBP:my_awesome_application zak$ ./gradlew assembleRelease
Parallel execution is an incubating feature.
.... (other tasks)
:app:processReleaseGoogleServices
....
:app:assembleRelease

注意:app:processReleaseGoogleServices任务。该任务负责处理根google_services。json文件。我们需要正确的google_services。Json被处理,所以我们必须立即运行我们的复制任务之前。 将此添加到build.gradle中。注意afterEvaluate封闭。

复制到app/Gradle文件中

afterEvaluate {
processDebugGoogleServices.dependsOn switchToDebug
processReleaseGoogleServices.dependsOn switchToRelease
}

现在,无论何时:app:processReleaseGoogleServices被调用,我们新定义的:app:switchToRelease都会被预先调用。同样的逻辑用于调试buildType。您可以运行:app: assemblerrelease和发布版本google_services。Json会自动复制到你的应用模块的根文件夹。

您将需要管理不同的构建类型

遵循这个

首先,在Firebase控制台创建一个新项目,名称id为YOURAPPNAME-DEV 点击“添加android应用程序”按钮,创建一个新的应用程序。例如将其命名为com.yourapp.debug。新的谷歌服务。Json文件将 自动下载 在你的项目src目录下创建名为“debug”的新目录并复制新的google-services。Json文件 在模块级别构建中。Gradle添加这个 调试{ applicationIdSuffix“.debug” }

现在,当你构建一个调试构建谷歌服务。Json从“调试”文件夹将被使用,当你将构建在发布模式谷歌服务。将考虑来自模块根目录的Json。

我的做法是:

我在firebase上有2个项目-一个用于DEV,另一个用于PROD 在本地,我的应用程序也有两个分支——一个叫DEV,另一个叫PROD 在我的DEV分支中,我总是有DEV firebase项目和PROD的JSON文件

这样我就不需要维护我的json了。