为什么我需要将配置文件添加到我的项目中才能正确设置 GCM?

Why do I need to add the configuration file to my project to set up GCM correctly?

https://developers.google.com/cloud-messaging/android/client 我读过这篇文章。它说我需要下载配置文件并将其添加到我的项目中。但他们不解释,我为什么要这样做?不加配置文件不行吗?

如果您没有生成正确的配置文件并将其添加到您的项目中,那么是的,您将无法获得推送通知。

在以前版本的 SDK 中,您必须在代码中手动配置 senderID。

现在,在 GCM 3 中,Google 统一了配置 Google 服务的方式。他们的门户现在允许您配置要为您的应用程序启用的所有服务。完成后,它会生成一个配置文件,其中包含您使用该服务所需的手机参数。

如果没有该信息,尤其是项目编号,Google 将无法生成允许使用您的 senderID 和服务器 API 密钥接收推送的 InstanceID。这是一种将 Android 上的客户端凭据与后端的服务器凭据相匹配的方法,允许您将推送通知发送到您的 Android 应用程序,并且仅发送给您的应用程序。

它是如何工作的?

配置文件被google-services Gradle Android插件用来生成需要的配置资源。如果你的 build.gradle 文件中有这个,这意味着你正在使用它:

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

然后,它将生成您在 Google GCM 示例代码中看到的资源 R.string.gcm_defaultSenderId

InstanceID instanceID = InstanceID.getInstance(this);
String token = instanceID.getToken(getString(R.string.gcm_defaultSenderId),
        GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);

但是,如果您决定在代码中对 SenderID 进行硬编码并将其传递给 instanceID.getToken 方法,那么它的确会起作用。 拥有 JSON 配置文件是 Google 提供的便利。它更干净,因为它集中了所有 Google 服务参数。

你的应用程序的 link 到 project / senderID 是强制性的,但如果你真的不喜欢这个 JSON Google 服务器配置文件的想法,你可以变通通过手动将所需的值放在其他地方。

我也在处理多个 GCM 项目,但仍在使用 Eclipse、Eclipse-ADT-plugin 和旧项目结构,我没有将此配置文件包含到我的项目中。我一开始也很困惑,因此在 Android-Studio 项目中使用 Gradle 进行了尝试,但配置文件也不是必需的。

所以 Rémond 的回答可能有道理,但对我来说一切正常(包括生成 InstanceID-Token 和 Topic-Messaging 正在工作)。

所以事实上,它应该在不添加文件的情​​况下工作,而且你也不需要这个文件。