消息过滤
更新时间: 2024/03/14 16:36:30
网易云信 NIM IM SDK 提供消息过滤器,注册过滤器后可过滤消息。消息过滤后,SDK 将不对其进行存储,也不会上抛给消息接收回调,因此应用层不会收到对应的消息。
- 建议在 SDK 初始化后 Application 启动时注册消息过滤器,保证漫游或离线的消息也能够回调此过滤器进行过滤。
- 消息过滤仅对在线消息、离线消息、漫游消息有效。本地和云端历史记录无法过滤。
前提条件
已完成 SDK 初始化。
使用场景
适用于过滤用户不需要关注的消息(如群头像变更通知消息),使用户免受过多信息的干扰。
实现方法
调用registerIMMessageFilter
方法注册过滤器,过滤器会将接收到的通知类消息对象,按照开发者应用上层定义的逻辑进行过滤。
请勿在通知消息过滤函数或方法中进行耗时操作,否则将导致线程阻塞。
该方法的参数说明如下:
返回值 | IMMessageFilter接口 | 说明 |
---|---|---|
boolean | shouldIgnore(IMMessage message) |
是否过滤消息:
|
示例代码
如下示例代码以 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; // 不过滤
}
});
此文档是否对你有帮助?