¿Por qué los documentos de gcm recomiendan invalidar el registro en la actualización de la aplicación?

Desde los documentos de GCM:

Cuando se actualiza una aplicación, debe invalidar su ID de registro existente, ya que no se garantiza que funcione con la nueva versión. Debido a que no hay un método de ciclo de vida llamado cuando se actualiza la aplicación, la mejor manera de lograr esta validación es almacenando la versión de la aplicación actual cuando se almacena un ID de registro. Luego, cuando se inicia la aplicación, compare el valor almacenado con la versión de la aplicación actual. Si no coinciden, invalida los datos almacenados y vuelve a iniciar el proceso de registro.

Cuando los documentos indican que "no se garantiza que funcionen con la nueva versión", ¿se trata de una limitación de GCM o están especulando sobre 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 invente. ¿Tengo que volver a registrarme?

En caso afirmativo, ¿qué debo utilizar para detectar una "nueva versión": el código de versión o el nombre de la versión? Mi comprensión es que estos son "forma libre" y el desarrollador de la aplicación los establece a los valores que elija. Entonces, ¿qué pasa si pongo una actualización de la aplicación en la tienda pero no cambio versionName o versionCode; ¿Tendría que volver a registrarme con GCM?

Parece que lo que GCM realmente quiere es que la aplicación vuelva a registrarse cada vez que se inicia una nueva instalación por primera vez (y cada vez que se ejecuta sucesivamente hasta que se complete el registro), independientemente de los valores de versionName y versionCode. ¿Es una afirmación exacta?

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

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

La solución parece volver a registrarse en el primer lanzamiento después de una actualización, para garantizar que el ID de registro de la aplicación está activo.

El código de la versión es de hecho un número libremente seleccionado, pero debes aumentarlo en cada nueva versión que publiques en Google Play, para comprobar si ese número ha cambiado y saber que tu aplicación se actualizó y debes actualizar el registro.

EDITAR:

Esto también es relevante para el GCM sucesor de GCM , con muchos más documentos que explican este comportamiento y cómo escribir código correctamente.

Consulte: 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 versión haya cambiado forzando 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."); } 

Utilizaré el código de 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 Google Play Store, por lo que puede confiar en ella para detectar la versión de la aplicación.

  • ¿Qué significa gcm.notification.e = 1, en la carga de notificación push en Android?
  • ¿Existe un patrón de registro de GCM?
  • ¿Cómo puedo verificar la disponibilidad de API de Google Play Services? (Específicamente la API GCM)
  • ¿Debo usar GCM para la comunicación en tiempo real entre dispositivos?
  • Registro de Google Cloud Messaging AUTHENTICATION_FAILED
  • ¿El servicio GCM es confiable para notificaciones push a gran escala?
  • ¿Google Cloud Messaging envía mensajes a dispositivos que están en modo de espera?
  • ¿Cómo implementar servidor GCM-CCS XMPP de terceros utilizando openfire?
  • Migración de GCM 2.0 a API de InstanceID de GCM 3.0
  • Proyecto de API carece de ID de proyecto en Google Developers Console
  • Después de actualizar los servicios de reproducción de Google a las notificaciones de envío 8.4.0 mostradas por ellos mismos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.