如何在 Flutter 中设置不同的 firebase 环境

Posted

技术标签:

【中文标题】如何在 Flutter 中设置不同的 firebase 环境【英文标题】:How to setup different firebase environments in Flutter 【发布时间】:2018-10-25 18:12:31 【问题描述】:

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

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

在 Flutter 中我发现 this 描述了如何分离环境,但它只解释了如何区分 Flutter 代码中的环境。

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

【问题讨论】:

【参考方案1】:

您可以使用 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)

【讨论】:

您有使用 Dart 代码执行此操作的示例吗?我没有看到FirebaseOptions 可以选择contentsOfFile。我确实看到了传递单个属性的选项,但不是 json/plist 服务文件中的所有属性都被 Flutter 中的FirebaseOptions 接受。【参考方案2】:

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

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

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

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

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

【讨论】:

付费链接真的没用【参考方案3】:

我写了一篇关于如何在 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 文件或传递目标参数的情况下配置应用程序。

【讨论】:

嘿,你不需要这样做。您可以在运行时加载不同的文件。看我的回答。构建风格很糟糕,例如 QA 将如何测试 TestFlight 构建以及许多其他问题。【参考方案4】:

对于 Firebase 环境配置,您可以使用 CodeMagic 中的 this article 和 this article,这说明了如何使用构建环境变量设置 plist 文件。

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

2020 年 12 月 5 日更新

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

Here is an article that describes how to specify and use them。

【讨论】:

【参考方案5】:

随着 Flutter for Web 发布到稳定频道,我整理了instructions for targeting multiple firebase projects (e.g. dev, staging, prod) from multiple build platforms (i.e. iOS, Android, and Web)。

【讨论】:

以上是关于如何在 Flutter 中设置不同的 firebase 环境的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xcode 中设置 Flutter 构建选项

如何在 Flutter 中设置主屏幕的背景颜色?

如何在 Flutter 的 decimalPattern 中设置 maximumFractionDigits?

如何在flutter中设置用户时间提示通知

如何在 Flutter 中设置按钮飞溅效果的边界?

如何在 BLOC 的 Flutter 中的 BottomNavigationBar 中设置 currentIndex?