【发布时间】:2021-06-08 03:12:43
【问题描述】:
问题在于如何设置您的 Flutter 环境,以便您可以针对单独的 Firebase 实例(例如用于 dev、prod、staging ......)
【问题讨论】:
标签: firebase flutter flutter-web
问题在于如何设置您的 Flutter 环境,以便您可以针对单独的 Firebase 实例(例如用于 dev、prod、staging ......)
【问题讨论】:
标签: firebase flutter flutter-web
在此示例中,我有三个名为 dev、staging 和 prod 的 firebase 实例(也称为“firebase 项目”)。 p>
对于 iOS 和 Android,为了定位这些 firebase 实例,我使用 Flutter 风格:
> flutter run --flavor dev
> flutter run --flavor staging
> flutter run --flavor prod
对于 Web,为了定位这些 firebase 实例,我使用 firebase 部署目标:
> firebase use dev
> flutter build web
> firebase serve
> firebase use staging
> flutter build web
> firebase serve
> firebase use prod
> flutter build web
> firebase serve
CTL-C 停止本地网络服务器
对于 Web,为了定位这些 firebase 实例,我使用 firebase 部署目标:
> firebase use dev
> flutter build web
> firebase deploy
> firebase use staging
> flutter build web
> firebase deploy
> firebase use prod
> flutter build web
> firebase deploy
Flutter Flavors 的实现参见以下内容:
Flutter for Web 现在在 Flutter stable 频道上。确保您拥有当前版本的 Flutter:
> flutter channel stable
> flutter upgrade
在您的项目中配置 web 文件夹:
> flutter config --enable-web
> flutter create .
检查 Web 是否配置为 Flutter:
> flutter doctor
[✓] Flutter: is fully installed. (Channel stable, 1.27.0, on macOS 11.2.1 20D74 darwin-x64, locale en)
[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
[✓] Xcode - develop for iOS and macOS
[✓] Chrome - develop for the web
[✓] Android Studio (version 4.1)
[✓] IntelliJ IDEA Ultimate Edition (version 2020.3.2)
[✓] Connected device (3 available)
• No issues found!
同时检查设备:
> flutter devices
1 connected device:
Chrome (web) • chrome • web-javascript • Google Chrome 88.0.4324.150
列出您在输入 > firebase login 时有权访问的 firebase 项目。
> firebase projects:list
您可以通过输入以下命令为每个 Firebase 实例分配一个项目别名(在我的例子中是 dev、staging 和 prod):
> firebase use --add
? Which project do you want to add?
my-great-app
my-great-app-staging
my-great-app-development
它会询问您要为哪个 Firebase 实例添加别名:使用 箭头键 突出显示您的选择,然后按 Enter 选择它。
? Which project do you want to add? my-great-app
? What alias do you want to use for this project? (e.g. staging) prod
在这种情况下,我通过 firebase 实例 my-great-app 给了别名 prod。
要查看您可以使用 firebase use 在哪些 firebase 实例之间切换,只需输入:
> firebase use
一些 StackOverflow 答案告诉您将 Firebase 配置放入您的项目 web/index.html 文件中。这是没有必要的。而不是这样做,您只需从终端命令行使用 firebase use prod、firebase use staging、firebase use prod 在 firebase 配置之间切换,以使每个 firebase 实例“活动 ”。当您执行 flutter build web 时,构建过程会自动从 active firebase 实例中获取正确的 firebase 配置。
这种魔法是如何发生的? Click here 了解使用保留 URL 添加 SDK 的详细信息。
<body> 标记应如下所示,具体取决于您在 Flutter 应用中使用的 Firebase SDK:<body>
<!-- The core Firebase JS SDK is always required and must be listed first -->
<script src="/__/firebase/8.2.10/firebase-app.js"></script>
<!-- TODO: Add SDKs for Firebase products that you want to use
https://firebase.google.com/docs/web/setup#available-libraries -->
<script src="/__/firebase/8.2.10/firebase-analytics.js"></script>
<script src="/__/firebase/8.2.10/firebase-auth.js"></script>
<script src="/__/firebase/8.2.10/firebase-firestore.js"></script>
<script src="/__/firebase/8.2.10/firebase-storage.js"></script>
<!-- Initialize Firebase -->
<script src="/__/firebase/init.js"></script>
<!-- This script installs service_worker.js to provide PWA functionality to
application. For more information, see:
https://developers.google.com/web/fundamentals/primers/service-workers -->
<script>
if ('serviceWorker' in navigator) {
window.addEventListener('load', function () {
navigator.serviceWorker.register('flutter_service_worker.js?v=1367769473');
});
}
</script>
<script src="main.dart.js" type='application/javascript"></script>
【讨论】:
此 github 存储库包含指向设置说明的链接以及脚本,这些脚本会根据您要部署到的项目自动将您的 iOS 和 Android Firebase 配置文件放置到适当的位置。
回购: https://github.com/deimantasa/flutter-firebase-environment-generator-advanced
指南:https://aurimas-deimantas.medium.com/cicd-p2-multiple-firebase-environments-in-flutter-deb919cfac2b
【讨论】: