我正在尝试让我的应用与 Google Cloud Messaging 一起运行。我正在关注 Google Cloud Messaging 快速入门应用程序,该应用程序可在 github 上找到。 .
在他们的快速入门应用程序中,我们有时会向 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 授权实体(例如:云服务)代表由 Instance ID 标识的应用程序执行操作。
这类似于 OAuth2
token ,但它适用于应用程序实例而不是用户。
函数头看起来像:
public String getToken (String authorizedEntity, String scope)
我看到getToken
想要的第一个参数是String 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 和应用程序。
关于java - 什么是授权实体?在自己的应用程序中找不到 gcm_defaultSenderId,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30653130/