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
MyFirebaseMessagingServiceper 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
MyFirebaseMessagingServiceestà 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
