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
- Las notificaciones de envío de GCM no funcionan si la aplicación está cerrada en algunos dispositivos
- El dispositivo deja de recibir emisiones de GCM hasta que la red se conmuta
- IsRegistered () vs. isRegisteredOnServer ()
- Mensaje de error del proyecto de ejemplo de GCM "No se pudo encontrar google-play-services_lib.apk"
- Las campañas de empuje de Facebook (Beta) no funcionan
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.
- Google cloud messaging sample
- Cómo personalizar la visualización y el tono de la notificación cuando se utiliza GCMReceiver y GcmListenerService
- Android NotificationManager que me da "ningún icono pequeño válido" error
- La aplicación de Android aparece cuando se recibe una notificación de envío de GCM en el dispositivo
- Enviar notificación push de un dispositivo Android a otro Uso de GCM
- Códigos de error de GCM
- Id de proyecto de Android GCM, ¿cuál?
- GCM 3.0 - gcm no muestra automáticamente la notificación con el parámetro de notificación
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
- ¿Puedo establecer atributos de nivel de API X en mi manifiesto cuando mi minSdkVersion es menor que X?
- Android volley Excepción de tiempo de espera al utilizar RequestFuture.get ()