什么是授权实体?在自己的应用中找不到 gcm_defaultSenderId
What is authorizedEntity? Can't find gcm_defaultSenderId in own app
我正在尝试获取我的应用程序 运行 Google 云消息传递。我正在关注 Google Cloud Messaging Quickstart App,它可以在 github.
上找到
在他们的快速启动应用程序中,我们有时会向 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_defaultSenderId
它在他们的快速启动应用程序中定义,但它是自动生成的。
我应该如何让我的应用程序生成该值?
我查找了 InstanceID.getToken 的文档,它是 here getToken(java.lang.String, java.lang.String)
InstanceID.getoken
returns 授权实体(例如:云服务)代表实例 ID 标识的应用程序执行操作的令牌。
这类似于 OAuth2
令牌,只是它适用于应用程序实例而不是用户。
函数头如下所示:
public String getToken (String authorizedEntity, String scope)
我看到 getToken
想要的第一个参数是 String authorizedEntity
。
那么,这个 authorizedEntity 字符串应该是什么?
它清楚地标识了发出请求的应用实例,但我应该如何生成它呢?在quickstart app中,我找不到它定义在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
的代码中找不到任何地方。
我很困惑,因为我怎么知道那个字符串在那里?我从未定义过该字符串,并且谷歌搜索 "cannot resolve gcm_DefaultSenderId
" 没有结果。我正在尝试在我自己的应用程序中实施 Google 云消息传递,因此我自己的应用程序当然不会自动知道生成该字符串。我应该如何制作该身份证号码?
这就是为什么我认为理解 InstanceID.getToken 想要的 authorizedEntity 字符串很重要,这样我才能正确生成一个给 getToken。也许我的想法是完全错误的,也许我不应该生成gcm_defaultSenderId,但我知道我不应该改变R.java,而且values.xml
文件也在[=下62=]文件夹。
请帮忙?如果我在搜索中找到答案,我会很高兴 post 得到答案。非常感谢任何帮助,请注意:我的项目是从 Eclipse 导出到 Gradle,所以它仍然会有 Eclipse project/folder 结构,应该不会造成任何问题,但 values.xml
文件位于不同的位置。
这是我们需要填写的项目ID来代替那个字符串。
请参考以下link.
https://developers.google.com/instance-id/guides/android-implementation
生成令牌需要 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'
查看更多信息
Implementing GCM Client on Android 并查看如何获取 google-services.json
文件并在开发者控制台中设置 Gradle 和应用程序。
我正在尝试获取我的应用程序 运行 Google 云消息传递。我正在关注 Google Cloud Messaging Quickstart App,它可以在 github.
上找到在他们的快速启动应用程序中,我们有时会向 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_defaultSenderId
它在他们的快速启动应用程序中定义,但它是自动生成的。
我应该如何让我的应用程序生成该值?
我查找了 InstanceID.getToken 的文档,它是 here getToken(java.lang.String, java.lang.String)
InstanceID.getoken
returns 授权实体(例如:云服务)代表实例 ID 标识的应用程序执行操作的令牌。
这类似于 OAuth2
令牌,只是它适用于应用程序实例而不是用户。
函数头如下所示:
public String getToken (String authorizedEntity, String scope)
我看到 getToken
想要的第一个参数是 String authorizedEntity
。
那么,这个 authorizedEntity 字符串应该是什么?
它清楚地标识了发出请求的应用实例,但我应该如何生成它呢?在quickstart app中,我找不到它定义在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
的代码中找不到任何地方。
我很困惑,因为我怎么知道那个字符串在那里?我从未定义过该字符串,并且谷歌搜索 "cannot resolve gcm_DefaultSenderId
" 没有结果。我正在尝试在我自己的应用程序中实施 Google 云消息传递,因此我自己的应用程序当然不会自动知道生成该字符串。我应该如何制作该身份证号码?
这就是为什么我认为理解 InstanceID.getToken 想要的 authorizedEntity 字符串很重要,这样我才能正确生成一个给 getToken。也许我的想法是完全错误的,也许我不应该生成gcm_defaultSenderId,但我知道我不应该改变R.java,而且values.xml
文件也在[=下62=]文件夹。
请帮忙?如果我在搜索中找到答案,我会很高兴 post 得到答案。非常感谢任何帮助,请注意:我的项目是从 Eclipse 导出到 Gradle,所以它仍然会有 Eclipse project/folder 结构,应该不会造成任何问题,但 values.xml
文件位于不同的位置。
这是我们需要填写的项目ID来代替那个字符串。 请参考以下link.
https://developers.google.com/instance-id/guides/android-implementation
生成令牌需要 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'
查看更多信息
Implementing GCM Client on Android 并查看如何获取 google-services.json
文件并在开发者控制台中设置 Gradle 和应用程序。