圈组消息收发(已不再维护)

更新时间: 2024/03/15 16:12:30

本文已不再维护,请前往圈组消息收发及其同级目录查看相关文档。

SDK 提供一套完善的圈组消息传输管理服务,包括收发消息、存储消息、上传下载附件、@他人等。支持发送文本、语音、图片、视频、文件、地理位置等类型消息,同时支持用户发送自定义类型的消息。

SDK 中用于表示消息的结构为 QChatMessage,不同消息类型以 MsgTypeEnum 作区分。QChatMessage 不支持继承扩展。

QChatMessage 部分重要参数说明见下表:

返回值 参数 说明
long getQChatServerId() 获取消息所属的serverId
long getQChatChannelId() 获取消息所属的channelId
String getFromAccount() 获取消息发送者的accid
int getFromClientType() 获取消息发送者的客户端类型
String getFromDeviceId() 获取消息发送者设备id
String getFromNick() 获取消息发送者昵称
long getTime() 获取消息发送时间
long getUpdateTime() 获取消息更新时间
MsgTypeEnum getMsgType() 获取消息类型
String getContent() 获取消息body
void setContent(String content) 设置消息body
String getAttachStr() 获取消息attach
Map<String,Object> getRemoteExtension() 获取消息自定义ext
void setRemoteExtension(Map<String, Object> remoteExtension) 设置消息自定义ext
String getUuid() 获取消息的uuid,该域在生成消息时即会填上
long getMsgIdServer() 获取消息服务端Id
boolean isResend() 是否重发
int getServerStatus() 获取服务器消息状态
void setServerStatus(int status) 服务器消息状态
Map<String,Object> getPushPayload() 获取第三方自定义的推送属性
String getPushContent() 获取自定义推送文案
List< String > getMentionedAccidList() 获取被@的人的accid列表
boolean isMentionedAll() 是否@所有人
boolean isHistoryEnable() 该消息是否存储云端历史,默认true
MsgStatusEnum getSendMsgStatus() 获取消息状态
void setSendMsgStatus(MsgStatusEnum sendMsgStatus) 设置消息状态
MsgAttachment getAttachment() 获取消息附件对象。仅当{@link #getMsgType()}返回为非text时有效
void setAttachment(MsgAttachment attachment) 设置消息附件对象
AttachStatusEnum getAttachStatus() 获取消息附件接收/发送状态
void setAttachStatus(AttachStatusEnum attachStatus) 设置消息附件状态
boolean isPushEnable() 是否需要推送,默认true
boolean isNeedBadge() 是否需要消息计数,默认true
boolean isNeedPushNick() 是否需要推送昵称,默认true
QChatNotifyReason getNotifyReason() 下发通知的原因
boolean isRouteEnable() 是否需要抄送,默认true
String getEnv() 获取环境变量,用于指向不同的抄送,第三方回调等配置
void setEnv(String env) 设置环境变量,用于指向不同的抄送,第三方回调等配置
String getCallbackExtension() 获取第三方回调回来的自定义扩展字段
QChatMessageRefer getReplyRefer() 获取被回复消息引用
QChatMessageRefer getThreadRefer() 获取根消息引用
boolean isRootThread() 是否是根消息
void setMessageThread(QChatMessage parent) 通过此消息的父消息设置消息的thread信息
QChatMessageAntiSpamOption getAntiSpamOption() 获取消息反垃圾配置选项
QChatMessageAntiSpamResult getAntiSpamResult() 获取反垃圾结果,此结果仅对文本和图片有效

QChatMessageAntiSpamOption 参数说明:

返回值 参数 说明
Boolean getCustomAntiSpamEnable() 获取是否使用自定义反垃圾字段(customAntiSpamContent)
String getCustomAntiSpamContent() 获取开发者自定义的反垃圾字段
String getAntiSpamBusinessId() 获取用户配置的对某些单条消息另外的反垃圾的业务ID
Boolean getAntiSpamUsingYidun() 获取单条消息是否使用易盾反垃圾
String getYidunCallback() 获取易盾check的回调URL, 目前仅支持Audio类型的消息, 最长256个字符, 如果不合法则忽略该参数
String getYidunAntiCheating() 获取易盾反垃圾增强反作弊专属字段, 限制json, 长度限制1024
String getYidunAntiSpamExt() 获取易盾反垃圾扩展字段, 限制json, 长度限制1024
void setCustomAntiSpamEnable(Boolean customAntiSpamEnable) 设置是否使用自定义反垃圾字段(customAntiSpamContent)
void setCustomAntiSpamContent(String customAntiSpamContent) 设置开发者自定义的反垃圾字段
void setAntiSpamBusinessId(String antiSpamBusinessId) 设置用户配置的对某些单条消息另外的反垃圾的业务ID
void setAntiSpamUsingYidun(Boolean antiSpamUsingYidun) 设置单条消息是否使用易盾反垃圾
void setYidunCallback(String yidunCallback) 设置易盾check的回调URL, 目前仅支持Audio类型的消息, 最长256个字符, 如果不合法则忽略该参数
void setYidunAntiCheating(String yidunAntiCheating) 设置易盾反垃圾增强反作弊专属字段, 限制json, 长度限制1024
void setYidunAntiSpamExt(String yidunAntiSpamExt) 设置易盾反垃圾扩展字段, 限制json, 长度限制1024

QChatMessageAntiSpamResult 参数说明:

返回值 参数 说明
boolean isAntiSpam() 消息是否被反垃圾了
String getYidunAntiSpamRes() 获取易盾反垃圾结果

发送消息

接口

可以调用sendMessage方法发送圈组消息:

/**
 * 发送消息
 * @param param
 * @return InvocationFuture 可设置回调函数,监听操作结果。回调中返回发送成功的消息
 */
InvocationFuture<QChatSendMessageResult> sendMessage(@NonNull QChatSendMessageParam param);

其中 QChatSendMessageParam 是消息入参,必须传入 ServerId、ChannelId和消息类型。

如果您希望在发送消息前提前构造一个 QChatMessage,可以通过 QChatSendMessageParam 的 toQChatMessage() 方法构造出一个 QChatMessage。

示例代码

QChatSendMessageParam param = new QChatSendMessageParam(943445L,885305L, MsgTypeEnum.text);
param.setBody("测试消息");
param.setMentionedAll(false);
param.setHistoryEnable(true);
param.setExtension(getExtension());
param.setPushPayload(getPushPayload());
param.setPushContent("测试推送消息");
param.setMentionedAccidList(mentionedAccidList);
param.setPushEnable(true);
param.setNeedBadge(true);
param.setNeedPushNick(true);
//通过QChatSendMessageParam构造一个QChatMessage
QChatMessage currentMessage = param.toQChatMessage();

NIMClient.getService(QChatMessageService.class).sendMessage(param).setCallback(new RequestCallback<QChatSendMessageResult>() {
    @Override
    public void onSuccess(QChatSendMessageResult result) {
        //发送消息成功,返回发送成功的消息具体信息
        QChatMessage message = result.getSentMessage();
    }

    @Override
    public void onFailed(int code) {
        //发送消息失败,返回错误code
    }

    @Override
    public void onException(Throwable exception) {
        //发送消息异常
    }
});

重发消息

接口

如果因为网络等原因消息发送失败,可以用以下接口重发消息:

/**
 * 重发消息
 * @param param
 * @return InvocationFuture 可设置回调函数,监听操作结果。回调中返回发送成功的消息
 */
InvocationFuture<QChatSendMessageResult> resendMessage(@NonNull QChatResendMessageParam param);

其中 QChatResendMessageParam 中的入参为 QChatMessage 消息体。

示例代码

NIMClient.getService(QChatMessageService.class).resendMessage(new QChatResendMessageParam(currentMessage)).setCallback(new RequestCallback<QChatSendMessageResult>() {
    @Override
    public void onSuccess(QChatSendMessageResult result) {
        //重发消息成功,返回发送成功的消息具体信息
        QChatMessage message = result.getSentMessage();
    }

    @Override
    public void onFailed(int code) {
        //重发消息失败,返回错误code
    }

    @Override
    public void onException(Throwable exception) {
        //重发消息异常
    }
});

消息接收监听

接口

可以通过注册监听的方式监听圈组中发送给自己的消息:

/**
 * 注册/注销消息接收观察者。
 *
 * @param observer 观察者,参数为收到的消息集合
 * @param register true为注册,false为注销
 */
void observeReceiveMessage(Observer<List<QChatMessage>> observer, boolean register);

示例代码

NIMClient.getService(QChatServiceObserver.class).observeReceiveMessage(new Observer<List<QChatMessage>>() {
    @Override
    public void onEvent(List<QChatMessage> qChatMessages) {
        //收到消息qChatMessages
        for (QChatMessage qChatMessage : qChatMessages) {
            //处理消息
        }
    }
}, true);

消息状态变化监听

接口

可以通过以下接口监听消息状态(MsgStatusEnum)和消息附件传输状态(AttachStatusEnum):

/**
 * 注册/注销消息状态变化观察者
 *
 * @param observer 观察者,参数为改变的消息体,更改的状态可能包含status和attachStatus
 * @param register true为注册,false为注销
 */
void observeMessageStatusChange(Observer<QChatMessage> observer, boolean register);

当消息状态或消息附件传输状态发生变化时,会接收到变化的 QChatMessage。

示例代码

NIMClient.getService(QChatServiceObserver.class).observeMessageStatusChange(new Observer<QChatMessage>() {
    @Override
    public void onEvent(QChatMessage qChatMessage) {
        //收到状态变化的消息qChatMessage
        
    }
}, true);

下载附件

接口

默认情况下(即 SDKOPtions#preloadAttach 为 true),当 SDK 收到多媒体消息后,图片和视频会自动下载缩略图,音频会自动下载文件。如果需要下载原图或者原视频等,可调用该接口下载附件:

/**
 * @param param
 * @return AbortableFuture 调用跟踪。可设置回调函数,可中止下载操作
 */
AbortableFuture<Void> downloadAttachment(QChatDownloadAttachmentParam param);

其中 QChatDownloadAttachmentParam 包含了消息体,同时可以选择下载缩略图或原文件。

下载附件会触发 QChatServiceObserverobserveAttachmentProgress 方法通知下载进度,以及 observeMessageStatusChange,通知下载状态。

示例代码

QChatMessage message = getMessage();
//是否下载缩略图
boolean thumb = false;
QChatDownloadAttachmentParam param = new QChatDownloadAttachmentParam(message,thumb);
NIMClient.getService(QChatMessageService.class).downloadAttachment(param).setCallback(new RequestCallback<Void>() {
    @Override
    public void onSuccess(Void result) {
        //下载成功
    }

    @Override
    public void onFailed(int code) {
        //下载失败
    }

    @Override
    public void onException(Throwable exception) {
        //下载异常
    }
});

消息上传/下载附件进度监听

接口

当发送或下载图片、视频、文件等类型的消息时,可以通过以下接口监听消息上传/下载附件进度:

/**
 * 注册/注销消息附件上传/下载进度观察者,以message id作为key
 *
 * @param observer 观察者, 参数为附件的传输进度
 * @param register true为注册,false为注销
 */
void observeAttachmentProgress(Observer<AttachmentProgress> observer, boolean register);

其中 AttachmentProgress 包含了消息的 UUID、当前附件已传输的字节数和消息附件文件总大小。

示例代码

NIMClient.getService(QChatServiceObserver.class).observeAttachmentProgress(new Observer<AttachmentProgress>() {
    @Override
    public void onEvent(AttachmentProgress attachmentProgress) {
        //消息uuid
        String uuid = attachmentProgress.getUuid();
        //已传输字节数
        long transferred = attachmentProgress.getTransferred();
        //文件总大小
        long total = attachmentProgress.getTotal();

    }
},true);

查询历史消息

接口

SDK 提供了查询消息历史的接口,查询 fromTime 到 toTime 之间的最多 limit 条消息。这里 limit 指上限。

/**
 * 查询历史消息
 * @param param
 * @return InvocationFuture 可设置回调函数,监听操作结果。回调返回查询到的历史消息
 */
InvocationFuture<QChatGetMessageHistoryResult> getMessageHistory(@NonNull QChatGetMessageHistoryParam param);

其中 QChatGetMessageHistoryParam 必须传入需要查询消息所属的 ServerId 和 channelId,查询范围由 fromTime、toTime 和 limit 共同决定,以先到为准。

同时可以设置排除查询的消息id,用于排除查询时起始时间锚点的消息。

  • 如果 fromTime 上有多条消息,可以通过 setExcludeMessageId(Long excludeMsgId) 来指定实际的起始时间为 excludeMsgId 对应的消息的下一条消息时间。
  • 如果fromTime到 toTime 之间消息大于 limit 条,返回 limit 条记录;如果小于 limit 条,返回实际条数;当已经查询到头时,返回的结果列表的 size 可能会比 limit 小。

toTime 如果设置为0则为当前时间。

默认返回逆序列表,可以通过 setReverse 设置是否反向。

如果17:00:00(fromTime )到18:00:00(toTime)的消息总共有200条,查询时最多返回100条。

  • 如果isReverse() ==false(即默认方式),则返回后100条,时间逆序排列,时间从新到旧。
  • 如果isReverse() ==true(反向方式),则前100条,时间正序排列,时间从旧到新。

当进行首次查询时,如果要查最新的100条,则fromTime=0, toTime=0, limit=0。

示例代码

//默认查询指定Channel下最新的100条消息
NIMClient.getService(QChatMessageService.class).getMessageHistory(new QChatGetMessageHistoryParam(943445L,885305L)).setCallback(
        new RequestCallback<QChatGetMessageHistoryResult>() {
            @Override
            public void onSuccess(QChatGetMessageHistoryResult param) {
                //查询成功
            }

            @Override
            public void onFailed(int code) {
                //查询失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //查询异常
            }
        });

更新消息

接口

对于已发送的消息,可以调用`updateMessage方法修改消息中部分信息:

/**
 * 更新消息
 * @param param
 * @return InvocationFuture 可设置回调函数,监听操作结果。回调中返回更新成功的消息
 */
InvocationFuture<QChatUpdateMessageResult> updateMessage(@NonNull QChatUpdateMessageParam param);
  • 其中 QChatUpdateMessageParam 中必须传入更新操作通用参数、 消息所属的serverId、消息所属的channelId、消息发送时间以及消息服务端ID。
  • 可以修改消息中的内容、自定义扩展和消息服务端状态,其中消息服务端状态值必须大于等于1000,否则会返回414错误码。

示例代码

QChatUpdateParam updateParam = new QChatUpdateParam();
updateParam.setPostscript("附言");
updateParam.setExtension("操作扩展字段");

QChatUpdateMessageParam updateMessageParam = new QChatUpdateMessageParam(updateParam, 943445L, 885305L, currentMessage.getTime(),
        currentMessage.getMsgIdServer());
updateMessageParam.setBody("修改消息内容");
//修改消息自定义扩展
updateMessageParam.setExtension(getExtension());
//修改消息自定义服务端状态
updateMessageParam.setServerStatus(10001);
NIMClient.getService(QChatMessageService.class).updateMessage(updateMessageParam)
        .setCallback(new RequestCallback<QChatUpdateMessageResult>() {
            @Override
            public void onSuccess(QChatUpdateMessageResult result) {
                //更新成功,返回更新后的消息
                QChatMessage message = result.getMessage();
            }

            @Override
            public void onFailed(int code) {
                //更新失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //更新异常
            }
        });

消息更新状态监听

接口

可以注册监听来接收消息更新的事件:

/**
 * 注册/注销消息更新观察者
 *
 * @param observer 观察者,参数为改变的消息事件
 * @param register true为注册,false为注销
 */
void observeMessageUpdate(Observer<QChatMessageUpdateEvent> observer, boolean register);

其中QChatMessageUpdateEvent中包含了消息更新的操作信息和更新后的消息体。

示例代码

NIMClient.getService(QChatServiceObserver.class).observeMessageUpdate(new Observer<QChatMessageUpdateEvent>() {
    @Override
    public void onEvent(QChatMessageUpdateEvent event) {
        //收到更新后的消息qChatMessage
        QChatMessage message = event.getMessage();

    }
}, true);

撤回消息

接口

可撤回已经发送的消息:

/**
 * 撤回消息
 * @param param
 * @return InvocationFuture 可设置回调函数,监听操作结果。回调中返回撤回成功的消息
 */
InvocationFuture<QChatRevokeMessageResult> revokeMessage(@NonNull QChatRevokeMessageParam param);
  • 撤回圈组消息目前没有时间限制。
  • 其中 QChatRevokeMessageParam 必须传入更新操作通用参数、 消息所属的serverId、消息所属的channelId、消息发送时间以及消息服务端ID。

示例代码

NIMClient.getService(QChatMessageService.class).revokeMessage(new QChatRevokeMessageParam(updateParam,943445L,885305L,currentMessage.getTime(),currentMessage.getMsgIdServer()))
        .setCallback(new RequestCallback<QChatRevokeMessageResult>() {
            @Override
            public void onSuccess(QChatRevokeMessageResult result) {
                //撤回成功,返回撤回后的消息
                QChatMessage message = result.getMessage();
            }

            @Override
            public void onFailed(int code) {
                //撤回失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //撤回异常
            }
        });

消息撤回状态监听

接口

消息接收方可以通过以下接口监听消息撤回状态:

/**
 * 注册/注销消息撤回观察者
 *
 * @param observer 观察者,参数为撤回的消息事件
 * @param register true为注册,false为注销
 */
void observeMessageRevoke(Observer<QChatMessageRevokeEvent> observer, boolean register);

其中 QChatMessageRevokeEvent 中包含了消息撤回的操作信息和撤回后的消息体。

### 示例代码
NIMClient.getService(QChatServiceObserver.class).observeMessageRevoke(new Observer<QChatMessageRevokeEvent>() {
    @Override
    public void onEvent(QChatMessageRevokeEvent event) {
        //收到撤回后的消息qChatMessage
        QChatMessage message = event.getMessage();

    }
}, true);

删除消息

接口

可删除已发送成功的消息。删除消息后,您将无法在历史消息中查询到该消息。

/**
 * 删除消息
 * @param param
 * @return InvocationFuture 可设置回调函数,监听操作结果。回调中返回删除成功的消息
 */
InvocationFuture<QChatDeleteMessageResult> deleteMessage(@NonNull QChatDeleteMessageParam param);

其中 QChatDeleteMessageParam 必须传入更新操作通用参数、消息所属的serverId、消息所属的channelId、消息发送时间以及消息服务端ID。

示例代码

QChatUpdateParam updateParam = new QChatUpdateParam();
updateParam.setPostscript("附言");
updateParam.setExtension("操作扩展字段");
NIMClient.getService(QChatMessageService.class).deleteMessage(new QChatDeleteMessageParam(updateParam,943445L,885305L,currentMessage.getTime(),currentMessage.getMsgIdServer()))
        .setCallback(new RequestCallback<QChatDeleteMessageResult>() {
            @Override
            public void onSuccess(QChatDeleteMessageResult result) {
                //删除成功,返回删除后的消息
                QChatMessage message = result.getMessage();
            }

            @Override
            public void onFailed(int code) {
                //删除失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //删除异常
            }
        });

消息删除状态监听

接口

消息接收方可以通过以下接口监听消息删除状态:

/**
 * 注册/注销消息删除观察者
 *
 * @param observer 观察者,参数为删除的消息事件
 * @param register true为注册,false为注销
 */
void observeMessageDelete(Observer<QChatMessageDeleteEvent> observer, boolean register);

其中 QChatMessageDeleteEvent 包含了消息删除的操作信息。

示例代码

NIMClient.getService(QChatServiceObserver.class).observeMessageDelete(new Observer<QChatMessageDeleteEvent>() {
    @Override
    public void onEvent(QChatMessageDeleteEvent event) {
        //收到删除后的消息qChatMessage
        QChatMessage message = event.getMessage();

    }
}, true);

消息标记已读

接口

收到消息后,可以对消息标记已读。标记后,消息发送方会收到未读信息变化通知。

/**
 * 标记消息已读,该接口存在频控,300ms内只能调用1次
 *
 * @param param
 * @return InvocationFuture 可设置回调函数,监听操作结果。
 */
InvocationFuture<Void> markMessageRead(@NonNull QChatMarkMessageReadParam param);
  • 该接口不能频繁调用,300 ms内只能调用一次。
  • 其中 QChatMarkMessageReadParam 需要传入消息所属的ServerId、消息所属的ChannelId和标记已读时间戳。需要注意的是,标记已读成功后,标记已读时间戳之前的所有消息都会被认为是已读。如果标记已读时间戳为0,则Channel中的所有消息都将视为未读消息。

示例代码

NIMClient.getService(QChatMessageService.class).markMessageRead(new QChatMarkMessageReadParam(943445L,885305L,currentMessage.getTime())).setCallback(
        new RequestCallback<Void>() {
            @Override
            public void onSuccess(Void param) {
                //标记已读成功
            }

            @Override
            public void onFailed(int code) {
                //标记已读失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //标记已读异常
            }
        });

未读信息变化监听

接口

SDK提供了未读信息变化的监听,可以通过此监听来了解圈组服务器下各频道的未读信息:

/**
 * 注册/注销新的未读通知接收观察者。
 * 订阅、标记消息已读、收到新消息或新消息通知会触发该通知
 * 通知事件内的新未读状态可能没有实际变更,比如重复调用订阅接口触发的变更事件
 *
 * @param observer 观察者,参数为收到的消息集合
 * @param register true为注册,false为注销
 */
void observeUnreadInfoChanged(Observer<QChatUnreadInfoChangedEvent> observer, boolean register);

其中 QChatUnreadInfoChangedEvent 为未读信息通知事件。其包含上一次通知时的未读信息列表和当前变更后的未读信息列表,其中未读信息 QChatUnreadInfo 参数说明如下:

返回值 参数 说明
long getServerId() 获取serverId
long getChannelId() 获取channelId
long getAckTimeTag() 获取已读时间戳
int getUnreadCount() 获取未读数
int getMentionedCount() 获取@的未读数
int getMaxCount() 获取最大未读数
long getLastMsgTime() 获取最后一条消息的时间戳

示例代码

NIMClient.getService(QChatServiceObserver.class).observeUnreadInfoChanged(new Observer<QChatUnreadInfoChangedEvent>() {
    @Override
    public void onEvent(QChatUnreadInfoChangedEvent event) {
        //收到未读信息变化事件
        //获取上一次通知时的未读状态
        List<QChatUnreadInfo> lastUnreadInfos = event.getLastUnreadInfos();
        //获取变更后的未读状态
        List<QChatUnreadInfo> unreadInfos = event.getUnreadInfos();
    }
}, true);

消息缓存

圈组消息提供消息缓存功能,只需要打开设置开关即可使用。开启后,可以为100个频道(QChatChannel)缓存消息,每个频道最多缓存20条。如果超出,则按消息的创建时间淘汰最晚的。 如果单个频道的消息数超过20,则保留创建时间最新的20条消息;如果有消息的频道数超过100,则对比每个频道中创建时间最晚的消息的创建时间tm,保留tm最大的100个频道。 消息缓存功能的开关为SDKOptions#enabledQChatMessageCache,默认为false,表示不缓存消息;配置为true表示要缓存消息。

  • 配置原型
java/**
 *  是否开启圈组消息缓存支持,默认不开启
 */
public boolean enabledQChatMessageCache = false;
  • 开启缓存功能示例
javasdkOptions.enabledQChatMessageCache = true;

获取消息缓存

支持获取指定频道的消息缓存

  • 接口原型
java/**
 * 指定通道查询消息缓存
 *
 * @param qchatChannelId 圈组通道名
 * @return 缓存消息
 */
InvocationFuture<List<QChatMessageCache>> getMessageCache(long qchatServerId, long qchatChannelId);

/**
 * 指定通道查询消息缓存(同步接口)
 *
 * @param qchatChannelId 圈组通道名
 * @return 缓存消息
 */
List<QChatMessageCache> getMessageCacheBlock(long qchatServerId, long qchatChannelId);
  • 示例代码
javaNIMClient.getService(QChatMessageService.class).getMessageCache(943445L,885305L).setCallback(new RequestCallback<List<QChatMessageCache>>() {
    @Override
    public void onSuccess(List<QChatMessageCache> param) {
        // 查询成功
    }

    @Override
    public void onFailed(int code) {
        // 查询失败
    }

    @Override
    public void onException(Throwable exception) {
        // 查询出现异常
    }
});

清空消息缓存

支持清空指定频道的消息缓存。

  • 接口原型
java/**
 * 清空消息缓存
 */
void clearMessageCache();
  • 示例代码
javaNIMClient.getService(QChatMessageService.class).clearMessageCache();

搜索消息

调用searchMsgByPage方法,可按照关键字和消息发送者等搜索当前用户所在服务器下的全部频道或单频道的消息,包括文本消息、图片消息、视频消息和文件消息(其他类型消息均不支持搜索)。

  • 在开通圈组功能后,圈组搜索相关能力还需要再额外开通才可调用。您可通过云信官网首页提供的微信和电话等联系方式咨询商务经理开通。
  • 已被撤回或删除的消息不可搜索。

示例代码如下:

//搜索的消息类型
List<MsgTypeEnum> msgTypes = new ArrayList<>();
msgTypes.add(MsgTypeEnum.text);
msgTypes.add(MsgTypeEnum.image);
msgTypes.add(MsgTypeEnum.video);
msgTypes.add(MsgTypeEnum.file);

QChatSearchMsgByPageParam param = new QChatSearchMsgByPageParam(943445L,msgTypes);
param.setKeyword("test");

NIMClient.getService(QChatMessageService.class).searchMsgByPage(param).setCallback(
        new RequestCallback<QChatSearchMsgByPageResult>() {
            @Override
            public void onSuccess(QChatSearchMsgByPageResult result) {
                //查询成功,查询到的消息类别
                List<QChatMessage> messages = result.getMessages();
                //是否还有下一页数据
                boolean hasMore = result.isHasMore();
                //下页查询的起始位置
                String cursor = result.getCursor();
                //下一页的起始时间戳
                long nextTimeTag = result.getNextTimeTag();
            }

            @Override
            public void onFailed(int code) {
                //查询失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //查询异常
            }
        });
此文档是否对你有帮助?
有帮助
去反馈
  • 发送消息
  • 接口
  • 示例代码
  • 重发消息
  • 接口
  • 示例代码
  • 消息接收监听
  • 接口
  • 示例代码
  • 消息状态变化监听
  • 接口
  • 示例代码
  • 下载附件
  • 接口
  • 示例代码
  • 消息上传/下载附件进度监听
  • 接口
  • 示例代码
  • 查询历史消息
  • 接口
  • 示例代码
  • 更新消息
  • 接口
  • 示例代码
  • 消息更新状态监听
  • 接口
  • 示例代码
  • 撤回消息
  • 接口
  • 示例代码
  • 消息撤回状态监听
  • 接口
  • 删除消息
  • 接口
  • 示例代码
  • 消息删除状态监听
  • 接口
  • 示例代码
  • 消息标记已读
  • 接口
  • 示例代码
  • 未读信息变化监听
  • 接口
  • 示例代码
  • 消息缓存
  • 获取消息缓存
  • 清空消息缓存
  • 搜索消息