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
- Uso de GCM en el estudio de Android
- En la notificación push mostrar una actividad / popup, en lugar del mensaje en la barra de estado
- Bandera de notificaciones push de Android que no aparece en algunos dispositivos
- Cómo capturar la aplicación de desinstalación en el dispositivo y dejar que el servidor sepa esto (iOS / Android)
- PushPlugin registro va a errorhandler mostrando 'Clase no encontrada' con cordova 4.0.0 para plataforma android
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.
- Registrar un dispositivo en GCM cada vez que se inicia la aplicación es el enfoque correcto?
- ¿Podemos usar VectorDrawable o VectorXML como iconos para notificaciones push en android?
- ¿Hay alguna razón específica para utilizar Amazon SNS en lugar de servicio directo Baidu
- 2 usuarios que usan el mismo dispositivo y la misma aplicación, pero diferente id de inicio - tienen diferentes id de registro gcm?
- Cómo comprobar si la aplicación está en primer plano o en segundo plano
- Ningún receptor de intenciones estableció AirShip Urbano
- No se puede obtener la notificación push desde el Dirigible Urbano
- No puede conectarse al servidor de Google Cloud Connection
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" />;
Mira esto. Supongo que esta es la respuesta correcta
https://support.layer.com/hc/en-us/articles/204496844-How-can-I-use-Layer-with-other-push-services-
- ¿Hay algún evento disparado cuando Android View se vuelve visible en la aplicación?
- ¿Qué es más rápido? Una intent.putExtras (Bundle con cadenas) o muchos intent.putExtra (String)?