不同 productFlavors 的 google-services.json

新手上路,请多包涵

更新: GCM 已弃用,请使用 FCM

我正在按照 此处 Google Developers 页面的指南实施新的 Google Cloud Messaging

我已经成功运行并测试了它。但我现在的问题是我有不同的产品风格,不同的 applicationId/packageName 和不同的 Google Cloud Messaging Project Id。 google-services.json 必须放在 /app/google-services.json 而不是 flavors 文件夹。

有什么方法可以使 google-services.json 配置因多种口味而不同?

原文由 gentra 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

Google 在播放服务插件的 2.0 版中包含了对风格的支持。由于这个版本的 gradle plugin com.google.gms:google-services:2.0.0-alpha3

你可以这样做

第一步:添加到gradle

 // To auto-generate google map api key of google-services.json
implementation 'com.google.android.gms:play-services-maps:17.0.0'

第二步:在application标签中加入AndroidManifest.xml

 <meta-data
    android:name="com.google.android.geo.API_KEY"
    android:value="@string/google_api_key" />

第 3 步:从 firebase 下载每个 flavor JSON 文件并添加它

app/src/
    flavor1/google-services.json
    flavor2/google-services.json

插件的版本 3.0.0 在这些位置搜索 JSON 文件(考虑到您有一个 flavor flavor1 和一个构建类型 debug ):

 /app/src/debug/google-services.json
/app/src/debug/flavor1/google-services.json
/app/google-services.json

即使使用 flavorDimensions,这对我也有效。我在一个维度上有免费和付费,在另一个维度上有模拟和生产。我还有 3 种构建类型:调试、发布和暂存。这是我的 FreeProd 风格项目中的样子:

在此处输入图像描述

多少个 google-services.json 文件将取决于您的项目的特点,但每个 Google 项目至少需要一个 JSON 文件。

如果您想了解有关此插件如何处理这些 JSON 文件的更多详细信息,请访问: https ://github.com/googlesamples/google-services/issues/54#issuecomment-165824720

官方文档链接: https ://developers.google.com/android/guides/google-services-plugin

包含更新信息的博文: https ://firebase.googleblog.com/2016/08/organizing-your-firebase-enabled-android-app-builds.html

并去这里检查这个插件的最新版本: https ://mvnrepository.com/artifact/com.google.gms/google-services?repo=google

原文由 Yair Kukielka 发布,翻译遵循 CC BY-SA 4.0 许可协议

更新: 以下解释适用于一个 Android Studio 项目,其中有一个 Firebase 项目和该项目中的不同 Firebase 应用程序。如果目标是在同一个 Android Studio 项目中的不同 Firebase 项目中为不同的 Firebase 应用程序提供不同的 JSON 文件(或者如果您不知道有什么区别) 请看这里。 .

每个 Android 应用程序 ID(通常是程序包名称)需要一个 Firebase 应用程序。每个 Gradle 构建变体都有一个应用程序 ID 是很常见的(如果您使用 Gradle 构建类型和 Gradle 构建风格,这很可能)


Google Services 3.0 开始,使用 Firebase 就没有必要为不同的风格创建不同的文件。如果您有相互组合的 productFlavours 和 Build 类型,则为不同的口味创建不同的文件可能并不清晰或直接。

在同一个文件中,您将拥有所有构建类型和风格所需的所有配置。

在 Firebase 控制台中,您需要为每个包名称添加一个应用程序。假设您有 2 种风格(开发和实时)和 2 种构建类型(调试和发布)。取决于您的配置,但您可能有 4 个不同的包名称,例如:

  • com.stackoverflow.example(实时 - 发布)
  • com.stackoverflow.example.dev(实时 - 开发)
  • com.stackoverflow.example.debug(调试 - 发布)
  • com.stackoverflow.example.dev.debug(调试 - 开发)

您需要在 Firebase 控制台中安装 4 个不同的 Android 应用程序。 (在每一个上你都需要为你正在使用的每台计算机添加用于调试和实时的 SHA-1)

当你下载 google-services.json 文件时,实际上你从哪个应用程序下载它并不重要,它们都包含与你所有应用程序相关的相同信息。

现在您需要在应用程序级别 (app/) 中找到此文件。

在此处输入图像描述

如果您打开该文件,您会看到它是否包含所有包名称的所有信息。

痛点曾经是插件。为了让它工作,您需要在文件底部找到该插件。所以这条线..

 apply plugin: 'com.google.gms.google-services'

…需要位于应用程序 build.gradle 文件的底部。

对于此处所说的大部分内容,它也适用于以前的版本。我从来没有为不同的配置使用不同的文件,但现在使用 Firebase 控制台更容易,因为它们提供了一个文件,其中包含所有配置所需的一切。

原文由 Sotti 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题