Esa es una pregunta interesante.
Google le anima a cambiar al nuevo proceso de registro:
Una aplicación de Android que se ejecuta en un dispositivo móvil se registra para recibir mensajes llamando al registro del método GoogleCloudMessaging (senderID ...). Este método registra la aplicación para GCM y devuelve el ID de registro. Este enfoque simplificado reemplaza el proceso de registro de GCM anterior.
La nota que dice Google may periodically refresh the registration ID
solo aparece en la página que aún muestra el proceso de registro anterior, por lo que es posible que esta nota ya no sea relevante.
Si desea estar seguro, puede seguir utilizando el proceso de registro anterior. O puede usar el nuevo proceso, pero además tenga el código que maneja la com.google.android.c2dm.intent.REGISTRATION
intención, para asegurarse de que está cubierto si Google decide actualizar el ID de registro.
Dicho esto, nunca experimenté tal actualización, e incluso cuando experimenté un cambio en el ID de registro (generalmente como resultado de enviar una notificación después de desinstalar la aplicación y luego volver a instalarla), el ID de registro anterior todavía funcionó (lo que resultó en un ID de registro canónico enviado en la respuesta de Google), por lo que no se hizo ningún daño.
EDITAR (06.06.2013):
Google cambió su aplicación de demostración para usar la nueva interfaz. Actualizan el ID de registro estableciendo una fecha de vencimiento en el valor persistente localmente por la aplicación. Cuando se inicia la aplicación, cargan su identificación de registro almacenada localmente. Si está "caducado" (lo que en la demostración significa que se recibió de GCM hace más de 7 días), vuelven a llamar gcm.register(senderID)
.
Esto no maneja el escenario hipotético en el que Google actualiza un ID de registro para una aplicación que no se ha lanzado durante mucho tiempo. En ese caso, la aplicación no se dará cuenta del cambio, ni tampoco el servidor de terceros.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mDisplay = (TextView) findViewById(R.id.display);
context = getApplicationContext();
regid = getRegistrationId(context);
if (regid.length() == 0) {
registerBackground();
}
gcm = GoogleCloudMessaging.getInstance(this);
}
private String getRegistrationId(Context context) {
final SharedPreferences prefs = getGCMPreferences(context);
String registrationId = prefs.getString(PROPERTY_REG_ID, "");
if (registrationId.length() == 0) {
Log.v(TAG, "Registration not found.");
return "";
}
int registeredVersion = prefs.getInt(PROPERTY_APP_VERSION, Integer.MIN_VALUE);
int currentVersion = getAppVersion(context);
if (registeredVersion != currentVersion || isRegistrationExpired()) {
Log.v(TAG, "App version changed or registration expired.");
return "";
}
return registrationId;
}
private boolean isRegistrationExpired() {
final SharedPreferences prefs = getGCMPreferences(context);
long expirationTime =
prefs.getLong(PROPERTY_ON_SERVER_EXPIRATION_TIME, -1);
return System.currentTimeMillis() > expirationTime;
}
EDITAR (14.08.2013):
Google volvió a cambiar su aplicación de demostración (hace dos días). Esta vez eliminaron la lógica que considera que el ID de registro caduca después de 7 días. Ahora solo actualizan el ID de registro cuando se instala una nueva versión de la aplicación.
EDITAR (24.04.2014):
En aras de la integridad, aquí están las palabras de Costin Manolache (tomadas de aquí ), un desarrollador de Google involucrado en el desarrollo de GCM, sobre el tema:
La actualización 'periódica' nunca ocurrió y la actualización del registro no está incluida en la nueva biblioteca de GCM.
La única causa conocida para el cambio de ID de registro es el antiguo error de que las aplicaciones se anulan automáticamente si reciben un mensaje mientras se actualizan. Hasta que se solucione este error, las aplicaciones aún deben llamar a register () después de la actualización, y hasta ahora la ID de registro puede cambiar en este caso. Llamar a unregister () explícitamente generalmente también cambia el ID de registro.
La sugerencia / solución es generar su propio identificador aleatorio, guardado como preferencia compartida, por ejemplo. En cada actualización de la aplicación, puede cargar el identificador y el ID de registro potencialmente nuevo. Esto también puede ayudar a rastrear y depurar los cambios de actualización y registro en el lado del servidor.
Esto explica la implementación actual de la aplicación oficial de demostración de GCM.
com.google.android.c2dm.intent.REGISTRATION
nunca debe manejarse al usar la GoogleCloudMessaging
clase para registrarse.