Mensajería en la nube de Google para Android (GCM) e identificador de emisión incorrecta

Estoy intentando utilizar el servicio de GCM en mi aplicación android.

Para eso, he utilizado la documentación de Android de http://developer.android.com/guide/google/gcm/gcm.html

He creado el proceso de registro del lado del cliente con la identificación del remitente, etc y la aplicación del lado del servidor donde estoy usando el ID de registro y la identificación del remitente para enviar mensajes.

Cuando estoy instalando la aplicación en mi teléfono a través de Eclipse, las notificaciones push funcionan bien, por lo que el identificador del remitente que tengo es correcto.

Luego, cuando exporte el archivo apk con Eclipse e lo instale en mi teléfono, estoy recibiendo el mensaje de error que el SenderId es incorrecto

MissmatchedSenderId 

Cualquier persona tiene una idea porqué estoy consiguiendo esto.

He leído estos temas:

¿Por qué obtengo "MismatchSenderId" desde el lado del servidor GCM?

Cuando envío mensajes usando GCM, sigo obteniendo la respuesta 'MismatchSenderId'

Pero lo extraño en mi caso es que todo funciona bien antes de exportar la aplicación como apk y luego tengo este problema.

Cualquier idea es sobre todo bienvenida.

En realidad tenía el mismo problema, y ​​estaba investigando más de 10 horas.

¡Finalmente encontré el problema! Nada relacionado con la clave de API de servidor o la clave de API de explorador o SenderID. El problema fue la documentación de Google:

 final String regId = GCMRegistrar.getRegistrationId(this); if (regId.equals("")) { GCMRegistrar.register(this, SENDER_ID); } else { Log.v(TAG, "Already registered"); } 

Google dice que usted tiene que llamar a la función getRegistrationId y sólo si el id es un registro de llamada vacío! Lo que no funcionó para mí en absoluto … cuando hice que siempre he vuelto MismatchSenderId al enviar a esta regId.

Mi solución fue: Siempre llame

 GCMRegistrar.register(this, SENDER_ID); 

Y cuando la función

 protected void onRegistered( Context c, String regId ) 

Se llama guardar el regId en mi base de datos del servidor.

Si lo hago de esta manera, todo funciona bien!

La combinación de SenderID y clave de API proporcionada por GCM es única por aplicación.

Nos enfrentamos al problema de desajuste de senderID, cuando actualizamos nuestro senderID en el lado del cliente pero seguíamos usando la clave API relacionada con el antiguo senderID.

Pudimos resolver el problema después de actualizar la clave de API del servidor. También la respuesta por @schurtertom es muy útil

  • Android GCM un dispositivo tiene múltiples registro
  • GCM de Android GCMRegistrar checkManifest (this) - Error de archivo de manifiesto
  • Gcm GoogleCloudMessaging nueva implementación
  • ¿Cómo enviar notificaciones a Android desde php?
  • Servicio de notificación de Google / Apple Push (APNS / GCM)
  • ¿Google Cloud Messaging envía mensajes a dispositivos que están en modo de espera?
  • GCM con sistema de inicio de sesión
  • ¿Dónde colocar el archivo google-services.json en el proyecto eclipse?
  • Cómo enviar notificaciones push de Android a través de GCM en C # .Net
  • GCM: por qué mi aplicación se bloquea en GCMRegistrar.checkDevice (this);
  • Enviar mensaje descendente a google ccs con nodo js
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.