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.

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.

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.

  • Aplicación Android phonegap que tiene problemas con SQlite y almacenamiento local en dispositivos Samsung Galaxy
  • Cordova no instala realmente la aplicación en el dispositivo Android
  • Android: no se puede ejecutar dex: se definen varios archivos dex
  • No se ha encontrado ninguna imagen de emulador al crear una aplicación de cromo móvil para Android
  • Android / PhoneGap: destruir la vista web cuando se va de fondo en lugar de keepRunning = false
  • Cordova File plugin nunca llega a estar listo en Android
  • CSS3 animación no funciona en Android 4.2
  • Cordova autenticación de huellas dactilares en el servidor
  • Cómo obtener su contexto en su plugin phonegap
  • Cordova error building - EPERM, operación no permitida
  • Cómo hacer que phonegap window.location.href no inicie Chrome en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.