2012-07-10 12 views
10

Desde el GCM docs:¿por qué los documentos de Gcm recomiendan invalidar el registro en la actualización de la aplicación?

Cuando se actualiza una aplicación, se debe invalidar su ID registro existente, ya que no se garantiza que funcione con la nueva versión. Debido a que no se llama a ningún método de ciclo de vida cuando la aplicación es actualizada, la mejor forma de lograr esta validación es almacenando la versión actual de la aplicación cuando se almacena una ID de registro. A continuación, cuando se inicia la aplicación, compare el valor almacenado con la versión actual de la aplicación . Si no coinciden, invalide los datos almacenados y comience nuevamente el proceso de registro.

Cuando los documentos afirman que "no se garantiza que funcione con la nueva versión" es que una limitación GCM o están especulando acerca de los posibles cambios en el comportamiento de mi aplicación de una versión a otra?

Desde el lado de la aplicación, puedo garantizar más o menos que las versiones sucesivas funcionarán correctamente con respecto a GCM y cualquier formato de mensaje específico de la aplicación que fabrique. ¿Todavía necesito volver a registrarme?

En caso afirmativo, ¿qué debería usar para detectar una "nueva versión": código de versión o nombre de la versión? Tengo entendido que se trata de "forma libre" y el desarrollador de la aplicación los establece según los valores que elija. Entonces, ¿qué ocurre si pongo una actualización de la aplicación en la tienda pero no cambio versionName o versionCode? ¿Debería volver a registrarme con GCM?

Parece que lo GCM realidad quiere es que la aplicación para volver a registrar cada vez que una nueva instalación se pone en marcha por primera vez (y cada vez que se puso en marcha sucesivamente hasta que el registro se ha completado), independientemente de los valores de versionName y versionCode. ¿Es eso una declaración precisa?

Respuesta

13

No recuerdo dónde lo hemos leído, pero nos llamó la atención que cuando un dispositivo recibe un impulso cuando una aplicación no está instalada, Google invalidará la identificación de registro.

Esto tiene sentido si la aplicación está realmente desinstalada, pero si el dispositivo estaba en el medio de una actualización, se desinstala rápidamente y se vuelve a instalar, por lo que Google podría pensar erróneamente que el registro debe invalidarse.

Parece que la solución se vuelve a registrar en el primer lanzamiento después de una actualización, para garantizar que el ID de registro de su aplicación esté activo.

código de versión es de hecho un número libremente elegido, pero debe aumentarlo en cada nueva versión publicada a Google Play, por lo que puede asegurarse de que ese número ha cambiado, y conocer su aplicación había sido actualizado y que necesita para actualizar el registro.

EDIT:

Esto también es relevante para el sucesor C2DM 's GCM, con mucha más documentación que explica este comportamiento y la forma de escribir correctamente el código.

Ver: http://developer.android.com/google/gcm/client.html con todos los detalles.

Específicamente este código, donde getRegistrationId devolverá una cadena vacía en caso de que el código de la versión cambió obligando al cliente a registrarse de nuevo:

 if (checkPlayServices()) { 
      gcm = GoogleCloudMessaging.getInstance(this); 
      regid = getRegistrationId(context); 

      if (regid.isEmpty()) { 
       registerInBackground(); 
      } 
     } else { 
      Log.i(TAG, "No valid Google Play Services APK found."); 
     } 
+1

Gracias por esta buena información. Cuando se detecta un escenario de "primer lanzamiento", ¿es suficiente simplemente llamar a GCMRegistrar.register() nuevamente o debo intentar anular el registro de forma explícita? Supongo que lo primero, pero pensé que podría preguntar. – jph

+1

simplemente llamando al registro nuevamente será suficiente, pero no se olvide de pasar el nuevo ID de registro a su servidor – marmor

+0

He intentado probar su consejo. No lo vi. El ID de registro no cambió después de que instalé una nueva versión y registré el nuevo ID –

0

me gustaría utilizar el código de la versión para detectar la actualización de la aplicación. El Código de versión se ve obligado a cambiar cada vez que envíe una nueva versión a la tienda de Google Play, por lo tanto, puede confiar en él para detectar la versión de la aplicación.

Cuestiones relacionadas