24

我正在尝试弄清楚如何在颤振项目中设置不同的 firebase 环境。

我了解如何在 firebase 中执行此操作,我创建了两个项目,一个用于生产,一个用于测试。google-services.json然后,在 iOS 或 Android 项目中,我可以使用各种方法使用单独的或GoogleServices-Info.plist文件在这两个环境之间切换。

在 Flutter 中,我找到关于如何分离环境的描述,但它只解释了如何在颤振代码中区分环境。

如何让这个环境在编译时更改 iOS 和 Android 的构建?甚至在构建时允许文件复制钩子就足够了。

4

5 回答 5

3

您可以使用 FirebaseApp.configure 切换帐户。您可以提供自己的解决方案或秘密开发面板来在它们之间切换。

当您为 TestFlight 部署时,解决方案将构建风味,而 plist 实现会将您锁定在构建中+它们很混乱。

这是一个示例:(您也可以使用资产。)

// Load a named file.
let filePath = Bundle.main.path(forResource: "MyGoogleService", ofType: "plist")
guard let fileopts = FirebaseOptions(contentsOfFile: filePath!)
  else { assert(false, "Couldn't load config file") }
FirebaseApp.configure(options: fileopts)
于 2020-07-24T10:20:00.957 回答
1

Salvatore Giordano 写了一篇博文,详细描述了如何实现这一目标:

https://medium.com/@salvatoregiordanoo/flavoring-flutter-392aaa875f36

Flutter 接受一个--flavor=<flavor>允许您选择不同构建风格的参数。在 Android 中,这可以按预期工作,选择不同的构建风格。IOS 有点小技巧,因为每种风格都需要一个方案,并且Release-<flavor>还需要 形式的构建配置。

一旦这些部件就位,就可以使用它们来选择 Firebase 配置,就像在任何 iOS 或 Android 项目中一样。

挑战在于让 Dart 代码也意识到这种风格,而博客文章没有为此提供好的解决方案。它建议可以使用使用不同入口点的标准方法,但正确的入口点必须由调用应用程序的人手动匹配正确的风格。

于 2018-06-15T18:20:51.723 回答
1

我写了一篇关于如何使用风味和平台通道在 dart 代码中为 Firebase 配置和运行时配置执行此操作的文章。

https://medium.com/@matt.goodson.business/separating-build-environment-configurations-in-flutter-with-firebase-doing-it-the-right-way-c72c3ad3621f

Flutter 风格与 Android 风格非常无缝地工作。对于 iOS,您需要为每种风格创建 Xcode 方案并将它们链接到构建配置。

对于 dart 配置,您可以使用平台通道在运行时获取构建期间使用的风味。这使您可以在没有多个 main.dart 文件或传递目标参数的情况下配置应用程序。

于 2019-10-30T22:19:28.260 回答
0

随着 Flutter for Web 发布到稳定频道,我整理了针对来自多个构建平台(即 iOS、Android 和 Web)的多个 firebase 项目(例如 dev、staging、prod)的说明

于 2021-03-11T05:56:54.170 回答
0

具体到 Firebase 环境配置,您可以使用CodeMagic 中的这篇文章这篇文章plist,其中解释了如何使用构建环境变量设置文件。

如果你需要在你的 Dart 代码中有一组不同的值,比如一个选项,你可以使用这个包。它允许从控制台命令参数生成 Dart 类配置文件。

2020 年 12 月 5 日更新

从 Flutter 1.17 开始,您实际上可以使用带有--dart-define参数的编译时变量flutter runflutter build命令

这是一篇描述如何指定和使用它们的文章

于 2020-02-26T09:38:56.203 回答