En aquest tema, aprendrem com gestionar les notificacions enviades a través de Firebase Cloud Messaging (FCM). Ens centrarem en com rebre i processar notificacions en una aplicació, així com en com personalitzar el comportament de les notificacions segons les necessitats de l'aplicació.

Objectius del tema

  • Comprendre com rebre notificacions en una aplicació.
  • Aprendre a personalitzar el comportament de les notificacions.
  • Gestionar notificacions en primer pla i en segon pla.

Rebre notificacions

Quan una notificació és enviada a través de FCM, l'aplicació pot rebre-la de dues maneres diferents: en primer pla (quan l'aplicació està oberta) o en segon pla (quan l'aplicació està tancada o en segon pla).

Rebre notificacions en primer pla

Quan l'aplicació està en primer pla, podem utilitzar el mètode onMessageReceived per gestionar les notificacions. A continuació es mostra un exemple de com implementar aquest mètode en una aplicació Android:

public class MyFirebaseMessagingService extends FirebaseMessagingService {
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        // Verificar si el missatge conté dades
        if (remoteMessage.getData().size() > 0) {
            Log.d(TAG, "Message data payload: " + remoteMessage.getData());
            // Gestionar les dades del missatge aquí
        }

        // Verificar si el missatge conté una notificació
        if (remoteMessage.getNotification() != null) {
            Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
            // Gestionar la notificació aquí
            sendNotification(remoteMessage.getNotification().getBody());
        }
    }

    private void sendNotification(String messageBody) {
        Intent intent = new Intent(this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);

        String channelId = getString(R.string.default_notification_channel_id);
        NotificationCompat.Builder notificationBuilder =
                new NotificationCompat.Builder(this, channelId)
                        .setSmallIcon(R.drawable.ic_stat_ic_notification)
                        .setContentTitle(getString(R.string.fcm_message))
                        .setContentText(messageBody)
                        .setAutoCancel(true)
                        .setContentIntent(pendingIntent);

        NotificationManager notificationManager =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        notificationManager.notify(0, notificationBuilder.build());
    }
}

Rebre notificacions en segon pla

Quan l'aplicació està en segon pla, el sistema operatiu gestiona la notificació automàticament i la mostra a l'usuari. No obstant això, si volem personalitzar el comportament de la notificació, podem fer-ho mitjançant la configuració del payload de la notificació.

Personalitzar el comportament de les notificacions

Podem personalitzar les notificacions afegint dades addicionals al payload de la notificació. A continuació es mostra un exemple de com enviar una notificació amb dades personalitzades des del servidor:

{
  "to": "device_token",
  "notification": {
    "title": "Notificació personalitzada",
    "body": "Aquest és el cos de la notificació"
  },
  "data": {
    "key1": "valor1",
    "key2": "valor2"
  }
}

En l'aplicació, podem accedir a aquestes dades mitjançant el mètode onMessageReceived:

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    // Verificar si el missatge conté dades
    if (remoteMessage.getData().size() > 0) {
        Log.d(TAG, "Message data payload: " + remoteMessage.getData());
        // Gestionar les dades del missatge aquí
    }

    // Verificar si el missatge conté una notificació
    if (remoteMessage.getNotification() != null) {
        Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
        // Gestionar la notificació aquí
        sendNotification(remoteMessage.getNotification().getBody());
    }
}

Exercici pràctic

Objectiu

Implementar la gestió de notificacions en una aplicació Android utilitzant Firebase Cloud Messaging.

Passos

  1. Configura Firebase Cloud Messaging en la teva aplicació Android.
  2. Implementa la classe MyFirebaseMessagingService per gestionar les notificacions.
  3. Personalitza el comportament de les notificacions afegint dades addicionals al payload.
  4. Prova l'aplicació enviant notificacions des de la consola de Firebase.

Solució

public class MyFirebaseMessagingService extends FirebaseMessagingService {
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        if (remoteMessage.getData().size() > 0) {
            Log.d(TAG, "Message data payload: " + remoteMessage.getData());
        }

        if (remoteMessage.getNotification() != null) {
            Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
            sendNotification(remoteMessage.getNotification().getBody());
        }
    }

    private void sendNotification(String messageBody) {
        Intent intent = new Intent(this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);

        String channelId = getString(R.string.default_notification_channel_id);
        NotificationCompat.Builder notificationBuilder =
                new NotificationCompat.Builder(this, channelId)
                        .setSmallIcon(R.drawable.ic_stat_ic_notification)
                        .setContentTitle(getString(R.string.fcm_message))
                        .setContentText(messageBody)
                        .setAutoCancel(true)
                        .setContentIntent(pendingIntent);

        NotificationManager notificationManager =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        notificationManager.notify(0, notificationBuilder.build());
    }
}

Errors comuns i consells

  • Error: No es reben notificacions en primer pla. Assegura't que la classe MyFirebaseMessagingService està registrada en el manifest de l'aplicació.
  • Error: Les notificacions no es mostren correctament. Revisa la configuració del payload de la notificació i assegura't que conté tots els camps necessaris.
  • Consell: Utilitza el canal de notificació adequat per assegurar-te que les notificacions es mostren correctament en dispositius amb Android Oreo o superior.

Conclusió

En aquest tema, hem après com gestionar notificacions en una aplicació Android utilitzant Firebase Cloud Messaging. Hem vist com rebre notificacions tant en primer pla com en segon pla, i com personalitzar el comportament de les notificacions. A més, hem practicat aquests conceptes amb un exercici pràctic. En el següent tema, explorarem les funcions avançades de missatgeria de Firebase.

Curs de Firebase

Mòdul 1: Introducció a Firebase

Mòdul 2: Autenticació de Firebase

Mòdul 3: Base de dades en temps real de Firebase

Mòdul 4: Cloud Firestore

Mòdul 5: Emmagatzematge de Firebase

Mòdul 6: Missatgeria en el núvol de Firebase

Mòdul 7: Analítica de Firebase

Mòdul 8: Funcions de Firebase

Mòdul 9: Monitoratge del rendiment de Firebase

Mòdul 10: Laboratori de proves de Firebase

Mòdul 11: Temes avançats de Firebase

© Copyright 2024. Tots els drets reservats