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

29
2个回答

17

如果您没有生成并添加适当的配置文件到您的项目中,那么是的,您将无法使推送通知工作。

在 SDK 的早期版本中,您需要在代码中手动配置 senderID。

现在,通过 GCM 3,Google 统一了配置 Google 服务的方式。他们的门户网站现在让您配置您想要为您的应用程序启用的所有服务。完成后,它会生成一个包含移动设备所需参数的配置文件以使用该服务。

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

它是如何工作的?

google-services Gradle Android 插件使用配置文件来生成所需的配置资源。这意味着如果您的 build.gradle 文件中有以下内容,则表示您正在使用它:

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

然后,它将生成资源R.string.gcm_defaultSenderId,这个资源可以在Google GCM示例代码中看到:

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服务参数集中在一起,更加清晰。

将您的应用程序链接到项目/ SenderID是必需的,但是如果您真的不喜欢拥有此JSON Google服务器配置文件的想法,您可以通过手动将所需值放在其他地方来解决此问题。


这个新的更原子化的谷歌服务是如何工作的?您可以在 https://developers.google.com/android/guides/setup 中仅包含 GCM com.google.android.gms:play-services-gcm:8.1.0。如果我这样做,那么在 Android Studio 中找不到 gcm_defaultSenderId - Zapnologica
com.google.android.gms:play-services:8.3.0 开始,我认为现在需要配置文件。我尝试在没有它的情况下构建我的项目,但是出现了以下错误:**执行任务 ':app:processDebugGoogleServices' 失败。
模块根目录中缺少 google-services.json 文件。Google 服务插件无法正常工作。**
- Mateus Gondim

6

我也在从事多个GCM项目,但仍在使用Eclipse、Eclipse-ADT插件和旧的项目结构,并且没有将此config文件包含到我的项目中。一开始我也感到困惑,因此我尝试在一个使用Gradle的Android Studio项目中使用它,但是这个配置文件也不是必需的。

因此,Rémond的答案可能有道理,但对我来说一切都很好(包括生成InstanceID-Token和主题消息也能正常工作)。

所以实际上,即使不添加该文件,它也应该可以正常工作,而您也不需要这个文件。


你是在使用旧的集成方法吗?我猜这是因为你仍然从代码中传递参数。 - Mickaël Rémond
不,我只使用新的API,从代码中不传递发送者ID,这就是为什么我对文档感到困惑,而且在InstanceID API中没有旧方法,这是全新的。 - sschmid
好的,否则 GCM 就不知道推送 API 密钥与该应用匹配,因此必须有一种映射的方法。 - Mickaël Rémond
你说得对,我刚刚看了一下我的代码,当从´InstanceId´调用´getToken´时需要发送者ID(很抱歉)。尽管如此,配置文件似乎是无用的。 - sschmid
我更新了我的答案,以便更详细地说明它的工作原理以及在您的情况下为什么可以不使用文件。 - Mickaël Rémond

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接