消息过滤

更新时间: 2024/03/14 16:36:30

网易云信 NIM IM SDK 提供消息过滤器,注册过滤器后可过滤消息。消息过滤后,SDK 将不对其进行存储,也不会上抛给消息接收回调,因此应用层不会收到对应的消息。

  • 建议在 SDK 初始化后 Application 启动时注册消息过滤器,保证漫游或离线的消息也能够回调此过滤器进行过滤。
  • 消息过滤仅对在线消息、离线消息、漫游消息有效。本地和云端历史记录无法过滤。

前提条件

已完成 SDK 初始化

使用场景

适用于过滤用户不需要关注的消息(如群头像变更通知消息),使用户免受过多信息的干扰。

实现方法

调用registerIMMessageFilter方法注册过滤器,过滤器会将接收到的通知类消息对象,按照开发者应用上层定义的逻辑进行过滤。

请勿在通知消息过滤函数或方法中进行耗时操作,否则将导致线程阻塞。

该方法的参数说明如下:

返回值 IMMessageFilter接口 说明
boolean shouldIgnore(IMMessage message) 是否过滤消息:
  • 返回true表示过滤(SDK 将不存储此消息,应用上层不会收到此消息)
  • 默认false,即不过滤(默认存储到数据库并通知应用上层)

示例代码

如下示例代码以 SDK 过滤群头像变更通知消息为例。

java// 在 Application启动时注册,保证漫游、离线消息也能够回调此过滤器进行过滤。注意,过滤器的实现不要有耗时操作。
NIMClient.getService(MsgService.class).registerIMMessageFilter(new IMMessageFilter() {
        @Override
        public boolean shouldIgnore(IMMessage message) {
            if (UserPreferences.getMsgIgnore() && message.getAttachment() != null) {
                if (message.getAttachment() instanceof UpdateTeamAttachment) {
                    UpdateTeamAttachment attachment = (UpdateTeamAttachment) message.getAttachment();
                    for (Map.Entry<TeamFieldEnum, Object> field : attachment.getUpdatedFields().entrySet()) {
                        if (field.getKey() == TeamFieldEnum.ICON) {
                            return true; // 过滤
                        }
                    }
                }
            }
            return false; // 不过滤
        }
    });
此文档是否对你有帮助?
有帮助
去反馈
  • 前提条件
  • 使用场景
  • 实现方法
  • 示例代码