【问题标题】:How to run debug app version on a 'debug' Firebase database如何在“调试”Firebase 数据库上运行调试应用程序版本
【发布时间】:2016-09-18 13:24:55
【问题描述】:

在 2016 年 Google I/O 会议上,Firebase 全面集成的重大改进得到了展示。在我的应用程序中,我正在尝试迁移到新的解决方案,但有几个问题。其中之一是:

在我的 Firebase 应用中,我使用了一个参数来定义 Firebase 数据库,如下所示(gradle):

gradle.properties 文件:

FIREBASE_REF_REL="https://xxxxxxx.firebaseio.com/"
FIREBASE_REF_DEB="https://xxxxxxx-dev.firebaseio.com/"

build.gradle 文件:

buildTypes {
        debug {
            minifyEnabled false
            multiDexEnabled true
            it.buildConfigField 'String', 'FIREBASE_ROOT_URL', FIREBASE_REF_DEB
        }
        release {
            minifyEnabled true
            useProguard true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            zipAlignEnabled true
            it.buildConfigField 'String', 'FIREBASE_ROOT_URL', FIREBASE_REF_REL
        }
        return true
    }

这让我可以在调试 Firebase 环境中运行我的调试应用,这有助于我在不影响生产环境的情况下测试数据模型和安全规则的更改。

在新的 Firebase 解决方案中,这似乎不再可能,因为生成的 google-services.json 文件包含 Firebase 参考(如下所述:https://firebase.google.com/support/guides/firebase-android#import_your_project_to_the_new_firebase_console_numbered)。

当尝试引用我的调试数据库时,我收到以下类型的错误:

Caused by: com.google.firebase.database.DatabaseException: Invalid URL (https://xxxxxxx-dev.firebaseio.com/) passed to getReference().  URL was expected to match configured Database URL: https://xxxxx.firebaseio.com

我的问题:在新情况下,针对测试 Firebase 数据库运行应用程序的正确方法/最佳做法是什么?

【问题讨论】:

    标签: android firebase google-play-services firebase-realtime-database


    【解决方案1】:

    我不确定这是否是最佳做法。

    您可以使用不同的google-services.json 文件。
    我正在调查当前插件 (com.google.gms:google-services:3.0.0) 是否支持构建类型。 前一个 (com.google.gms:google-services:2.1.X) 支持风格但不支持类型。

    在任何情况下,您都应该能够使用这样的东西:

    app/src/release/google-services.json
    app/google-services.json
    

    在这种情况下,插件会查找位置并在找到google-services.json 文件时停止。

    通过这种方式,您应该能够使用不同的 Firebase 应用进行调试和发布。

    【讨论】:

    • 谢谢,这解决了我的问题。我最终使用了这样的结构:project\app\src\debug\google-services.json project\app\src\release\google-services.json Debug 构建现在可以在专用 Firebase 数据库(使用调试 SHA1)上运行,而应用程序的发布版本可以在生产 Firebase 数据库上运行。
    • @Peter 如果这解决了您的问题,如您所说,请将其标记为正确。只需添加此链接即可帮助像我这样的其他人 --> Organizing your Firebase-enabled Android app builds.
    • 这是另一篇不错的博文:medium.com/@Miqubel/…
    【解决方案2】:

    上面的答案指定不需要各种 google-services.json 文件。而是在 Firebase 中创建一个项目。每个项目可以有多个应用程序(甚至跨不同平台)。

    以我为例,我有两种构建类型(调试和发布)和两种 productFlavor,导致 4 个应用程序具有不同的包名称:

    • fullDebug:com.company.myapp.debug
    • fullRelease:com.company.myapp
    • demoDebug: com.company.myapp.demo.debug
    • demoRelease:com.company.myapp.demo

    一个 google-services.json 文件涵盖了所有这些变体,应该只放入您的 Android Studio 项目的应用模块中。

    【讨论】:

    • 感谢您的评论。我想要实现的是在“调试”Firebase 数据库(与“发布”数据库不同)上运行我的应用程序的调试版本。我看不出如何使用单个 google-services.json 文件来实现这一点。 @Gabriele Mariotti 提供的解决方案似乎是目前最合适的。
    • 您可以实现这一点,因为您可以在该 json 中指定一个不同的客户端信息,该客户端信息使用不同的包名称来指向其他“项目”,这样您就可以让您的调试版本类似于 debug.com.your .package 并将其指向不同的地方
    • 我看不到在 firebase 上创建不同的应用程序将如何创建调试数据库。
    • Firebase 的某些部分(身份验证、数据库、存储和托管)对于所有项目的应用程序都是通用的。您的解决方案不会创建调试数据库。
    猜你喜欢
    • 1970-01-01
    • 2015-05-15
    • 2011-05-14
    • 2011-03-04
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    • 1970-01-01
    相关资源
    最近更新 更多