我正在尝试让我的应用程序与 Google Cloud Messaging 一起运行。我正在关注 Google Cloud Messaging Quickstart 应用程序,可以在此处找到github https://github.com/googlesamples/google-services/tree/master/android/gcm.
在他们的快速启动应用程序中,我们有时会向 Google Cloud Messaging 服务请求注册令牌,以便我们的应用程序实例可以与云通信。
我找到这行代码:
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 https://developers.google.com/android/reference/com/google/android/gms/iid/InstanceID# getToken(java.lang.String, java.lang.String)
InstanceID.getoken
返回一个令牌,该令牌授权实体(例如:云服务)代表实例 ID 标识的应用程序执行操作。
这类似于OAuth2
令牌不同的是,它适用于应用程序实例而不是用户。
函数头看起来像:
public String getToken (String authorizedEntity, String scope)
我看到第一个参数getToken
想要的是String authorizedEntity
。
那么,这个authorizedEntity String 应该是什么?
它清楚地标识了发出请求的应用程序的实例,但我应该如何生成它?在快速入门应用程序中,我找不到它的定义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,所以我自己的应用程序当然不会自动知道生成该字符串。我应该如何生成该 id 号?
这就是为什么我认为了解 InstanceID.getToken 想要的授权实体字符串很重要,这样我就可以正确生成一个提供给 getToken 的字符串。也许我的想法是完全错误的,也许我不应该生成 gcm_defaultSenderId,但我知道我不应该改变 R.java,并且values.xml
文件也在“生成”文件夹下。
请帮助?如果我在搜索中找到答案,我会很乐意发布答案。非常感谢任何帮助,请注意:我的项目已导出到Gradle from Eclipse,因此它仍然具有 Eclipse 项目/文件夹结构,这不会导致任何问题,但是values.xml
文件位于不同的位置。