Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 如何在颤振中设置不同的火基环境_Firebase_Flutter_Environment_Test Environments - Fatal编程技术网

Firebase 如何在颤振中设置不同的火基环境

Firebase 如何在颤振中设置不同的火基环境,firebase,flutter,environment,test-environments,Firebase,Flutter,Environment,Test Environments,我正试图找出如何在一个flutter项目中设置不同的firebase环境 我知道如何在firebase中实现这一点,我创建了两个项目,一个用于生产,一个用于测试。然后,在iOS或Android项目中,我可以使用不同的方法使用单独的GoogleServices.json或GoogleServices Info.plist文件在这两个环境之间切换 在颤振中,我找到了如何分离环境的描述,但它只解释了如何在颤振代码中区分环境 我如何让这个环境在编译时更改iOS和Android的构建?甚至在构建时只允许文

我正试图找出如何在一个flutter项目中设置不同的firebase环境

我知道如何在firebase中实现这一点,我创建了两个项目,一个用于生产,一个用于测试。然后,在iOS或Android项目中,我可以使用不同的方法使用单独的
GoogleServices.json
GoogleServices Info.plist
文件在这两个环境之间切换

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


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

Salvatore Giordano写了一篇博客文章,详细描述了如何实现这一点:

颤振接受一个参数
--flavor=
,该参数允许您选择不同的构建风格。在安卓系统中,选择不同的构建风格,这是可以预期的。IOS是一个小把戏,因为每种口味都需要一个方案,而且还需要
Release-
形式的构建配置

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


现在的挑战是让Dart代码也意识到它的味道,而这篇博文并没有提供很好的解决方案。这表明可以使用使用不同入口点的标准方法,但正确的入口点必须由调用应用程序的人员手动匹配到正确的风格。

我写了一篇文章,介绍了如何使用flavors和平台通道在dart代码中对Firebase配置和运行时配置执行此操作

Flatter口味与Android口味完美结合。对于iOS,您需要为每种风格创建Xcode方案,并将它们链接到构建配置


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

特别是对于Firebase env config,您可以使用CodeMagic,其中解释了如何使用build env变量设置
plist
文件

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

2020年5月12日更新

从Flatter 1.17开始,您实际上可以在
flatter run
flatter build
命令中使用编译时变量和
-dart define
参数


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

解决方案将构建风格,plist实现将在部署TestFlight+时将您锁定到构建中,因为它们很混乱

这里有一个例子:(您也可以使用资产)。


随着Flatter for Web向稳定通道的发布,我将其整合起来。

嘿,你不需要这样做。您可以在运行时加载不同的文件。看看我的答案。构建风格很糟糕,例如QA将如何测试TestFlight构建以及许多其他问题。付费链接并没有真正的用处
// 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)