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
- Configura Firebase Cloud Messaging en la teva aplicació Android.
- Implementa la classe
MyFirebaseMessagingService
per gestionar les notificacions. - Personalitza el comportament de les notificacions afegint dades addicionals al payload.
- 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
- Introducció a l'autenticació de Firebase
- Autenticació amb correu electrònic i contrasenya
- Autenticació amb xarxes socials
- Gestió d'usuaris
Mòdul 3: Base de dades en temps real de Firebase
- Introducció a la base de dades en temps real
- Lectura i escriptura de dades
- Estructura de dades i regles de seguretat
- Capacitats fora de línia
Mòdul 4: Cloud Firestore
- Introducció a Cloud Firestore
- Model de dades de Firestore
- Operacions CRUD
- Consultes avançades
- Regles de seguretat
Mòdul 5: Emmagatzematge de Firebase
- Introducció a l'emmagatzematge de Firebase
- Carregar fitxers
- Descarregar fitxers
- Metadades de fitxers i seguretat
Mòdul 6: Missatgeria en el núvol de Firebase
- Introducció a la missatgeria en el núvol
- Enviar notificacions
- Gestionar notificacions
- Funcions avançades de missatgeria
Mòdul 7: Analítica de Firebase
Mòdul 8: Funcions de Firebase
Mòdul 9: Monitoratge del rendiment de Firebase
- Introducció al monitoratge del rendiment
- Configuració del monitoratge del rendiment
- Analitzar dades de rendiment