【问题标题】:Flutter Firebase -- setting different deployment targets for iOS, Android, and WebFlutter Firebase——为 iOS、Android 和 Web 设置不同的部署目标
【发布时间】:2021-06-08 03:12:43
【问题描述】:

问题在于如何设置您的 Flutter 环境,以便您可以针对单独的 Firebase 实例(例如用于 dev、prod、staging ......)

【问题讨论】:

    标签: firebase flutter flutter-web


    【解决方案1】:

    在此示例中,我有三个名为 devstagingprod 的 firebase 实例(也称为“firebase 项目”)。 p>

    使用此解决方案

    iOS 和安卓

    对于 iOSAndroid,为了定位这些 firebase 实例,我使用 Flutter 风格:

    > flutter run --flavor dev
    
    > flutter run --flavor staging
    
    > flutter run --flavor prod
    

    Web(本地网络托管服务器)

    对于 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 网络托管服务器)

    对于 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
    

    设置

    假设

    • 您已经设置了 Firebase 实例,并且可以轻松地在 Firebase Console 周围导航。
    • 您已将 Firebase 公共构建目标文件夹设置为 build/web 用于网络托管。

    为 iOS 和 Android 设置 Flutter 风格

    Flutter Flavors 的实现参见以下内容:

    为 Web 设置部署目标

    为 Web 配置 Flutter 项目

    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 部署目标

    列出您在输入 > firebase login 时有权访问的 firebase 项目。

    > firebase projects:list
    

    您可以通过输入以下命令为每个 Firebase 实例分配一个项目别名(在我的例子中是 devstagingprod):

    > 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
    

    将 Firebase 配置详细信息添加到您的项目

    一些 StackOverflow 答案告诉您将 Firebase 配置放入您的项目 web/index.html 文件中。这是没有必要的。而不是这样做,您只需从终端命令行使用 firebase use prodfirebase use stagingfirebase use prod 在 firebase 配置之间切换,以使每个 firebase 实例“活动 ”。当您执行 flutter build web 时,构建过程会自动从 active firebase 实例中获取正确的 firebase 配置。

    这种魔法是如何发生的? Click here 了解使用保留 URL 添加 SDK 的详细信息。

    1. 在每个 Firebase 实例中,确保每个实例都有一个网络应用 >。
    2. 将 SDK 代码段设置为“自动”

    1. 从您的 Firebase 实例之一复制代码 sn-p 并将其添加到您的 web/index.html 文件中。您的 <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>
    

    【讨论】:

    • 当我尝试在没有配置的情况下运行时。应用程序未运行并抛出应用程序未定义。
    • FlutterFire Web 文档说:“我们正在积极研究在不直接使用 CDN 的情况下初始化 Firebase 的方法,一旦可用,我们将更新文档。” firebase.flutter.dev/docs/installation/web
    • 这个解决方案看起来不错,但我找不到 SDK sn-p 选项将其设置为“自动”。有什么改变吗?我正在“项目设置 -> 您的应用”页面中查找它。
    • 另外,这个路径是什么: 这个初始化是什么是?这个脚本应该从哪里来?
    【解决方案2】:

    根据目标动态放置 Firebase 配置文件

    此 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

    【讨论】:

      猜你喜欢
      • 2021-04-24
      • 2021-01-11
      • 2023-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-24
      • 2021-03-25
      • 2021-12-01
      相关资源
      最近更新 更多