GCM默认发送者ID

27

请问有人能帮我理解下面代码中的gcm_defaultSenderId是什么意思吗(在RegistrationIntentService.java中的onHandleIntent函数中发现):

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);

这段内容来自于 Google 的样例应用程序,用于将 GCM 集成到您的应用程序中,但它甚至在他们的应用程序中都无法编译!我相信这是每个应用程序特定的问题。我已经将 GCM API 添加到我的应用程序中,只是不知道这个字符串应该是什么!谢谢!


1
在进一步了解这个问题后,我意识到你必须创建配置文件( google-services.json )并导入它。然后项目将根据 @Kroikie 提到的插件解决 senderID。如果您需要更多澄清,请告诉我。 - Brandon
6个回答

28
是一个字符串,由 google-services Gradle 插件提供。确保你有以下内容:

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

在你的build.gradle文件中。

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

就像Vesko所说的那样,这是你的Sender ID,也就是你的开发控制台项目中的项目编号。google-services插件会从你下载的项目配置文件中提取这个信息。


我已经应用了插件,但它仍然无法正常工作。有任何想法为什么吗? - Syed Raza Mehdi
你是否包含了配置文件?如果没有,请查看https://developers.google.com/cloud-messaging/android/start生成一个。 - Arthur Thompson
我已经包含了配置文件并将其放置在应用程序文件夹中,它在示例 GCM 应用程序中工作,但在我的应用程序中却不起作用。 - Syed Raza Mehdi
在这种情况下,我不确定为什么它对您不起作用。我建议您创建一个新问题,并提供有关您特定情况的更多详细信息。 - Arthur Thompson
1
需要包含那个庞大的插件才能获取defaultSenderId吗? - Zapnologica
虽然建议使用,但不是必需的,默认的发送者ID是您的Google开发者控制台项目的项目编号。您可以手动输入该数字而不使用插件。 - Arthur Thompson

8

引用此文档中有关该实现的详细信息:

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);

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

即使GitHub中的项目有这个字符串,也不会对你有任何好处,因为这个authorizedEntity 对于每个应用程序都是唯一的。


是的,我知道它对每个应用程序都是唯一的(请参见我的上面的问题,tehe),但还是谢谢!这就是我最终在这里找到的答案(https://dev59.com/VGgu5IYBdhLWcg3we3Ct)。我会接受你的答案,感谢您发布相关代码和链接! - Brandon

7

我讨厌那些有bug的Gradle插件,而在一个有多个版本的项目中尝试运行google-services插件也一点都不好玩。

最终,我通过名称获取了Sender 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);

1
要解决这个问题,您只需将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'添加到您的gradle中。

1

还有一件重要的事情,就是创建 google-services.json 文件。

以防万一其他人也遇到了这个问题。


0

将文件google-services.json放置在\app目录下,而不是src或其他位置。确保应用了GCM插件。构建项目,字符串现在将被解析。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接