GCM defaultSenderID
Может кто-нибудь, пожалуйста, помогите мне понять, что gcm_defaultSenderId находится в следующем коде (найденном в onHandleIntent в RegistrationIntentService.java):
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
Цитата ЭТО документ, где вы можете найти информацию об этой реализации:
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:)
Даже если проект в GitHub имел эту строку, это не принесет вам никакой пользы, так как этот authorizedEntity
является чем-то уникальным для каждого приложения.
Ответ 2
gcm_defaultSenderId - это строка, включенная плагином google-services gradle. Убедитесь, что у вас есть:
apply plugin: 'com.google.gms.google-services'
в файле build.gradle.
Этот плагин должен быть доступен в последней версии инструментов сборки.
Как и Vesko, это ваш идентификатор отправителя, который в этом случае является номером проекта в вашем проекте консоли разработчика. Плагин google-services извлекает это из вашего загруженного файла конфигурации проекта.
Ответ 3
Чтобы решить эту проблему, просто добавьте apply plugin: 'com.google.gms.google-services'
в ваш gradle.app module и classpath 'com.google.gms:google-services:1.3.0'
к зависимостям вашего проекта gradle.app
и, конечно же, не забудьте добавить compile 'com.google.android.gms:play-services-gcm:8.1.0'
в свой gradle
Ответ 4
Я ненавижу эти багги Gradle плагины, и попытка заставить плагин google-services работать в проекте с несколькими вариантами тоже не забавна.
В результате я получил идентификатор отправителя по имени:
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);