消息过滤

更新时间: 2024/11/01 16:50:53

网易云信即时通讯 SDK(NetEase IM SDK,简称 NIM SDK)支持消息过滤功能。

支持平台

本文内容适用的开发平台或框架如下表所示:

Android iOS macOS/Windows Web/uni-app/小程序 HarmonyOS Flutter
-️ -️ -️ -️ ✔️️ -️

技术原理

NIM SDK 提供消息过滤器,注册过滤器后可过滤消息(一般针对通知消息)。消息过滤后,SDK 将不对其进行存储至数据库,也不会上抛给消息接收回调,因此应用层不会收到对应的消息。

  • 消息过滤功能建议与本地会话功能一起使用。若在使用云端会话的情况下,不建议使用该功能。
  • 建议在 SDK 初始化时注册消息过滤器,保证漫游或离线的消息也能够回调此过滤器进行过滤。
  • 消息过滤仅对在线消息、离线消息、漫游消息有效。云端历史记录无法过滤。

使用场景

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

实现方法

在初始化时,通过配置 NIMServiceOptions.messageServiceConfig.messageFilter 指定对特定消息进行过滤(默认不过滤)。

调用 V2NIMMessageFilter.shouldIgnore(message: V2NIMMessage) 方法传入需要过滤的消息。

若需要实现过滤消息的回调,可以提前在初始化时注册过滤器,过滤器会将接收到的消息对象,按照开发者应用上层定义的逻辑进行过滤。

该方法的参数说明如下:

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

    初始化时的示例代码:

    const serviceOptions: NIMServiceOptions = {
      loginServiceConfig: {
        lbsUrls: ['https://lbs.netease.im/lbs/webconf.jsp'],
        linkUrl: 'weblink.netease.im:443'
      },
      pushServiceConfig: {
        harmonyCertificateName: "DEMO_HMOS_PUSH"
      },
      databaseServiceConfig: {
        encrypt: false,
        appKey: "45c6af3c98409b18a84451215d0bdd6e",
      },
      messageServiceConfig: {
        // MessageFilterNotification 为 V2NIMMessageFilter 的实现类
        messageFilter: new MessageFilterNotification() // 实现 V2NIMMessageFilter
      }
    }
    

    过滤 通知消息 的示例代码:

    /**
     * 自定义消息过滤器(需要按照 V2NIMMessageFilter 类型实现接口),如过滤通知类消息
     */
    
    import { V2NIMMessage, V2NIMMessageFilter, V2NIMMessageType } from '@nimsdk/base'
    
    export class MessageFilterNotification implements V2NIMMessageFilter {
      async shouldIgnore(message: V2NIMMessage): Promise<boolean> {
        if (message.messageType === V2NIMMessageType.V2NIM_MESSAGE_TYPE_NOTIFICATION) {
          return true
        } else {
          return false
        }
      }
    }
    
    
    
    此文档是否对你有帮助?
    有帮助
    去反馈
    • 支持平台
    • 技术原理
    • 使用场景
    • 实现方法
    • 示例代码