组织android + firebase项目+云功能进行开发工作

时间:2018-08-08 02:43:37

标签: android firebase android-gradle

我需要在Firebase和android上设置dev-staging-prod的指南,并在服务器端进行完全数据隔离,并能够通过android支持该功能。另外,我将具有构建的调试和发行版本。我被卡住了,是因为Firebase的packagename + SHA约束。很明显,在Firebase中,两个项目可以具有相同的SHA-1,但是应用程序的程序包名称(也称为“应用程序ID”)必须不同。同样,您可以拥有两个具有相同程序包名称的项目,但是不能向其添加任何相同的SHA-1。

必须具备: 三种环境的数据隔离 我使用Firebase控制台在我的帐户下创建了3个firebase项目。 1)项目开发 2)项目分期 3)项目产品

我也想在Android中获得支持 1)调试 2)释放模式

我有一个工程师团队,他们将致力于开发,一个选择小组致力于过渡和生产。

为了隔离开发人员,我可以让开发人员使用其沙箱帐户,从而解决了SHA密钥问题。

Staging / Prod:但是由于软件包名称相同,我该如何解决Staging / Prod。我是否必须添加另一个后缀,以便Firestore不会抱怨?对于调试和生产,我有规则添加applicationIdSuffix。

程序包名称为com.mycompany.productname。

发布将在产品中。在开发和调试中进行调试。

在Android中,我正计划具有这样的风味以指向google_services.json,以便处理我的应用程序的服务器端尺寸。     应用/         src /             主要/             开发/                 google-services.json(仅适用于开发人员)             质量/                 google-services.json(仅适用于质量检查)             产品/                 google-services.json(仅适用于产品)

并相应地更新android应用等级文件

   buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            applicationIdSuffix '.debug'
        }
    }
    // Specifies the flavor dimensions.
    flavorDimensions "server"
    productFlavors {
        dev {
            dimension "server"
        }
        staging {
            dimension "server"
        }
        prod {
            dimension "server"
        }
    }

现在如何管理SHA密钥,因为对于应用程序ID(程序包名称),仅允许使用一个SHA密钥。

  

软件包名称和SHA-1的组合必须唯一

2 个答案:

答案 0 :(得分:2)

这是Google道格(Doug)和我的原始帖子的评论摘要。

步骤1)Firebase控制台:为不同的环境创建三个项目,即:dev |分期生产

第2步)开发人员在其沙盒项目中的工作 dev 的注意事项:Dev不必与其他所有事物一样。每个开发人员都可以在自己的控制下拥有自己的项目,以避免破坏彼此的工作 让每个开发人员使用他们的沙盒项目(免费帐户)。

第3步)使用调试版本创建过渡环境,而无需签名 登台的注意事项:在开发和登台中进行调试。无需签名。

第4步)在产品中发布标志 生产的注意事项:与可信赖的团队成员共享您专用的签名密钥,以便他们可以部署手动签名的应用程序,而不必为每个项目不必要地定义多个应用程序。 (请记住,您在两个项目中可以具有相同的SHA-1,但是应用程序的程序包名称(也称为“应用程序ID”)必须不同。同样,您可以使两个项目具有相同的程序包名称,但是它们可以没有添加任何相同的SHA-1。 软件包名称和SHA-1的组合必须唯一)

第5步)使用产品风格与Android SDK集成 与firebase项目集成:下载这3个项目的google-services.json文件,并使用下面的build.gradle文件(模块:app)将它们存储在服务器维度目录中。

第6步)使用Blaze与第三者集成: 与第三方服务集成:将Firebase项目升级到Blaze要求。但是,如果我们需要使用某些第三方服务等,则需要让他们将您添加为项目的所有者,然后使用您帐户的帐单信息将其项目升级到Blaze。这样,开发人员在单元测试他们的工作时就不会破坏彼此的数据。

第7步)验证成绩文件 适用于应用的Android gradle文件:

buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            applicationIdSuffix '.debug'
        }
    }


  // Specifies the flavor dimensions.
    flavorDimensions "server"
    productFlavors {
        dev {
            dimension "server"
        }
        staging {
            dimension "server"
        }
        prod {
            dimension "server"
        }
    }

第8步)验证您的android目录和google-service.json Android的目录结构以适应各种口味:将Firebase控制台中的google-services.json放到这些目录中。

app/
        src/
            main/
            dev/
                google-services.json (for dev only)
            qa/
                google-services.json (for qa only)
            prod/
                google-services.json (for prod only)

第9步)根据环境上传云功能 现在可以管理我的云功能,继续使用不同的项目环境,这样可以避免容易破坏生产或暂存数据。云功能将部署到阶段和生产中。

对于开发环境,由于所有开发人员都将以沙盒模式创建自己的项目,因此他们将必须复制一些配置以使项目正确运行,例如存储资产,已部署的云功能等。单独控制过度的项目需要单独部署。

第10步) 未来:将CI / CD系统用于暂存产品。 每一个步骤:通过一个知道这些项目的凭据的CI / CD系统强制所有部署,并仅在成功通过测试的构建之后进行更改。 IMO,大团队中的每个人都可以访问特殊目的项目通常是不可接受的。

ref:连续交付(CD)连续交付实际上是CI的扩展,在其中,软件交付过程可以进一步自动化,从而可以随时随地轻松,自信地部署到生产中

答案 1 :(得分:0)

如果仅与那些应该能够部署到那些项目环境的人员共享登台并发布签名密钥,这可能是最简单的。更好的是,您可以通过单个CI / CD系统强制所有部署,该系统知道这些项目的凭据,并且仅在成功通过测试的构建之后才能进行更改。 IMO,大团队中的每个人都可以访问特殊目的项目通常是不可接受的。