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

Android 为什么我需要将配置文件添加到我的项目中才能正确设置GCM?,android,google-cloud-messaging,Android,Google Cloud Messaging,我读过这篇文章。它说我需要下载配置文件并将其添加到我的项目中。但他们没有解释,我为什么要这样做?如果不添加配置文件,它不会工作吗?如果您没有生成正确的配置文件并将其添加到项目中,则是的,您将无法获得推送通知 在以前版本的SDK中,您必须在代码中手动配置senderID 现在,有了GCM3,谷歌已经统一了配置谷歌服务的方式。他们的门户现在允许您配置所有要为应用程序启用的服务。一旦完成,它将生成一个配置文件,其中包含您使用该服务所需的手机参数 如果没有这些信息,尤其是项目编号,Google将无法生成


我读过这篇文章。它说我需要下载配置文件并将其添加到我的项目中。但他们没有解释,我为什么要这样做?如果不添加配置文件,它不会工作吗?

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

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

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

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

它是如何工作的? google services Gradle Android插件使用配置文件生成所需的配置资源。如果在
build.gradle
文件中有此项,则表示您正在使用它:

apply plugin: 'com.google.gms.google-services'
然后,它将生成您在Google gcm示例代码中看到的资源
R.string.gcm\u 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提供的便利。它更干净,因为它集中了所有谷歌服务参数


你的应用程序与project/senderID的链接是强制性的,但是如果你真的不喜欢这个JSON谷歌服务器配置文件,你可以通过手动将所需的值放到其他地方来解决它。

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

因此,雷蒙德的答案可能有道理,但对我来说一切都很好(包括生成InstanceID令牌和主题消息)


因此,实际上,它应该可以在不添加文件的情况下工作,而且您也不需要此文件。

您是否使用旧方法进行集成?我猜这是因为您仍然在从代码中传递参数。不,我只使用新的API,从不从代码中传递发件人id,这就是为什么我也对文档感到困惑的原因,InstanceID API没有旧的方法,这是完全新的,必须有一种方法来进行映射,否则GCM不知道推送API密钥与此应用程序匹配。你是对的,我刚刚查看了我的代码,当从“InstanceId”调用“getToken”时需要发送者id(对不起)尽管如此,配置文件似乎是有用的。我更新了我的答案,提供了更多关于它如何工作的详细信息,以及为什么在您的案例中没有该文件的情况下它可以工作<代码>https://developers.google.com/android/guides/setupcom.google.android.gms:play services GCM:8.1.0如果我这样做,那么
GCM\u defaultSenderId
com.google.android.gms:play services:8.3.0的android研究中找不到,我认为现在需要配置文件。我尝试在没有该选项的情况下构建项目,但出现以下错误:任务执行失败“:app:processDebugGoogleServices”。>模块根文件夹中缺少文件google-services.json。没有它,谷歌服务插件就无法运行。