消息过滤
更新时间: 2024/11/18 15:37:17
网易云信即时通讯 SDK(NetEase IM SDK,简称 NIM SDK)支持消息过滤功能。
支持平台
本文内容适用的开发平台或框架如下表所示:
Android | iOS | macOS/Windows | Web/uni-app/小程序 | Node.js/Electron | 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
}
}
}
此文档是否对你有帮助?