GCM的defaultSenderID

有人可以帮我理解gcm_defaultSenderId在下面的代码中(在RegistrationIntentService.java中的onHandleIntent中find):

InstanceID instanceID = InstanceID.getInstance(this); String token = instanceID.getToken(getString(R.string.gcm_defaultSenderId), GoogleCloudMessaging.INSTANCE_ID_SCOPE, null); // [END get_token] Log.i(TAG, "GCM Registration Token: " + token); 

这是从谷歌示例应用程序实施GCM到您的应用程序,甚至不在他们的应用程序编译! 我相信这是每个​​应用程序特定的东西。 我已经将GCM API添加到我的应用程序,只是不知道这个string应该是什么! 谢谢!

Solutions Collecting From Web of "GCM的defaultSenderID"

引用这个文档,你可以在这里find关于这个实现的细节:

 String authorizedEntity = PROJECT_ID; // Project id from Google Developers Console String scope = “GCM”; // eg 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); 

所以,你可以看到,你应该传递给getToken()的第一个参数是authorizedEntity ,它应该是来自Google Developers的你的项目ID 🙂

即使GitHub中的项目具有该string,也不会为您提供任何好处,因为这个authorizedEntity实体对于每个应用程序都是独一无二的。

gcm_defaultSenderId是一个由google-services gradle插件包含的string。 确保你有:

  apply plugin: 'com.google.gms.google-services' 

在你的build.gradle文件中。

这个插件应该在最新版本的构build工具中可用。

就像Vesko说的那样,这是你的发件人ID,在这种情况下是你的开发控制台项目中的项目编号。 google-services插件从您下载的项目configuration文件中提取。

为了解决这个问题,你只需要添加apply plugin: 'com.google.gms.google-services'到你的gradle.app模块和classpath 'com.google.gms:google-services:1.3.0'到你的依赖关系gradle.app项目

当然,不要忘了添加compile 'com.google.android.gms:play-services-gcm:8.1.0' 8.1.0 compile 'com.google.android.gms:play-services-gcm:8.1.0'到你的Gradle

我讨厌那些bug的Gradle插件,并试图让谷歌服务插件在多种风格的项目中运行也是没有乐趣的。

我最终得到了发件人ID的名字:

 InstanceID instanceID = InstanceID.getInstance(this); String gcmDefaultSenderId = getString( getResources().getIdentifier("gcm_defaultSenderId", "string", this.getPackageName()) ); String token = instanceID.getToken( gcmDefaultSenderId, GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);