Os aplicativos devem chamar gcm.register () a cada sete dias para garantir identificações de registro válidas?
O código do lado do cliente noExemplo do GCM no site de desenvolvimento do Android padrão para chamargcm.register(SENDER_ID);
após cada sete dias, verificando se o registro expirou usando a seguinte função:
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;
}
O comentário acima da função implica que isso é usado para "evitar o cenário em que o dispositivo envia o registro para o servidor, mas o servidor o perde. Isso sugere quenosso servidores (não os servidores GCM) podem perder o ID de registro? Ou isso ocorre porque o ID de registro pode se tornar inválido no lado do GCM? Parece que isso é possível de acordo com o seguinte parágrafoa página de tópicos avançados do GCM:
Da mesma forma, você não deve salvar o ID de registro quando um aplicativo é submetido a backup. Isto é porqueo ID de registro pode se tornar inválido no momento em que o aplicativo é restaurado, o que colocaria o aplicativo em um estado inválido (ou seja, o aplicativo acha que está registrado, maso servidor e o CM não armazenam mais esse ID de registro- assim, o aplicativo não receberá mais mensagens).
Agradeço antecipadamente!