Saltar al contenido

Firebase (FCM): abra la actividad y pase los datos al hacer clic en la notificación. androide

Este dilema se puede resolver de variadas maneras, sin embargo te mostramos la que en nuestra opinión es la resolución más completa.

Solución:

En primer lugar, pondré los detalles mencionados en los documentos de Manejo de mensajes.

En el resumen bajo el Ambas cosas fila, muestra que cuando la aplicación está encendida primer planola carga útil se manejará en su onMessageReceived().

Para abrir la actividad desde onMessageReceived()debe verificar si los datos que necesita están en la carga útil, si es así, llame a su actividad específica y luego pase todos los demás detalles que necesita a través de la intención.

Ahora, si la aplicación está en antecedentesse menciona en los documentos que la bandeja del sistema Android recibe la notificación y que el data La carga útil se puede recuperar de la extras de la intención.

Solo agregué los detalles de mi respuesta aquí, que prácticamente solo brinda la declaración de documentos y un enlace a una muestra:

Manejar mensajes de notificación en una aplicación en segundo plano

Cuando su aplicación está en segundo plano, Android envía mensajes de notificación a la bandeja del sistema. Un toque de usuario en la notificación abre el iniciador de aplicaciones de forma predeterminada.

Esto incluye mensajes que contienen tanto notificación como carga útil de datos (y todos los mensajes enviados desde la consola de Notificaciones). En estos casos, la notificación se envía a la bandeja del sistema del dispositivo y la carga útil de datos se entrega en los extras de la intención de su Actividad de iniciador.

Creo que esta respuesta de @ArthurThompson lo explica muy bien:

Cuando envía un mensaje de notificación con una carga útil de datos (notificación y datos) y la aplicación está en segundo plano, puede recuperar los datos de los extras de la intención que se inicia como resultado de que el usuario toque la notificación.

De la muestra de FCM que inicia MainActivity cuando se toca la notificación:

if (getIntent().getExtras() != null) 
    for (String key : getIntent().getExtras().keySet()) 
        String value = getIntent().getExtras().getString(key);
        Log.d(TAG, "Key: " + key + " Value: " + value);
    

Después de probar todas las respuestas y los blogs se les ocurrió una solución. si alguien necesita por favor use este video como referencia

ADEMÁS del video para agregar intentos en MyFirebaseMessagingService:

public class MyFirebaseMessagingService extends FirebaseMessagingService 

private static final String TAG = "MyFirebaseMsgService";

@Override
public void onMessageReceived(RemoteMessage remoteMessage) 

    String user_id = "0";
    String date = "0";
    String hal_id = "0";
    String M_view = "0";

    if (remoteMessage.getData().size() > 0) 
        Log.d(TAG, "Message data payload: " + remoteMessage.getData());
        user_id = remoteMessage.getData().get("user_id");
        date = remoteMessage.getData().get("date");
        cal_id = remoteMessage.getData().get("hal_id");
        M_view = remoteMessage.getData().get("M_view");
    

    String click_action = remoteMessage.getNotification().getClickAction();

    //Calling method to generate notification
    sendNotification(remoteMessage.getNotification().getBody(), remoteMessage.getNotification().getTitle(), user_id, date, hal_id, M_view, click_action);


private void sendNotification(String messageBody, String messageTitle, String user_id, String date, String hal_id, String M_view, String click_action) 
    Intent intent = new Intent(click_action);
    intent.putExtra("user_id", user_id);
    intent.putExtra("date", date);
    intent.putExtra("hal_id", hal_id);
    intent.putExtra("M_view", M_view);

    PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent,
            PendingIntent.FLAG_ONE_SHOT);

    Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this);
    notificationBuilder.setSmallIcon(R.drawable.ic_launcher)
            .setContentTitle(messageTitle)
            .setContentText(messageBody)
            .setAutoCancel(true)
            .setSound(defaultSoundUri)
            .setContentIntent(pendingIntent);

    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(0, notificationBuilder.build());

y en la nueva actividad de NotificationReceive en onCreate o onResume agregue esto

    notification_Y_N = (TextView) findViewById(R.id.notification_Y_N);
    user_id_text = (TextView) findViewById(R.id.user_id_text);

    Intent intent_o = getIntent();
    String user_id = intent_o.getStringExtra("user_id");
    String date = intent_o.getStringExtra("date");
    String hal_id = intent_o.getStringExtra("hal_id");
    String M_view = intent_o.getStringExtra("M_view");

    notification_Y_N.setText(date);
    user_id_text.setText(hal_id);

para invocar el onMessageReceived() necesitará usar otro método para enviar notificaciones (como crear una API web para enviar notificaciones). Luego usándolo,

elimine la carga útil de notificación de sus mensajes de FCM para que la carga útil de datos se entregue al onMessageReceived() método.

Cuando su aplicación está en segundo plano, la carga útil de datos se entrega al onMessageReceived método solo si no hay carga útil de notificación.

En caso de que existan ambas cargas útiles, el sistema maneja automáticamente la parte de la notificación (bandeja del sistema) y su aplicación obtiene la carga útil de datos en los extras de la intención de la actividad del iniciador (después de que el usuario toque la notificación).

Para obtener más información, consulte los siguientes enlaces:

  • ¿Por qué está pasando esto? ¿Cómo? ¿Cómo manejar las notificaciones push?
  • Respuesta original de kws. Dale un voto positivo.

Nos encantaría que puedieras mostrar este artículo si te fue útil.

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



Utiliza Nuestro Buscador

Deja una respuesta

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