Firebase push notificaciones actualización DB

Estoy tratando de enviar algunos datos a mis usuarios a través del nuevo servicio de notificaciones push de Firebase.

Estoy agregando algunos elementos de datos personalizados de "valor-clave" con "Texto de mensaje" – "dbupdate" para detectar si se trata de un mensaje de actualización o una notificación de envío normal que quiero mostrar a mis usuarios.

En mi receptor comprobar i hay datos personalizados y ejecutar la actualización, si es cierto. Si este no es el caso, muestro una notificación normal con el mensaje de texto.

Funciona sólo cuando mi aplicación se abrió. Si la aplicación está cerrada, la notificación se muestra de todos modos, y mi cheque si no se está ejecutando,

Algún código:

public class PushMessageService extends FirebaseMessagingService { @Override public void onMessageReceived(RemoteMessage remoteMessage) { super.onMessageReceived(remoteMessage); Map<String,String> data = remoteMessage.getData(); String link = data.get("link"); String name = data.get("name"); if (link!=null) { Log.d("link",link); Log.d("name",name); UpdateHelper.Go(this, link, name); } else { NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.ic_shop_white_24dp) .setAutoCancel(true) .setContentTitle(remoteMessage.getNotification().getTitle()) .setContentText(remoteMessage.getNotification().getBody()); NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); mNotificationManager.notify(5, mBuilder.build()); } } } 

ejemplo de notficiation aquí

¿Por qué es así? ¿Qué puedo hacer para ejecutar mi código incluso cuando la aplicación está cerrada?

Según mi experiencia con Firebase push:

Problema: Cuando se envía una notificación push a través de "Firebase console", la notificación sólo se recibe cuando la aplicación está en primer plano. Si la aplicación se cancela o en segundo plano, la notificación se muestra sólo en Version> = lollipop con un icono de notificación incorrecto y / o se abre la actividad de lanzador predeterminada en la aplicación aunque haya definido una actividad diferente en PendingIntent.

Según los documentos de Firebase, un mensaje push se divide en 2 pars, ellos los llaman: Docs Link here

  1. notificación
  2. carga de datos

introduzca la descripción de la imagen aquí

Solución:

Hay dos maneras de enviar un mensaje "Push".

1. Consola Firebase

Consola

2. API de mensajería : imagen que muestra una solicitud utilizando el cliente REST avanzado

Solicitud de Curl

El mensaje Push se recibe en el onMessageReceived(...) . El método onMessageReceived(...) no se llamará si la aplicación está en segundo plano o se ha eliminado sólo cuando el mensaje se envía a través de Firebase Console.

Si envía el mensaje a través de la API, funciona bien. El mensaje se entrega en el onMessageReceived(...) si la aplicación está en segundo plano, en primer plano o se ha eliminado. (Precaución: Esto funciona bien en >=Lollipop – Comportamiento para Android 4.4 o inferior sigue siendo impredecible.

Actualizar:

Puede enviar un mensaje push desde la API (llamada firebase como msg de aguas abajo) de la siguiente manera: https://firebase.google.com/docs/cloud-messaging/downstream

Envío de mensajes descendentes desde el servidor

Para dirigir o "dirigir" un mensaje descendente, el servidor de aplicaciones se establece con el token de registro de la aplicación cliente de recepción. Puede enviar mensajes de notificación con campos predefinidos o mensajes de datos personalizados; vea Notificaciones y datos en la carga útil del mensaje para obtener detalles sobre el soporte de carga útil. Los ejemplos en esta página muestran cómo enviar mensajes de datos en protocolos HTTP y XMPP.

Solicitud HTTP POST

 https://fcm.googleapis.com/fcm/send Content-Type:application/json Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA { "data": { "score": "5x1", "time": "15:10" }, "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..." } 

Cuando la aplicación está en primer plano, las notificaciones se pasarán a FirebaseMessagingService.onMessageReceived() . Cuando la aplicación no está en primer plano, la notificación será gestionada por el centro de notificaciones predeterminado.

Ver también:

  • ¿Cómo empujar notificación firebase sólo cuando CheckBoxPreference está marcada?

  • Aplicación abierta en la notificación de firebase recibida (FCM)

En Android , si desea actualizar algo en la aplicación, ya sea que la aplicación se encuentre en estado forground / background / terminated, entonces la mejor manera es eliminar la carga útil de notificación y enviar sólo la carga de datos

 { "to" : "ee8....DYarin", "data" : { "key" : "value" } } 

En este caso onMessageReceived() se ejecutará. (En algunos dispositivos android como xiomi necesita habilitar autostart para su aplicación para procesar push en estados terminados)

En este caso, ¿cómo mostrará la notificación al usuario? Puede pasar el título y el cuerpo como etiquetas personalizadas en la carga de datos y generar la notificación de forma programada. Así que en Android todo va bien sin la carga de notificación.


Y si tienes la carga de notificación en Android, entonces los problemas son:

  • Si la aplicación está en forground everyting va bien, la notificación se muestra y onMessageReceived () se ejecuta
  • Si la aplicación está en estado de fondo / finalizado, la notificación se mostrará en tu dispositivo, pero enMessageReceived () sólo funcionará si haces clic en la notificación. Los usuarios tienen la tendencia a borrarlos a menudo y nuestro código en onMessageReceived () no se ejecutará.

También para habilitar esta funcionalidad de clic en la notificación, la carga útil de notificación debe contener la clave denominada click_action :

 "notification":{ "title":"Prime", "body" : "test", "click_action": "my_click_action_name" } 

Y necesitas registrar la acción como intent_filter en tu actividad

  <intent-filter> <action android:name="my_click_action_name" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> 

Cuando el usuario hace clic en la notificación, se onNewIntent() método onNewIntent() de la actividad correspondiente y la carga útil de datos está disponible en el intento intent.getExtras()

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.