Подтвердить что ты не робот

Что такое authorizedEntity? Не удается найти gcm_defaultSenderId в собственном приложении.

Я пытаюсь запустить приложение с облачными сообщениями Google. Я следую за быстрым приложением Google Cloud Messaging Quickstart, которое можно найти здесь на github.

В своем приложении быстрого запуска в какой-то момент мы попросим службу облачных сообщений Google зарегистрировать токен регистрации, чтобы этот экземпляр нашего приложения мог разговаривать с облаком.

Я нахожу эту строку кода:

RegistrationIntentService.java::onHandleIntent(Intent intent): 

InstanceID instanceID = InstanceID.getInstance(this);
String gcmRegistrationToken = instanceID.getToken(getString(R.string.gcm_defaultSenderId),
                    GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);

Часть меня сбивает с толку: R.string.gcm_defaultSenderId Он определяется в их быстром приложении, но он автоматически генерируется.

Как мне заставить мое приложение генерировать это значение?

Я просматриваю документы для InstanceID.getToken, который здесь getToken(java.lang.String, java.lang.String)

InstanceID.getoken возвращает токен, который разрешает Entity (например: облачный сервис) выполнять действие от имени приложения, идентифицированного идентификатором экземпляра. Это похоже на токен OAuth2, за исключением того, что он применяется к экземпляру приложения вместо пользователя.

Заголовок функции выглядит так:

public String getToken (String authorizedEntity, String scope)

Я вижу, что первый аргумент, что getToken хочет, равен String authorizedEntity. Итак, что это за подлинность? Он четко идентифицирует экземпляр приложения, делающего запрос, но как я должен его генерировать? В приложении quickstart я не могу найти его в res/value/strings.xml, я могу найти его только в R.java и app/build/generated/res/google-services/debug/values/values.xml

Похоже:

<resources>
<string name="gcm_defaultSenderId">175643285</string>
</resources>

В этом файле есть только одна строка, и этот файл глубоко погружен в структуру проекта. Я не могу найти нигде в коде, где этот gcm_defaultSenderId генерируется программно.

Я запутался, потому что, как я должен был знать, что строка была там? Я никогда не определял эту строку, а googling для "не может разрешить gcm_defaultSenderId" не дает никаких результатов. Я пытаюсь реализовать Google Cloud Messaging в своем собственном приложении, поэтому, конечно, мое собственное приложение не будет автоматически знать, чтобы сгенерировать эту строку. Как я должен сделать этот идентификационный номер?

Вот почему я считаю важным, что я понимаю, что эта строка authorizedEntity, что InstanceID.getToken хочет, так что я могу правильно генерировать один, чтобы дать getToken. Возможно, моя идея совершенно неверна, возможно, я не должен генерировать gcm_defaultSenderId, но я знаю, что я не должен изменять R.java, а файл values.xml также находится в "сгенерированной" папке.

Помогите пожалуйста? Если я найду ответ в своих поисках, я с радостью отправлю ответ. Любая помощь очень ценится, обратите внимание: мой проект был экспортирован в Gradle из Eclipse, поэтому он все равно будет иметь структуру проекта/папки Eclipse, которая не должна вызывать каких-либо проблемы, но файл values.xml находится в другом месте.

4b9b3361

Ответ 1

Значение R.string.gcm_defaultSenderId генерируется плагином google-services Gradle, который использует файл google-services.json с определенными константами.

Плагин применяется в Gradle:

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

Подробнее Внедрение GCM Client на Android и посмотреть, как получить файл google-services.json и настроить Gradle и приложение в консоли разработчика.

Ответ 2

Это идентификатор проекта, который нам нужно заполнить вместо этой строки. Пожалуйста, обратитесь к следующей ссылке.

https://developers.google.com/instance-id/guides/android-implementation

Для создания токенов требуется идентификатор проекта, созданный Google Developers Console.

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