Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么是身份?Can';在自己的应用程序中找不到gcm_defaultSenderId_Java_Android_Android Studio_Google Cloud Messaging - Fatal编程技术网

Java 什么是身份?Can';在自己的应用程序中找不到gcm_defaultSenderId

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

我正在尝试让我的应用程序运行谷歌云消息。我正在关注谷歌云消息快速启动应用程序,可以在这里找到

在他们的quickstart应用程序中,我们会向Google云消息服务请求注册令牌,这样我们的应用程序实例就可以与云通信

我发现这行代码:

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
的任何地方

我很困惑,因为我怎么会知道绳子在那里?我从未定义过这个字符串,在谷歌上搜索“cannotresolve
gcm\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的超限容量,这就是胡说八道