我正在尝试弄清楚如何在一个颤动的项目中设置不同的firebase环境。
我理解如何在firebase中执行此操作,我创建了两个项目,一个用于生产,一个用于测试。然后,在iOS或Android项目中,我可以使用各种方法使用单独的google-services.json
或GoogleServices-Info.plist
文件在这两种环境之间切换。
在flutter中,我找到了this如何分离环境的描述,但它只解释了如何区分颤振代码中的环境。
如何让这个环境改变iOS和Android在编译时构建的内容?仅仅在构建时允许文件复制挂钩就足够了。
答案 0 :(得分:2)
Salvatore Giordano撰写了一篇博客文章,详细描述了如何实现这一目标:
https://medium.com/@salvatoregiordanoo/flavoring-flutter-392aaa875f36
Flutter接受参数--flavor=<flavor>
,允许您选择不同的构建风格。在Android中,这可以按预期工作,选择不同的构建风格。 IOS是一个小问题因为每种风格都需要一个方案,并且还需要Release-<flavor>
形式的构建配置。
一旦这些部件到位,就可以使用它们来选择firebase配置,就像在任何iOS或Android项目中一样。
挑战在于让Dart代码也意识到这种风格,博客文章没有为此提供好的解决方案。它建议使用不同入口点的标准方法,但正确的入口点必须由调用应用程序的人手动匹配正确的味道。
答案 1 :(得分:1)
我写了一篇文章,介绍如何使用口味和平台渠道对Firebase配置以及dart代码中的运行时配置执行此操作。
Flutter风味与Android风味无缝衔接。对于iOS,您需要为每种口味创建Xcode方案并将其链接到构建配置。
对于dart配置,您可以使用平台通道来获取运行时构建期间使用的样式。这样一来,您无需配置多个main.dart文件或传递目标参数即可配置应用。
答案 2 :(得分:0)
特定于Firebase的环境配置,您可以使用CodeMagic中的this article和this article,其中介绍了如何使用构建环境变量来设置plist
文件。
如果您需要在Dart代码中包含一组不同的值,例如一个选项,则可以使用this package。它允许从控制台命令参数生成Dart类配置文件。
更新12/05/2020
从Flutter 1.17开始,您实际上可以在--dart-define
和flutter run
命令中使用带有flutter build
参数的编译时变量
Here is an article that describes how to specify and use them。
答案 3 :(得分:0)
您可以使用FirebaseApp.configure切换帐户。您可以提供自己的解决方案或秘密的开发人员面板以在它们之间进行切换。
当您为TestFlight部署时,这些解决方案将构建风味,而plist实现将您锁定在构建中,而且它们很杂乱。
下面是一个示例:(您也可以使用Assets。)
// 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)
答案 4 :(得分:0)
随着 Flutter for Web 发布到稳定频道,我将 instructions for targeting multiple firebase projects (e.g. dev, staging, prod) from multiple build platforms (i.e. iOS, Android, and Web) 放在一起。