要在显示通知之前运行代码以过滤Firebase云消息传递中的消息,可以使用Firebase Cloud Messaging (FCM) 的自定义通知处理程序。以下是一个示例解决方案:
public class MyFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
// 在此处运行代码以过滤消息
// 调用默认的通知处理程序来显示通知
super.onMessageReceived(remoteMessage);
}
}
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
// 获取消息的标题和正文
String title = remoteMessage.getNotification().getTitle();
String body = remoteMessage.getNotification().getBody();
// 获取消息的数据字段
Map data = remoteMessage.getData();
// 示例过滤逻辑:只显示标题包含关键字 "important" 的通知
if (title != null && title.toLowerCase().contains("important")) {
// 创建并显示通知
showNotification(title, body);
}
// 调用默认的通知处理程序来显示通知
super.onMessageReceived(remoteMessage);
}
private void showNotification(String title, String body) {
// 创建通知的意图
Intent intent = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
// 创建通知
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "channel_id")
.setContentTitle(title)
.setContentText(body)
.setSmallIcon(R.drawable.ic_notification)
.setContentIntent(pendingIntent)
.setAutoCancel(true);
// 显示通知
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, builder.build());
}
在这个示例中,我们只显示标题包含关键字 "important" 的通知。你可以根据自己的需求来修改过滤逻辑。
请确保将上述代码与你的项目中的正确包名和资源文件对应起来,并在 AndroidManifest.xml 文件中设置正确的通知渠道 (channel)。