消息扩展(本文已不再维护)
更新时间: 2023/01/30 18:58:36
本文已不再维护,请前往会话消息回复(Thread)和圈组快捷评论查看相关文档。
9.1.0 版本开始提供圈组消息相关扩展功能,包括 会话消息回复、消息快捷评论等。所有功能包含在 QChatMessageService 接口中。
圈组的会话消息回复 和消息快捷评论属于增值功能,需先在云信控制台开通后才能使用。
会话消息回复
回复消息
方法
可以通过以下方法对频道中某条消息进行回复:
/**
* 回复消息
* @param param
* @return InvocationFuture 可设置回调函数,监听操作结果。回调中返回发送成功的消息
*/
InvocationFuture<QChatSendMessageResult> replyMessage(@NonNull QChatReplyMessageParam param);
- QChatReplyMessageParam 中必须传入待发送消息参数和被回复的消息体,支持重发。
示例代码
QChatSendMessageParam param = new QChatSendMessageParam(1607312,1492446, MsgTypeEnum.text);
param.setBody("回复消息测试");
QChatMessage replyMessage = getMessage();
NIMClient.getService(QChatMessageService.class).replyMessage(new QChatReplyMessageParam(param,replyMessage)).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) {
//回复消息异常
}
});
根据消息id查询历史消息
方法
可以通过传入 QChatMessageRefer 列表查询对应的消息详情列表:
/**
* 根据消息id查询历史消息
* @param param
* @return InvocationFuture 可设置回调函ke数,监听操作结果。回调返回查询到的历史消息
*/
InvocationFuture<QChatGetMessageHistoryResult> getMessageHistoryByIds(@NonNull QChatGetMessageHistoryByIdsParam param);
- QChatGetMessageHistoryByIdsParam中需要传入需要查询的ServerId、ChannelId和QChatMessageRefer列表。
- QChatGetMessageHistoryResult中返回查询到的消息列表
示例代码
List<QChatMessageRefer> messageReferList = getMessageRefersList();
QChatGetMessageHistoryByIdsParam param = new QChatGetMessageHistoryByIdsParam(1607312,1492446,messageReferList);
NIMClient.getService(QChatMessageService.class).getMessageHistoryByIds(param).setCallback(
new RequestCallback<QChatGetMessageHistoryResult>() {
@Override
public void onSuccess(QChatGetMessageHistoryResult param) {
//查询成功,返回查询到的消息列表
List<QChatMessage> messages = param.getMessages();
}
@Override
public void onFailed(int code) {
//查询失败,返回错误code
}
@Override
public void onException(Throwable exception) {
//查询异常
}
});
根据消息查询被引用的消息详情
方法
可以通过以下方法查询 Thread 消息中某个消息的回复消息或根消息:
/**
* 根据消息查询被引用的消息详情
* @param param
* @return
*/
InvocationFuture<QChatGetReferMessagesResult> getReferMessages(@NonNull QChatGetReferMessagesParam param);
- QChatGetReferMessagesParam传入要查询的消息不能是根消息,否则会返回414错误。
- QChatGetReferMessagesParam中需要传入的消息引用类型QChatMessageReferType三种选择
- REPLAY:只查询被回复的消息
- THREAD:只查询根消息
- ALL:同时查询被回复的消息和根消息
- QChatGetReferMessagesResult中返回查询被回复的消息和根消息
- 如果QChatMessageReferType为REPLAY或ALL才返回被回复消息,否则getReplyMessage()返回为null
- 如果QChatMessageReferType为THREAD或ALL才返回根消息,否则getThreadMessage()返回为null
示例代码
QChatMessage message = getQueryMessage();
QChatMessageReferType referType = QChatMessageReferType.REPLAY;
NIMClient.getService(QChatMessageService.class).getReferMessages(new QChatGetReferMessagesParam(message,referType)).setCallback(
new RequestCallback<QChatGetReferMessagesResult>() {
@Override
public void onSuccess(QChatGetReferMessagesResult result) {
//查询成功
//如果QChatMessageReferType为REPLAY或ALL才有,否则为null
QChatMessage replyMessage = result.getReplyMessage();
//如果QChatMessageReferType为THREAD或ALL才有,否则为null
QChatMessage threadMessage = result.getThreadMessage();
}
@Override
public void onFailed(int code) {
//查询失败,返回错误code
}
@Override
public void onException(Throwable exception) {
//查询异常
}
});
查询thread聊天的历史
方法
可以通过以下方法查询Thread聊天的历史消息
/**
* 查询thread聊天的历史
* @param param
* @return
*/
InvocationFuture<QChatGetThreadMessagesResult> getThreadMessages(@NonNull QChatGetThreadMessagesParam param);
其中QChatGetThreadMessagesParam需要传入待查询的消息QChatMessage和消息查询选项QChatMessageQueryOption; QChatGetThreadMessagesResult会返回根消息QChatMessage、thread聊天信息QChatMessageThreadInfo和查询到的thread历史消息,其中QChatMessageThreadInfo中返回thread聊天的总回复数和thread聊天中的最后一条消息时间戳
- QChatGetThreadMessagesParam需要传入待查询的消息QChatMessage可以是Thread聊天中的任意一条消息
QChatMessageQueryOption的参数说明如下:
类型 | 参数 | 说明 |
---|---|---|
Long | fromTime | 起始时间 |
Long | toTime | 结束时间 |
Long | excludeMessageId | excludeMsgId,排除消息id |
Integer | limit | limit,条数限制,默认 |
Boolean | reverse | reverse,是否反向 |
查询范围由 fromTime、toTime 和 limit 共同决定,以先到为准。
同时可以设置排除查询的消息id,用于排除查询时起始时间锚点的消息。
- 如果 fromTime 上有多条消息,可以通过excludeMessageId来指定实际的起始时间为 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。
示例代码
QChatMessage message = getQueryMessage();
QChatMessageQueryOption messageQueryOption = new QChatMessageQueryOption();
//查询最新的100条Thread聊天消息
NIMClient.getService(QChatMessageService.class).getThreadMessages(new QChatGetThreadMessagesParam(message,messageQueryOption)).setCallback(
new RequestCallback<QChatGetThreadMessagesResult>() {
@Override
public void onSuccess(QChatGetThreadMessagesResult result) {
//查询成功
//根消息
QChatMessage threadMessage = result.getThreadMessage();
//Thread聊天信息,包含Thread聊天的总回复数和Thread聊天中最后一条消息的时间戳
QChatMessageThreadInfo threadInfo = result.getThreadInfo();
//Thread聊天中的回复消息列表(不包含根消息)
List<QChatMessage> messages = result.getMessages();
}
@Override
public void onFailed(int code) {
//查询失败,返回错误code
}
@Override
public void onException(Throwable exception) {
//查询异常
}
});
批量查询thread聊天信息
方法
可以通过以下方法批量查询某个频道下的多个thread聊天信息:
/**
* 批量查询thread聊天信息
* @param param
* @return
*/
InvocationFuture<QChatGetMessageThreadInfosResult> getMessageThreadInfos(@NonNull QChatGetMessageThreadInfosParam param);
其中QChatGetMessageThreadInfosParam中需要传入需要查询的ServerId、ChannelId和根消息列表 QChatGetMessageThreadInfosResult返回消息Thread聊天信息Map,key为传入根消息的uuid,value为QChatMessageThreadInfo
示例代码
List<QChatMessage> msgList = getThreadMsgList();
NIMClient.getService(QChatMessageService.class).getMessageThreadInfos(new QChatGetMessageThreadInfosParam(1607312,1492446,msgList)).setCallback(
new RequestCallback<QChatGetMessageThreadInfosResult>() {
@Override
public void onSuccess(QChatGetMessageThreadInfosResult result) {
//查询成功,返回Thread聊天信息Map,key为传入根消息的uuid,value为QChatMessageThreadInfo
Map<String, QChatMessageThreadInfo> messageThreadInfoMap = result.getMessageThreadInfoMap();
}
@Override
public void onFailed(int code) {
//查询失败,返回错误code
}
@Override
public void onException(Throwable exception) {
//查询异常
}
});
快捷评论
9.1.0版本开始可以对消息进行添加、删除快捷评论
添加快捷评论
方法
可以通过以下方法对频道中某条消息进行快捷评论:
/**
* 添加一条快捷评论
* @param param
* @return
*/
InvocationFuture<Void> addQuickComment(@NonNull QChatAddQuickCommentParam param);
其中QChatAddQuickCommentParam需要传入待评论的消息QChatMessage和评论类型(int类型)
添加快捷评论成功后,频道内成员会收到一条系统通知(QChatSystemNotificationType.UPDATE_QUICK_COMMENT)。
示例代码
QChatMessage message = getMessage();
int type = 1;
NIMClient.getService(QChatMessageService.class).addQuickComment(new QChatAddQuickCommentParam(message,type)).setCallback(
new RequestCallback<Void>() {
@Override
public void onSuccess(Void param) {
//添加成功
}
@Override
public void onFailed(int code) {
//添加失败,返回错误code
}
@Override
public void onException(Throwable exception) {
//添加异常
}
});
删除快捷评论
方法
可以通过以下方法删除对某条消息的快捷评论:
/**
* 删除一条快捷评论
* @param param
* @return
*/
InvocationFuture<Void> removeQuickComment(@NonNull QChatRemoveQuickCommentParam param);
其中QChatRemoveQuickCommentParam需要传入待评论的消息QChatMessage和评论类型(int类型)
删除快捷评论成功后,频道内成员会收到一条系统通知(QChatSystemNotificationType.UPDATE_QUICK_COMMENT)。
示例代码
QChatMessage message = getMessage();
int type = 1;
NIMClient.getService(QChatMessageService.class).removeQuickComment(new QChatRemoveQuickCommentParam(message,type)).setCallback(
new RequestCallback<Void>() {
@Override
public void onSuccess(Void param) {
//删除成功
}
@Override
public void onFailed(int code) {
//删除失败,返回错误code
}
@Override
public void onException(Throwable exception) {
//删除异常
}
});
批量查询快捷评论
方法
可以通过以下方法批量查询某个频道下的多个消息的快捷评论:
/**
* 批量查询快捷评论
* @param param
* @return
*/
InvocationFuture<QChatGetQuickCommentsResult> getQuickComments(@NonNull QChatGetQuickCommentsParam param);
其中QChatGetQuickCommentsParam中需要传入需要查询的ServerId、ChannelId和消息列表 QChatGetQuickCommentsResult返回消息快捷评论详情Map,key为消息的MsgIdServer,value为QChatMessageQuickCommentDetail
其中QChatMessageQuickCommentDetail的参数说明如下:
返回值 | 参数 | 说明 |
---|---|---|
Long | getServerId() | 获取服务器Id |
Long | getChannelId() | 获取channelId |
Long | getMsgIdServer() | 获取消息服务端Id |
int | getTotalCount() | 获取总评论数 |
long | getLastUpdateTime() | 获取消息评论最后一次操作的时间 |
List |
getDetails() | 获取评论详情列表 |
其中QChatQuickCommentDetail的参数说明如下:
返回值 | 参数 | 说明 |
---|---|---|
int | getType() | 获取评论类型 |
int | getCount() | 获取评论数量 |
boolean | hasSelf() | 自己是否添加了该类型评论 |
List |
getSeveralAccids() | 获取若干个添加了此类型评论的accid列表,不是按照操作时间排序的,可以认为是随机取了N个 |
示例代码
QChatMessage message = getMessage();
int type = 1;
NIMClient.getService(QChatMessageService.class).addQuickComment(new QChatAddQuickCommentParam(message,type)).setCallback(
new RequestCallback<Void>() {
@Override
public void onSuccess(Void param) {
//添加成功
}
@Override
public void onFailed(int code) {
//添加失败,返回错误code
}
@Override
public void onException(Throwable exception) {
//添加异常
}
});