GCM defaultSenderID

GCM defaultSenderID

有人可以帮我理解以下代码中的 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 添加到我的应用程序中,只是不知道这个字符串应该是什么!谢谢!

引用 THIS 文档,您可以在其中找到有关该实现的详细信息:

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 开发人员的项目 ID :)

即使 GitHub 中的项目有那个字符串,它也不会给您带来任何好处,因为这个 authorizedEntity 对于每个应用程序来说都是独一无二的。

gcm_defaultSenderId 是一个字符串,包含在 google-services gradle 插件中。确保您拥有:

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

在您的 build.gradle 文件中。

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

正如 Vesko 所说,这是您的发件人 ID,在本例中是您的开发控制台项目中的项目编号。 google-services 插件从您下载的项目配置文件中提取它。

要解决这个问题,您只需将 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

我讨厌那些有问题的 Gradle 插件,并且试图让 google-services 插件在具有多种风格的项目中运行也没有乐趣。

我最终通过名称获得了发件人 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);

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

以防其他人偶然发现这个问题。

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