GCM defaultSenderID

Bra*_*don 26 notifications android google-cloud-messaging

有人可以帮我理解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);
Run Code Online (Sandbox Code Playgroud)

这是来自Google示例应用程序,用于将GCM实现到您的应用程序中,甚至无法在其应用程序中编译!我确定这是每个应用程序特有的东西.我已经将GCM API添加到我的应用程序中,只是不知道这个字符串应该是什么!谢谢!

Art*_*son 28

gcm_defaultSenderId是google-services gradle插件中包含的字符串.一定要有:

  apply plugin: 'com.google.gms.google-services'
Run Code Online (Sandbox Code Playgroud)

在build.gradle文件中.

此插件应该在最新版本的构建工具中提供.

就像Vesko说这是你的发件人ID,在这种情况下是你的开发控制台项目中的项目编号.google-services插件会从您下载的项目配置文件中提取此内容.


Ves*_*sko 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);
Run Code Online (Sandbox Code Playgroud)

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

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


Vai*_*den 6

我讨厌那些有问题的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);
Run Code Online (Sandbox Code Playgroud)