Saltar al contenido

Cómo manejar la notificación cuando la aplicación está en segundo plano en Firebase

Hola usuario de nuestro sitio web, encontramos la respuesta a tu pregunta, desplázate y la verás más abajo.

Solución:

1. ¿Por qué sucede esto?

Hay dos tipos de mensajes en FCM (Firebase Cloud Messaging):

  1. Mostrar mensajes: Estos mensajes activan el onMessageReceived() devolución de llamada solo cuando su aplicación está en primer plano
  2. Mensajes de datos: Estos mensajes activan el onMessageReceived() llamar de vuelta incluso si tu aplicación está en primer plano/fondo/muerto

NOTA: El equipo de Firebase no ha desarrollado una interfaz de usuario para enviar data-messages a sus dispositivos, todavía. ¡Deberías usar tu servidor para enviar este tipo!

2. ¿Cómo?

Para lograr esto, debe realizar un POST solicitud a la siguiente URL:

POST https://fcm.googleapis.com/fcm/send

Encabezados

  • Llave:Content-Type, Valor:application/json
  • Llave:Authorization, Valor:key=

Cuerpo usando temas


    "to": "/topics/my_topic",
    "data": 
        "my_custom_key": "my_custom_value",
        "my_custom_key2": true
     

O si quieres enviarlo a dispositivos específicos


    "data": 
        "my_custom_key": "my_custom_value",
        "my_custom_key2": true
     ,
    "registration_ids": ["device-token","device2-token","device3-token"]

NOTA: Asegúrate de estar sin agregar JSON key notification
NOTA: Para conseguir tu servidor keypuedes encontrarlo en la consola de firebase: Your project -> settings -> Project settings -> Cloud messaging -> Server Key

3. ¿Cómo manejar el mensaje de notificación push?

Así es como maneja el mensaje recibido:

@Override
public void onMessageReceived(RemoteMessage remoteMessage)  
     Map data = remoteMessage.getData();
     String myCustomKey = data.get("my_custom_key");

     // Manage data

Para hacer que la biblioteca de Firebase llame a su enMensajeRecibido() en los siguientes casos

  1. Aplicación en primer plano
  2. aplicación en segundo plano
  3. La aplicación ha sido eliminada

no debes poner JSON key ‘notificación’ en su solicitud a la API de Firebase, pero en su lugar use ‘datos’, consulte a continuación.

El siguiente mensaje no llamará a su enMensajeRecibido() cuando su aplicación está en segundo plano o eliminada, y no puede personalizar su notificación.


   "to": "/topics/journal",
   "notification": 
       "title" : "title",
       "text": "data!",
       "icon": "ic_notification"
    

pero en lugar de usar esto funcionará


  "to": "/topics/dev_journal",
   "data": 
       "text":"text",
       "title":"",
       "line1":"Journal",
       "line2":"刊物"
   
 

Básicamente, el mensaje se envía en el argumento RemoteMessage junto con su objeto de datos como Mapaluego puede administrar la notificación en onMessageReceived como en el fragmento aquí

@Override
public void onMessageReceived(RemoteMessage remoteMessage)  
     Map data = remoteMessage.getData();

     //you can get your text message here.
     String text= data.get("text");


     NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
        // optional, this is to make beautiful icon
             .setLargeIcon(BitmapFactory.decodeResource(
                                    getResources(), R.mipmap.ic_launcher))  
        .setSmallIcon(smallIcon)  //mandatory
      .......
    /*You can read more on notification here:
    https://developer.android.com/training/notify-user/build-notification.html
    
    */

Siento que todas las respuestas están incompletas, pero todas tienen algo que necesita para procesar una notificación que tiene datos cuando su aplicación está en segundo plano.

Siga estos pasos y podrá procesar sus notificaciones cuando su aplicación esté en segundo plano.

1. Agregue un filtro de intenciones como este:


      
           
           
      

a una actividad que desea procesar los datos de notificación.

  1. Enviar notificaciones con el siguiente formato:

     
     "notification" : 
            "click_action" : ".MainActivity", 
            "body" : "new Symulti update !", 
            "title" : "new Symulti update !", 
            "icon" : "ic_notif_symulti" , 
     "data":  ... ,
     "to" : "c9Vaa3ReGdk:APA91bH-AuXgg3lDN2WMcBrNhJZoFtYF9" 
    

los key aquí está agregar

"click_action" : ".MainActivity"

donde .MainActivity es la actividad con el filtro de intención que agregó en el paso 1.

  1. Obtenga información de “datos” de la notificación en onCreate de “.MainActivity”:

    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //get notification data info
        Bundle bundle = getIntent().getExtras();
        if (bundle != null) 
           //bundle must contain all info sent in "data" field of the notification
        
    
    

Y eso debería ser todo lo que necesitas hacer. Espero que esto ayude a alguien 🙂

Sección de Reseñas y Valoraciones

Recuerda algo, que puedes permitirte valorar este enunciado si topaste tu contrariedad .

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 4.5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *