Срок действия идентификатора регистрации GCM истекает?

Я знаю, что срок регистрации C2DM истекает, и вы должны периодически обновлять идентификатор регистрации. Так ли это с GCM? Глядя на следующий код в руководстве по Android GCM (показан ниже), кажется, что вы делаете это только один раз и не нужно обновлять, но я не вижу, чтобы это было написано где-либо явно, поэтому я просто хотел проверить.

final String regId = GCMRegistrar.getRegistrationId(this);
if (regId.equals("")) {
  GCMRegistrar.register(this, SENDER_ID);
} else {
  Log.v(TAG, "Already registered");
}

person Mohamed Hafez    schedule 21.07.2012    source источник
comment
Аналогично: stackoverflow.com/questions/16838654/   -  person trante    schedule 22.05.2014


Ответы (2)


РЕДАКТИРОВАТЬ: ЭТОТ ОТВЕТ УСТАРЕЛ, Я НЕ ПОНИМАЮ, КАКОЕ ТЕКУЩЕЕ ПОВЕДЕНИЕ


Я нашел ответ сам. Вам не нужно явно перерегистрировать все время, только один раз в соответствии с к примеру в документации.

Кроме того, в отличие от предыдущих версий GCM и C2DM, сам Google теперь не обновляет саму регистрацию: как только у вас есть регистрационный идентификатор из первоначальной регистрации, все готово, за исключением одного случая: вам по-прежнему необходимо повторно регистрироваться, когда пользователь переходит на новую версию (этот случай также рассматривается в примере по ссылке выше):

Когда приложение обновляется, оно должно аннулировать свой существующий идентификатор регистрации, так как не гарантируется его работа с новой версией. Поскольку при обновлении приложения не вызывается метод жизненного цикла, лучший способ добиться этой проверки — сохранить текущую версию приложения при сохранении идентификатора регистрации.

person Mohamed Hafez    schedule 21.07.2012
comment
@AndroidKiller: прочитайте документы: developer.android.com/google/gcm/index. html - person Mohamed Hafez; 08.10.2013
comment
привет @MohamedHafez. Ваш первый абзац взят из документации C2DM, а не GCM, что означает (я полагаю), что он не относится к GCM. Это делает ваш ответ немного неверным. Спасибо - person AndroidGecko; 27.02.2014
comment
@AndroidGecko это было в документах GCM, когда я впервые написал этот ответ, перечитывая документы теперь, он говорит, что процедура регистрации изменилась (хотя старая все еще работает), и кажется, что теперь Google нет теперь сам обновляет регистрационные идентификаторы. Я обновил ответ, чтобы отразить текущую версию GCM, хороший улов :) - person Mohamed Hafez; 27.02.2014

Я думаю, что это обновляется в конце концов, да. Из официальных документов:

Существующий идентификатор регистрации может перестать быть действительным в ряде случаев, в том числе: Если приложение отменяет регистрацию вручную, отправив намерение com.google.android.c2dm.intent.UNREGISTER. Если приложение автоматически отменяется, что может произойти (но не гарантируется), если пользователь удалит приложение. Если срок действия регистрационного идентификатора истек. Google может решить обновить регистрационные идентификаторы. Во всех этих случаях вам следует удалить этот регистрационный идентификатор со стороннего сервера и прекратить его использование для отправки сообщений. Происходит, когда код ошибки NotRegistered.

Это могло произойти при запросе к GCM от вашего стороннего сервера, который возвращает ответ json с ошибкой Незарегистрированное устройство.

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

http://developer.android.com/guide/google/gcm/gcm.html

person Iñigo    schedule 21.07.2012
comment
Так можно ли просто проверить, изменился ли токен в моем RegistationIntentService? Я могу сохранить токен в общих настройках и каждый раз проверять, не изменился ли он. - person Zapnologica; 04.08.2015