Las notificaciones de inserción de Parse.com no funcionan de forma consistente recibiendo el error "GCM -MISMATCH SENDER ID"

Las notificaciones push de parse.com no funcionan constantemente. Las notificaciones de empuje aleatorio fallarán, lo que resultará en un error de GCM – MISMATCH SENDER ID. Es mi entendimiento que programáticamente no tenemos que hacer nada con el GCM porque parse.com envía el objectId a GCM. Sido capaz de identificar cualquier razón específica por la que este error se produce a veces y otras veces no.Además, estoy usando la versión Parse, 1.10.2.

Mi clase de aplicación tiene las siguientes

Parse.initialize(this, APPLICATION_ID_DEBUG, CLIENT_KEY_DEBUG); Parse.setLogLevel(Parse.LOG_LEVEL_VERBOSE); ParsePush.subscribeInBackground(Constants.CHANNEL, new SaveCallback() { @Override public void done(ParseException e) { if (Utils.checkIfNull(e)) { // subscribed to channel } else { // failed to subscribe to channel } } }); 

Cuando el usuario inicia sesión en mi aplicación, adjunto un canal a ellos. Los datos de canal que guardo son solo la identificación única del usuario que obtengo del servidor.

  List<String> arryChannel = new ArrayList<>(); arryChannel.add(uniqueUserId); final ParseInstallation parseInstallation = ParseInstallation.getCurrentInstallation(); parseInstallation.put(Constants.CHANNEL, arryChannel); parseInstallation.saveInBackground(new SaveCallback() { @Override public void done(ParseException e) { if (Utils.checkIfNull(e)) { // update channel with user's unique id } else { // failed to update channel with user unique id } } }); 

Finalmente, cuando el usuario se desconecta, los cancelo de su canal. He añadido unsubscribe para tratar de impedir que un dispositivo reciba varias notificaciones push porque se han registrado como usuarios múltiples en la aplicación y se han suscrito a varios canales. Lo siguiente es cómo se ve mi código cuando cierra la sesión.

  ParsePush.unsubscribeInBackground(Constants.CHANNEL, new SaveCallback() { @Override public void done(ParseException e) { if (Utils.checkIfNull(e)) { // successfully unsubscribed to channel // save the updated (unsubscribed) parse installation final ParseInstallation parseInstallation = ParseInstallation.getCurrentInstallation(); parseInstallation.put(Constants.CHANNEL, new ArrayList<String>()); parseInstallation.saveInBackground(new SaveCallback() { @Override public void done(ParseException e) { if (Utils.checkIfNull(e)) { // add whatever logs here to check for any issues with unsubscribing } else { // failed to update channel } } }); } else { Logger.e("PARSE", "failed to unsubscribed to channel: " + e.getMessage()); } } }); 

El resultado de esta implementación es que cuando las notificaciones push no funcionan, continuará fallando durante unas 50-100 veces. Entonces comenzará a trabajar por cerca de 150-200 veces. Entonces vuelve a no funcionar. No es un tipo de trabajo, no de trabajo de ida y vuelta. Es más de un fracaso, un fallo, un fallo multiplicado veces y luego éxito, éxito, éxito varias veces. Cualquier ayuda en lo que me falta en mi implementación es apreciada. Gracias por adelantado.

Por fin he descubierto la respuesta a esta pregunta! El tema no tenía nada que ver con mi implementación. Para cualquier otra persona que experimente el mismo conflicto, busque otros servicios de terceros que también estén utilizando notificaciones push. Para mí, Mixpanel fue el culpable. Cuando mixpanel.initPushHandling() de mi codebase, todo comenzó a funcionar. Y esto tiene sentido, porque cuando se inicializan notificaciones push para mixpanel, se pasa un valor que se utiliza para GCMSenderID. Las notificaciones de notificación de análisis funcionan de forma diferente. Con parse.com, no tiene que enviar un GCMSenderID, porque el análisis automáticamente enviará una objectId para realizar sus notificaciones push. Entre los dos, esto provoca un error GCM-MISMATCH-SENDER.

Así que la solución es, eliminar cualquier tipo de servicios que pueden estar en conflicto con parse.com. Y siéntase libre de usar mi implementación, es bueno. ¡Aclamaciones!

Me enfrenté al problema y después de algunos rummage, finalmente encontró la solución. Como Parse dijo en su documentación , debe proporcionar cada Sender_ID que su aplicación utiliza para empujar mensajes, si utiliza otro proveedor de push además de Parse. Echa un vistazo a continuación:

El SDK Android de Parse elige una configuración predeterminada razonable para que no tenga que preocuparse por los ID de registro de GCM, los ID de remitente ni las claves de la API. En particular, el SDK registrará automáticamente su aplicación para que la empuje al inicio utilizando el ID de remitente de Parse ( 1076345567071 ) y almacenará el ID de registro resultante en el campo deviceToken de ParseInstallation actual de la aplicación.

Sin embargo, como característica avanzada para los desarrolladores que desean enviar empujes desde varios proveedores de envío, Parse le permite registrar su aplicación para empujes con identificadores de remitente GCM adicionales. Para ello, especifique el ID de remitente de GCM adicional con la siguiente etiqueta <meta-data> como hijo del elemento <application> en AndroidManifest.xml de su aplicación:

 <meta-data android:name="com.parse.push.gcm_sender_id" android:value="id:YOUR_SENDER_ID" />; 

En el fragmento de ejemplo anterior, YOUR_SENDER_ID debe reemplazarse por un ID numérico de remitente GCM. Tenga en cuenta que el Parse SDK espera que prefija su ID de remitente con un prefijo id:, como se muestra en el fragmento de muestra.

Si desea registrar su aplicación con varios ID de remitente adicionales, el valor de android: en el elemento <meta-data> anterior debe contener una lista delimitada por comas de ID de remitente, como en el siguiente fragmento:

 <meta-data android:name="com.parse.push.gcm_sender_id" android:value="id:YOUR_SENDER_ID_1,YOUR_SENDER_ID_2,YOUR_SENDER_ID_3" />; 
  • Abrir la aplicación Android desde la notificación PUSH
  • Parse.com runtime crash - android
  • Cómo agregar una notificación de inserción en mi propia aplicación de Android
  • GCM cómo anular el registro de un dispositivo con GCM y servidor de terceros
  • El LED de notificación de Firebase parpadea
  • GET_ACCOUNTS durante el uso de GCM - ¿Por qué es necesario?
  • Notificaciones push de Android en China
  • Error interno: la clase de receptor de reintento no se ha configurado todavía
  • El icono de notificación push de Android 5.1 está en blanco
  • No recibe mensajes de GCM en Android después de que la aplicación se aleje de tareas recientes
  • ¿Google Cloud Messaging envía mensajes a dispositivos que están en modo de espera?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.