Клиентский код в GCM example on the Android dev site по умолчанию для вызова gcm.register(SENDER_ID);
через каждые семь дней, проверяя при регистрации истек с помощью следующей функции:Если приложения запрашивают gcm.register() каждые семь дней, чтобы обеспечить действительные регистрационные идентификаторы?
public static final long REGISTRATION_EXPIRY_TIME_MS = 1000 * 3600 * 24 * 7;
/**
* Checks if the registration has expired.
*
* To avoid the scenario where the device sends the registration to the
* server but the server loses it, the app developer may choose to re-register
* after REGISTRATION_EXPIRY_TIME_MS.
*
* @return true if the registration has expired.
*/
private boolean isRegistrationExpired() {
final SharedPreferences prefs = getGCMPreferences(context);
// checks if the information is not stale
long expirationTime =
prefs.getLong(PROPERTY_ON_SERVER_EXPIRATION_TIME, -1);
return System.currentTimeMillis() > expirationTime;
}
Комментарий выше функции следует, что это используется, чтобы «избежать сценарий, когда устройство отправляет регистрацию на сервер, но сервер теряет его. Предполагается ли, что наши серверы (а не серверы GCM) могут потерять идентификатор регистрации? Или это связано с тем, что идентификатор регистрации может стать недействительным на стороне GCM Похоже, что это возможно в соответствии с нижеследующим абзацем в the GCM Advanced Topics Page:
Аналогичным образом, вы не должны сохранять идентификатор регистрации при резервном копировании приложения . Это происходит потому, что регистрации ID может стать недействительной к тому времени приложения восстанавливается, который поставил бы применения в нерабочем состоянии (то есть, приложение считает, что он зарегистрирован, но сервера и CM не сохраните этот идентификатор регистрации больше, так как приложение не получит больше сообщений).
Заранее спасибо!
ОК. Это очень ясно. Этот абзац архитектурного обзора действительно информативен. Похоже, если у меня есть получатель в моем манифесте, что фильтры для событий 'com.google.android.c2dm.intent.RECEIVE' и' com.google.android.c2dm.intent.REGISTRATION', я могу просто обработать различия в метод 'onReceive' получателя, проверив« register_id »как строку, добавленную в намерении согласно [расширенному информационному документу] (http://developer.android.com/google/gcm/adv.html#reg-state) а затем сохранение нового идентификатора, заданного google, при периодическом обновлении идентификатора. –
Вы правы, что по-старому вы можете напрямую обрабатывать случай обновления идентификатора внутри метода 'onReceive'. Несмотря на то, что способ нажатия кнопки «onReceive» Push был амортизирован. Новый способ предполагает просто прослушивание вещания для этого. Кроме того, по-новому вызов «gcm.register()» (регистрация push) является методом блокировки, в отличие от предыдущего способа регистрации push, где приложение использовало обратный вызов внутри метода 'onRegistered'. –
Я имел в виду метод onReceive для BroadcastReceiver http://developer.android.com/reference/android/content/BroadcastReceiver.html –