Czy aplikacje powinny wywoływać gcm.register () co siedem dni, aby zapewnić prawidłowe identyfikatory rejestracji?
Kod po stronie klienta wPrzykład GCM na stronie z Androidem domyślnie do dzwonieniagcm.register(SENDER_ID);
po każdych siedmiu dniach, sprawdzając, czy wygasła rejestracja przy użyciu następującej funkcji:
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;
}
Komentarz powyżej funkcji sugeruje, że jest to używane do „uniknięcia scenariusza, w którym urządzenie wysyła rejestrację na serwer, ale serwer go traci. Czy to sugeruje, żenasz serwery (nie serwery GCM) mogą utracić identyfikator rejestracji? Czy może dlatego, że identyfikator rejestracji może stać się nieprawidłowy po stronie GCM? Wydaje się, że jest to możliwe zgodnie z poniższym akapitem wStrona GCM Advanced Topics:
Podobnie nie należy zapisywać identyfikatora rejestracji, gdy kopia zapasowa aplikacji jest tworzona. To dlatego, żeidentyfikator rejestracji może stać się niepoprawny do czasu przywrócenia aplikacji, co spowodowałoby, że aplikacja byłaby niepoprawna (tzn. aplikacja uważa, że jest zarejestrowana, aleserwer i CM nie przechowują już tego identyfikatora rejestracji—Tak aplikacja nie otrzyma więcej wiadomości).
Z góry dziękuję!