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 插件。构建项目,字符串现在将被解析。
有人可以帮我理解以下代码中的 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 插件。构建项目,字符串现在将被解析。