Регистрация путаницы Android GCM

Я пытаюсь перейти на GCM в Android, C2DM теперь устарел. Процесс регистрации, описанный здесь, отличается от описанной здесь здесь. Являются ли они одинаковыми? Можем ли мы узнать код для GCMRegistrar, чтобы знать наверняка?

Ответ 1

Они на самом деле одно и то же. Второй инкапсулирует первый в статическом методе и регистрирует широковещательный приемник. Вы можете прикрепить источник к gcm.jar и убедиться в этом сами. Вы можете найти исходный код в файлах ~/android-sdks/extras/google/gcm/gcm-client/gcm-src.jar

Ответ 2

Я успешно перенес проект C2DM в GCM. Протестировано, он отлично работает. Единственные изменения:

  • в приложении Android - измените значение sender при регистрации
  • на стороне сервера - измените заголовок auth и URL

Вот и все, что касается взаимодействия с Google. Было внесено несколько изменений, продиктованных логикой приложения:

  • в Android-приложении идентификатор регистрации был кэширован в своих настройках. После обновления я удаляю reg ID из настроек, чтобы принудительно перерегистрировать, на этот раз с GCM.
  • логика передачи идентификатора reg на сервер получила дополнительный логический параметр - если это идентификатор реестре C2DM или GCM
  • логика отправки сообщений стала обусловлена ​​указанным параметром.

Выброс логики C2DM полностью из сервера был бы неразумным - не все обновляют свои приложения для Android. Старые версии с поддержкой C2DM в течение некоторого времени останутся в дикой природе. И Google пообещал сохранить работу C2DM в краткосрочной перспективе. Таким образом, отправка сообщения является условной - в зависимости от типа идентификатора reg, она отправляется либо в GCM, либо в C2DM.

EDIT re: условная логика:

if($RegID_Is_GCM)
{
    $Auth = GCM_Auth();
    $URL = $GCM_URL;
}
else
{
    $Auth = C2DM_AUTH();
    $URL = $C2DM_URL;
}

Ответ 3

Вещь, которая мне больше всего нравится в GCM, - это RegID, который мы будем получать с сервера GCM, это не только ID, это адрес этого приложения на этом устройстве. Поэтому на этот раз вам не нужно отправлять идентификатор устройства на сервер вместе с вашим регистрационным идентификатором, как это было в C2DM.

В C2DM каждый раз, когда вы запрашиваете идентификатор регистрации, вы получите новый идентификатор.

Но в GCM RegId, сгенерированном с помощью пакета приложений вместе с некоторым идентификатором устройства, поэтому, если вы снова и снова запрашиваете идентификатор регистрации, вы получите тот же RegId.

И если вы удалите приложение и снова установите его, сервер GCM предоставит вам тот же регистрационный идентификатор.

Таким образом, один идентификатор регистрации не будет нуждаться в каком-либо идентификаторе устройства для отправки на сервер.

Ответ 4

GCMRegistrar - это просто помощник, который выполняет работу ног, описанную на первой странице.

Здесь вы можете увидеть класс. android-sdk\extras\google\gcm\gcmclient\src\com\google\android\gcm.