Cómo evitar que un usuario reciba su propia notificación de chat gcm en Pubnub
Hemos creado una aplicación de chat utilizando pubnub api en phonegap. Estamos utilizando un canal único común para dos usuarios (digamos A & B) para enviar y recibir mensajes.
Además, además de esto, hemos habilitado la notificación pubcm gcm para que los usuarios puedan recibir notificaciones cuando su aplicación esté en segundo plano o cerrada.
- ¿Por qué PhoneGap / Cordova no está agregando la plataforma android?
- Cordova crea script / Ant falla ejecutando aapt
- Error al reproducir el video subido a través de PhoneGap FileTransfer
- Ionic App w / Cordova, ¿cómo incrustar la cámara?
- Cómo cambiar versionCode con cordova?
Ahora cuando un usuario A envía un mensaje de pubnub a B e inmediatamente cambia la aplicación o lo oculta, entonces el usuario A mismo recibe también una notificación de gcm de su propio mensaje.
Este es el único problema que nos preocupa. Descansar todo está funcionando bien.
- Cordova 3.5.0 - FALLA renombrando /storage/emulated/0/tmprecording.3gp
- Resoluciones de pantalla
- ¿Cómo forzar una orientación horizontal para aplicaciones móviles construidas con cordova-cli?
- Geolocalización de phonegap allways fail on timeout
- Cómo manejar múltiples notificaciones push en android usando GCM en phonegap
- Usando el emulador de Genymotion con el marco iónico
- jQueryMobile se ejecuta en Android / PhoneGap rechaza .load / .ajax
- Escala de una aplicación Phonegap para diferentes tamaños de pantalla de Android / densidades?
En la devolución de llamada de suscripción, ¿puede detectar si la aplicación no está en primer plano y, si no está en primer plano, devolver inmediatamente?
De esta manera, la lógica que entregaría mensajes recibidos a la lógica de su aplicación simplemente no disparar a menos que esté en primer plano …?
Me encontré con el mismo problema similar que usted hizo y así que arreglé algo juntos que funciona para mí.
private boolean isFromSelf(final Object msgSent){ boolean isEcho = false; String msgText = msgSent.toString(); JSONObject j; String receiver = currentUserId; //a unique string ID for each user try { j = new JSONObject(msgText); String senderID = j.get("senderID").toString(); if (senderID.equals(receiver)){ isEcho = true; } } catch(Exception e) { e.printStackTrace(); } return isEcho; }
Se hace la suposición de que cada usuario que publica un mensaje a un canal enviará su Id único como "senderID" incluido en la carga útil. Entonces, cuando un mensaje es recibido, extraerlo de la carga útil y comprobarlo contra la identificación del usuario. Así que agrego isFromSelf método como la primera cosa que se llama cuando recibo un mensaje, como este:
pN = new Pubnub(pub_key, sub_key); try { pN.subscribe(CHANNEL_NAME, new Callback() { public void successCallback(String channel, Object msg) { if (!isFromSelf(msg)) { //Now add here what you want to do with the message } } public void errorCallback(String channel, PubnubError error) { Toast.makeText(MainActivity.this, "there was an error connecting", Toast.LENGTH_SHORT).show(); } }); } catch (PubnubException e) { e.printStackTrace(); }
Por lo tanto, en su caso, tal vez junte una comprobación de senderID para que si recibe un GCM de usted mismo, no muestre ninguna notificación en absoluto, incluso si la aplicación está en segundo plano.
- ¿Cómo salir (sólo) de la actividad actual si se produce UncaughtExceptionHandler?
- ¿Qué es la actividad inactiva y por qué se llama después del inicio de la aplicación?