Java 什么是身份?Can';在自己的应用程序中找不到gcm_defaultSenderId
我正在尝试让我的应用程序运行谷歌云消息。我正在关注谷歌云消息快速启动应用程序,可以在这里找到 在他们的quickstart应用程序中,我们会向Google云消息服务请求注册令牌,这样我们的应用程序实例就可以与云通信 我发现这行代码:Java 什么是身份?Can';在自己的应用程序中找不到gcm_defaultSenderId,java,android,android-studio,google-cloud-messaging,Java,Android,Android Studio,Google Cloud Messaging,我正在尝试让我的应用程序运行谷歌云消息。我正在关注谷歌云消息快速启动应用程序,可以在这里找到 在他们的quickstart应用程序中,我们会向Google云消息服务请求注册令牌,这样我们的应用程序实例就可以与云通信 我发现这行代码: RegistrationIntentService.java::onHandleIntent(Intent intent): InstanceID instanceID = InstanceID.getInstance(this); String gcmRegi
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\u defaultSenderId
它是在他们的快速入门应用程序中定义的,但它是自动生成的
我应该如何让我的应用程序产生这种价值
我在文档中查找InstanceID.getToken,它是getToken(java.lang.String,java.lang.String)
InstanceID.getoken
返回一个令牌,该令牌授权实体(例如:云服务)代表实例ID标识的应用程序执行操作。
这类似于OAuth2令牌,只是它应用于应用程序实例而不是用户
函数头如下所示:
public String getToken (String authorizedEntity, String scope)
<resources>
<string name="gcm_defaultSenderId">175643285</string>
</resources>
我看到getToken
想要的第一个参数是stringauthorizedentity
。
那么,这个身份字符串应该是什么?它清楚地标识了发出请求的应用程序的实例,但是我应该如何生成它呢?在quickstart应用程序中,我找不到在
res/value/strings.xml
中定义的,我只能找到在R.java和app/build/generated/res/google services/debug/values/values.xml中定义的
它看起来像:
public String getToken (String authorizedEntity, String scope)
<resources>
<string name="gcm_defaultSenderId">175643285</string>
</resources>
175643285
该文件中只有一个字符串,而该文件在项目结构中埋得很深。
我在代码中找不到以编程方式生成此gcm\u defaultSenderId
的任何地方
我很困惑,因为我怎么会知道绳子在那里?我从未定义过这个字符串,在谷歌上搜索“cannotresolvegcm\u DefaultSenderId
”不会给出任何结果。我正试图在我自己的应用程序中实现谷歌云消息,所以我自己的应用程序当然不会自动知道如何生成该字符串。我该怎么打那个身份证号码
这就是为什么我认为理解InstanceID.getToken想要的authorizedEntity字符串很重要,这样我就可以正确地生成一个给getToken的字符串。也许我的想法是完全错误的,也许我不应该生成gcm_defaultSenderId,但我知道我不应该修改R.java,并且values.xml
文件也在“生成的”文件夹下
请帮忙?如果我在搜索中找到答案,我会很高兴地发布答案。非常感谢您的帮助,请注意:我的项目是从Eclipse导出到Gradle,因此它仍然具有Eclipse项目/文件夹结构,这不会导致任何问题,但是values.xml
文件位于不同的位置。我们需要填充项目id来代替该字符串。
请参考以下链接
生成令牌需要由Google开发者控制台生成的项目ID
String authorizedEntity = PROJECT_ID; // Project id from Google Developers Console
String scope = “GCM”; // e.g. communicating using GCM, but you can use any
// URL-safe characters up to a maximum of 1000, or
// you can also leave it blank.
String token = InstanceID.getInstance().getToken(authorizedEntity,scope);
R.string.gcm_defaultSenderId
值是由Gradle google services插件生成的,该插件使用一个带有定义常量的google services.json
文件
该插件应用于Gradle:
apply plugin: 'com.google.gms.google-services'
有关更多信息,请查看
查看如何获取google services.json
文件并在开发者控制台中设置Gradle&app。发送者ID来自开发者控制台,但如果您遵循快速入门,它是在您复制到项目目录的google-services.json文件中为您生成的。google-services.json文件必须位于app根文件夹中,这样Gradle插件才能自动生成R.string.gcm_defaultSenderId。为了获得google-services.json文件,请遵循以下官方指南:我安装了该插件,但字符串值无法解析您为我节省了大量搜索时间,先生:)很高兴知道Kushan:)但如果您使用的是最新的google服务,请使用@peter的答案!我实际上是想使用InstanceId api来删除令牌。。这就是为什么我需要authEntity。彼得的回答就是我所用的。由于默认使用了该服务所拥有的应用程序分析,而且默认情况下firebase api将其打开,因此它给我带来了一大堆问题。我的每项服务都有60-70MB的超限容量,这就是胡说八道