IM 即时通讯
Android
开发指南

圈组快捷评论

更新时间: 2024/01/31 19:26:54

快捷评论是一个操作功能,并非一种消息类型。评论内容并非一条消息,而是一个 int 类型,由开发者指定评论内容与界面展示之间的联系。

快捷评论的 UI 示例见下图。

快捷评论.png

前提条件

开始圈组快捷评论相关集成前,请确保:

  • 开通圈组的快捷评论功能。圈组的快捷评论功能需要在开通圈组功能的基础上额外开通后才能使用。
  • 已完成圈组初始化。

实现方法

添加/移除快捷评论

API 调用时序

以下时序图可能因为网络问题而显示异常。如显示异常,一般刷新当前页面即可正常显示。

uml diagram

具体流程

本节仅对上图中标为橙色的流程进行说明,其他流程请参考相关文档。例如:


  1. 用户A和用户B注册回调函数并登录。

    示例代码如下:

    注册消息接收观察者
    NIMClient.getService(QChatServiceObserver.class).observeReceiveMessage(new Observer<List<QChatMessage>>() {
        @Override
        public void onEvent(List<QChatMessage> qChatMessages) {
            //收到消息qChatMessages
            for (QChatMessage qChatMessage : qChatMessages) {
                //处理消息
            }
        }
    }, true);
    
    注册系统通知接收观察者
    NIMClient.getService(QChatServiceObserver.class).observeReceiveSystemNotification(new Observer<List<QChatSystemNotification>>() {
    @Override
    public void onEvent(List<QChatSystemNotification> qChatSystemNotifications) {
      //收到系统通知
      for (QChatSystemNotification qChatSystemNotification : qChatSystemNotifications) {
      //处理系统通知
      }
    }
    }, true);
    
  2. 用户B在收到消息后,调用addQuickComment方法为接收到的消息添加快捷评论。调用成功后,系统通知接收观察者的回调触发,用户A收到系统通知(QChatSystemNotificationType.UPDATE_QUICK_COMMENT)。

    该方法的入参结构QChatRemoveQuickCommentParam需要传入待评论的消息QChatMessage和评论类型(int类型)。

    用户也可在搜索/查询消息后为消息添加快捷评论,本文仅以接收消息后添加快捷评论作为示例进行说明。

    云信服务端不会下发相关系统通知给发起“添加快捷评论”操作的设备,因为操作者不需要接收当前操作的通知。但如果操作者使用相同 IM 账号在其他设备登录,将收到该通知。


    示例代码如下:

    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) {
                    //添加异常
                }
            });
    
    
  3. (可选)用户B调用removeQuickComment 方法移除快捷评论。调用成功后,系统通知接收观察者的回调函数触发,用户A收到系统通知(QChatSystemNotificationType.UPDATE_QUICK_COMMENT)。

    该方法的入参结构QChatRemoveQuickCommentParam需要传入待评论的消息QChatMessage和评论类型(int类型)。

    云信服务端不会下发相关系统通知给发起“移除快捷评论”操作的设备,因为操作者不需要接收当前操作的通知。但如果操作者使用相同 IM 账号在其他设备登录,将收到该通知。


    示例代码如下:

    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) {
                    //删除异常
                }
            });
    
    

查询快捷评论列表

调用getQuickComments可查询指定消息所包含的快捷评论列表。

  • 该方法的入参结构QChatGetQuickCommentsParam中需要传入需要查询的serverIdchannelId和消息列表。回参结构QChatGetQuickCommentsResult返回快捷评论详情 Map,key 为消息的msgIdServer,value 为QChatMessageQuickCommentDetail

    其中QChatMessageQuickCommentDetail的方法说明如下:

    返回值 方法 说明
    Long getServerId 获取服务器Id
    Long getChannelId 获取channelId
    Long getMsgIdServer 获取消息服务端Id
    int getTotalCount 获取总评论数
    Long getLastUpdateTime 获取消息评论最后一次操作的时间
    List<QChatQuickCommentDetail> getDetails 获取评论详情列表

    其中QChatQuickCommentDetail的参数说明如下:

    返回值 参数 说明
    int getType 获取评论类型
    int getCount 获取评论数量
    boolean hasSelf 自己是否添加了该类型评论
    List<String> getSeveralAccids 获取若干个添加了此类型评论的用户 ID (accid)列表,随机获取结果
    Long getCreateTime 获取评论的创建时间
  • 示例代码

    List<QChatMessage> messages = getQueryMessages();
    NIMClient.getService(QChatMessageService.class).getQuickComments(new QChatGetQuickCommentsParam(currentChannel.getServerId(),
            currentChannel.getChannelId(),messages)).setCallback(
            new RequestCallback<QChatGetQuickCommentsResult>() {
                @Override
                public void onSuccess(QChatGetQuickCommentsResult result) {
                    //查询成功,获取消息快捷评论详情Map,key为MsgIdServer
                    Map<Long, QChatMessageQuickCommentDetail> messageQuickCommentDetailMap = result.getMessageQuickCommentDetailMap();
                }
    
                @Override
                public void onFailed(int code) {
                    //查询失败,返回错误code
                }
    
                @Override
                public void onException(Throwable exception) {
                    //查询异常
                }
            });
    

分页获取评论者列表

调用 QChatMessageService#getCommentators 方法可查询快捷评论消息的评论者列表。

  • 参数说明
参数名称 类型 是否必填 默认值 描述
param @NonNull QChatGetCommentatorsParam - 快捷评论者查询参数

QChatGetCommentatorsParam 说明:

参数名称 是否必填 描述
serverId 圈组服务器 ID,必须大于 0。
channelId 圈组频道 ID,必须大于 0。
messageServerId 圈组消息的服务端 ID,必须大于 0。
type 快捷评论的类型
limit 本次查询的最大数量,默认 100,不可超过 100。
pageToken 分页标识,首页不传,获取下一页时传入上一页返回的 QChatGetCommentatorsResult#getPageToken
// Set QChatGetCommentatorsParam
QChatGetCommentatorsParam param = new QChatGetCommentatorsParam(serverId, channelId, messageServerId, type);
param.setLimit(limit);            // limit 选填
param.setPageToken(pageToken);    // pageToken 选填

// Call QChatMessageService.getCommentators(param)
NIMClient.getService(QChatMessageService.class).getCommentators(param)
    .setCallback(new RequestCallbackWrapper<QChatGetCommentatorsResult>() {
        /**
         * 调用结果回调函数
         * @param code
         * @param result
         * @param exception
         */
        @Override
        public void onResult(int code, QChatGetCommentatorsResult result, Throwable exception) {
            // Get code/result/exception
        }
    });
此文档是否对你有帮助?
有帮助
去反馈
  • 前提条件
  • 实现方法
  • 添加/移除快捷评论
  • API 调用时序
  • 具体流程
  • 查询快捷评论列表
  • 分页获取评论者列表