未找到包名称匹配的客户端(Google Analytics)- 多个 productFlavors 和 buildTypes

No matching client found for package name (Google Analytics) - multiple productFlavors & buildTypes

上下文:

我正在尝试为我的应用设置 Google 分析。 (有 4 个自定义 buildTypes 和多个 productFlavors

当我 select 将 applicationId 设置为 com.my.app.package.nameBuild Variant 时工作正常(生成 google-services.json 时使用的包名称) .但是,我的其他口味有不同的 applicationIds。

我按照offical devguide设置好了。

当在 Build Variants Tab 中 select 编辑任何其他构建变体时出现错误(它具有不同的 applicationId(包名称)如下:

Error:Execution failed for task ':app:processAllcategoriesDebugfreeGoogleServices'.

No matching client found for package name 'com.my.app.package.name.debug'

错误信息的解释:

上面错误信息中的任务名称中Debugfree是我的自定义buildTypeAllcategories是我的productFlavors之一。

我理解这个错误并且知道包名称与我在生成 json 时使用的名称不同,但这就是我想要计算的绕一圈。

问题:

现在,google-services.json 驻留在 app 文件夹中,因此我无法通过将它们放入风味特定的源集文件夹中来针对每种产品风味将它们分开。

问题:

  1. 我的自定义 byildType 调试后缀 .debugapplicationId(包名称)。有没有一种方法可以让它与我发布的 applicationId 一起使用 google-services.json(即没有后缀 .debug
  2. 有没有办法在同一个 google-services.json 文件中配置多个产品风格,而无需使用单独的文件和任务将所需文件复制到 app 文件夹。我知道可以使用 task 来完成,如 中所述。有没有一种更简单的方法来只拥有一个文件或根据 gradle 配置选择正确的文件?
  3. 我看到 google-services.json 中的 package_name 字段有包名称 com.my.app.package.name。我可以手动添加多个包名称以适用于所有构建变体吗?如果是,该怎么做?在文档中找不到任何说明。

找到这个:

The google-services.json file is generally placed in the app/ directory, but as of version 2.0.0-alpha3 of the plugin support was added for build types, which would make the following directory structure valid:

app/src/
    main/google-services.json
    dogfood/google-services.json
    mytype1/google-services.json
    ...

Source

Source 2

检查 google-services.json 中的 client_idpackage_name 是否根据您的包名称具有正确的值.

您应该将提到的文件添加到 flavors 目录中,在 client_idpackage_name 字段中具有相应的包名称。

检查你的 google-services.json 上的包名称,它应该与你的应用程序的本地包名称相同

例子

"client_info": {
    "mobilesdk_app_id": "1:6596814400689:android:65d6f25f5006145",
    "android_client_info": {
      "package_name": "com.my.app.package.name"
    }

在这种情况下,我的本地包名称是 com.my.app.package.name 所以我也在 google-[= 中更改了我的包名称25=] 加上我本地的包名

您需要将 google-services.json 放入 app/ 目录。对于每种构建类型,应该有一致的主管 app/src 文件夹。

例如,如果您有发布和调试:

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

在所有 google-services.json 文件中,您应该根据构建类型指定正确的 package_name

例如,在调试目录中它应该像 {com.myapp}.debug

我通过制作两个资源集解决了这个问题,一个是免费的,一个是付费的。这两个文件夹都将包含所需的 java 代码和资源文件,这些文件将根据特定风格的要求进行编辑。例如,您想从 Java 类 和布局文件中删除付费版中的 AdMob 代码。

确保在重命名包后在 gradle 文件中重命名 ApplicationId

我找到了解决方案:

我们必须在 firebase 项目中创建两个 "apps",然后我们可以从任何一个应用程序(我从风味应用程序下载)下载 json 文件。它将包含两个应用程序的数据。我们可以简单地将 json 文件复制到应用程序的根目录。

来源:https://firebase.googleblog.com/2016/08/organizing-your-firebase-enabled-android-app-builds.html

确保 "google-services.json" 文件中的包名称与应用的包名称相同。

打开您的 Google-services.json 文件并在文件中查找此部分:

"client": [
{
  "client_info": {
    "mobilesdk_app_id": "1:857242555489:android:46d8562d82407b11",
    "android_client_info": {
      "package_name": "com.example.duke_davis.project"
    }
  }

检查包名是否与您的包名相同。我的不一样,所以我改变了它,它起作用了。

如果 Google-services.json 文件中的包名没问题, 转到 gradle.properties 文件。然后改变你的 APPLICATION_ID="com.yourpackage.name"

如果其中 none 对你们中的一个有用,我的问题是包名称不是以 'com' 开头。 更改了它,现在可以使用了。

希望对您有所帮助

我来自 React Native,但我认为这也适用于这个问题。要指定。

在文件 android/app/build.gradle 中搜索 applicationId(在 androiddefaultConfig 中)

并确保该值与此

相同

client[0]client_info.android_client_info.package_name

作为 google-services.json.

内的值

我通过重新同步文件 google-services.json.

解决了同样的问题

Tools > Firebase > Connect to Firebase > Sync

转到您的项目目录并在 app/src 路径上创建命名您的产品风味的文件夹(例如 Alpha、Beta、Store 或您的风味名称)。然后将 google-services.json 文件复制到每个文件夹。不要忘记更改每个产品风味的 google-services.json 子文件夹文件中的 "package_name" 字段。

我解决了同样的问题 这是简单的解决方案: 当您创建 firebase 连接时,请遵循以下准则:

  • 在 firebase 中添加您的应用程序名称

  • 添加您的应用程序包名称(写相同的包名称,您正在应用程序中使用)

  • 当 firebase 使 google-services.json 文件只是 下载 它和 粘贴到你的应用程序文件夹

  • 同步您的项目问题已解决:)

    谢谢

这意味着您的 google-services.json 文件不属于您的应用程序(您是否为其他应用程序下载了 google-services.json?).. .so 要解决此问题,请执行以下操作:

1:登录 Firebase 并打开您的项目。 2:Click 设置图标和 select 项目设置。 3:In 您的应用卡,select 列表中您需要配置文件的应用程序包名称。 4:Click google-services.json. 下载完成后,将新的 google-services.json 添加到您的项目根文件夹,替换现有的..或者删除旧的。 为您的第一个项目下载 google-services.json 然后假设或忘记这个特定的 google-services.json 是为您当前的项目量身定制的,这是很正常的,因为不是任何其他因为所有项目都有唯一的包名称。

转到google-services.json文件,在客户端检查包名,如果不同则与应用程序包名进行比较,然后根据您的应用程序包名更改客户端包名祝我好运..

google-services.json 文件-> "package_name": "com.example.application.tracker"

应用包名->包"com.example.application.tracker";

我认为您已经在新文件中添加了 firebase json 文件 "google-services".json。确保创建一个新文件 check the link on how to create json file from firebase 并且它应该与您的包名称匹配

第二件事是,如果您要更改包名称,请在您从下拉菜单 select 项目时右键单击文件下时使用选项“替换路径”。你必须在整个项目中搜索包名并替换它!

希望对您有所帮助!

您还需要在 google-services.json

中更改包名称

很简单。从 Android Studio 注销,将其完全关闭。重新打开 Android studio,然后再次登录 Android Studio。

然后尝试从 Android 工作室 IDE 连接到 firebase。这个程序对我有用。

当我更改我的应用程序的包名称时,我也遇到了这个问题。

在您的 android 工作室项目中找到 "google-services.json" 文件。 打开它。 并检查你的应用的包名是否和这个文件中写的一样

你的应用包名和"google-services.json"文件中写的包名必须一致

Whenever you create or update package name Make sure your package name is exactly the same [Upper case and lower case matters]

执行以下步骤。

1). 在 App 级别 gradle 文件中检查 applicationId

2). 检查 google-services.json 文件中的 package_name

3). 检查 AndroidManifest 文件中的 package

为了完全确认,请确保您的工作包目录名称 即(“com.example.app”) 也相同。

EDIT [ Any one who is facing this issue in productFlavour scenario, go check out ]

android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "com.package.name"
        minSdkVersion 19
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

确保 Gradle.app 的 applicationId 与您的程序包名称相同。我的问题是这个,我是这样解决的

解决这个问题很简单:只需确保 app/build.gradle 文件中的包名称与 App Manifest 文件中的包名称相同即可。并确保包名正确。这应该可以解决这个问题

首先,在Gradle中的应用程序包中添加后缀:

yourFlavor {
   applicationIdSuffix "yourFlavor"
}

这将使您的包被命名为

com.domain.yourapp.yourFlavor

然后转到您当前项目下的 Firebase,并使用此包名称向其中添加另一个 android 应用程序。

然后将现有的 google-services.json 文件替换为您使用新应用生成的新文件。

然后您将得到包含多个 "client_info" 部分的内容。所以你应该得到这样的结果:

"client_info": {
    "mobilesdk_app_id": "YOUR APP INFO",
    "android_client_info": {
      "package_name": "com.domain.yourapp"
    }
  }

"client_info": {
    "mobilesdk_app_id": "YOUR APP INFO - will be different then other app info",
    "android_client_info": {
      "package_name": "com.domain.yourapp.yourFlavor"
    }
  }

未找到包名称 'com.tf' 的匹配客户端 我很确定 google-services.json 中的 "package_name" 与应用 gradle 中的 "applicationId" 不匹配。

应用gradle:

defaultConfig {
        applicationId "com.tf" //replace with the package_name in google-services.json =
        minSdkVersion 23
        targetSdkVersion 26
        versionCode 7
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

google-services.json

"client_info": {
        "mobilesdk_app_id": "1:23978655351:android:2b2fece6b961cc70",
        "android_client_info": {
          "package_name": "in.ac.geu.debug"
        }
      },

解决方法:只要确保package_nameapplicationId必须相同即可。

在您应用的 build.gradle 文件中检查 applicationIdSuffix。查看它是否将任何文本连接到您的 applicationId。如果是这样,请将其删除。

1.Verify 程序包名称应用程序 ID 应该相同

2.Verify google-services.json 包名 可在应用程序文件夹

如果您的项目中下载了 Google 服务 Json 文件,其包名称 与您项目的包名称 不匹配,则会出现此错误.

最近重命名了项目的包名?

它会更新所有 类 ,但不会更新 Gradle 文件。因此,请检查您的 Gradle 中的包名是否正确,也许还有 Manifest。

你可以这样做来解决这个问题。

在我的例子中,我忘记了 google-services.json 在应用程序根目录中,这是为了不同的风格。默认情况下使用它,而不是使用存储在 flavor 文件夹中的 json。这搞砸了插件,由于包名不匹配,它失败了。

我教的智慧,出现这个问题时检查你的项目结构中的所有google-services.json。

如果有人更改他们现有的包名称,那么有时会出现这样的问题,因此您应该更改本地包名称,build.gradle 文件包名称,如果您的项目有任何 google-services.json 文件然后你只需要更改你的 JSON 文件包名称。

旧文件看起来像那样

"client": [
{
  "client_info": {
    "mobilesdk_app_id": "1:517104510151:android:8b7ed3989db24a6f928ae2",
    "android_client_info": {
      "package_name": "com.techsajib.oldapp"
    }
  },

新文件看起来像那样

"client": [
{
  "client_info": {
    "mobilesdk_app_id": "1:517104510151:android:8b7ed3989db24a6f928ae2",
    "android_client_info": {
      "package_name": "com.techsajib.newapp"
    }
  },

注意: 有时 JSON 文件有多个包名称,因此请将它们全部更改

如果您的 applicationId 与您的 buildTypes 不同,您可以将那些特定的工件添加到特定的依赖性风格中,例如 releaseImplementation