我正在尝试让我的应用程序与Google Cloud Messaging一起运行。我正在关注可在github上找到的Google Cloud Messaging快速入门应用。

有时,他们会在他们的快速入门应用程序中向Google Cloud Messaging服务请求注册 token ,以便我们的应用程序实例可以与云对话。

我找到以下代码行:

RegistrationIntentService.java::onHandleIntent(Intent intent):

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

使我感到困惑的部分是这个值:R.string.gcm_defaultSenderId它是在他们的快速入门应用中定义的,但会自动生成。

我应该如何让我的应用产生值(value)?

我查找InstanceID.getToken的文档,它是here getToken(java.lang.String, java.lang.String)InstanceID.getoken返回一个 token ,该 token 授权实体(例如:云服务)代表实例ID标识的应用程序执行操作。
这类似于OAuth2 token ,除了它适用于应用程序实例而不是用户。

函数头看起来像:
public String getToken (String authorizedEntity, String scope)

我看到getToken想要的第一个参数是String authorizedEntity
那么,这个authorizedEntity字符串应该是什么?
它清楚地标识了发出请求的应用程序的实例,但是我应该如何生成它呢?在快速入门应用程序中,我找不到在res/value/strings.xml中定义的它,我只能在R.java和app/build/generated/res/google-services/debug/values/values.xml中找到它的定义

看起来像:
<resources>
<string name="gcm_defaultSenderId">175643285</string>
</resources>

该文件中只有一个字符串,并且该文件被深埋在项目结构的深处。
我在代码中找不到以编程方式生成此gcm_defaultSenderId的任何地方。

我很困惑,因为我应该怎么知道那里的绳子?我从未定义过该字符串,并且搜索“无法解析gcm_DefaultSenderId”不会产生任何结果。我正在尝试在自己的应用程序中实现Google Cloud Messaging,因此我自己的应用程序当然不会自动知道生成该字符串。我应该怎么打那个身份证号码?

这就是为什么我认为重要的是要理解InstanceID.getToken的这个authorizedEntity字符串很重要,这样我才能正确生成一个要提供给getToken的字符串。也许我的想法是完全错误的,也许我不应该生成gcm_defaultSenderId,但是我知道我不应该更改R.java,而且values.xml文件也位于“生成”文件夹下。

请帮忙?如果我在搜索中找到答案,我会很乐意发布答案。非常感谢您提供的任何帮助,请注意:我的项目已从 Eclipse 导出到 Gradle ,因此它仍然具有Eclipse项目/文件夹结构,应该不会引起任何问题,但是values.xml文件位于另一个位置。

最佳答案

R.string.gcm_defaultSenderId值由Gradle google-services插件生成,该插件使用带有已定义常量的google-services.json文件。

该插件应用于Gradle:

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

有关更多信息,请检查
Implementing GCM Client on Android,并查看如何在开发人员控制台中获取google-services.json文件和设置Gradle&应用。

10-02 07:45
查看更多