消息发送

更新时间: 2022/10/31 07:24:28

本文主要介绍如何通过 NERoom SDK 在房间内实现聊天室消息的发送。

功能介绍

消息类型

类型
描述
文本消息 文本消息的内容是文本,可以包含超链接、emoji 表情符号等。表情消息是基于文本消息实现的。 文本消息大小限制为 5 KB。
多媒体消息 多媒体消息包括文件消息和图片消息。
自定义消息 开发者自定义的消息类型,例如红包消息、石头剪子布等形式的消息。目前仅支持 RESTful API 发送自定义消息。

功能原理

消息收发.png

消息收发流程如下

  1. 房间内的用户 A 发送一条消息到云信的 NERoom IM 服务器。
  2. IM服务器投递给房间内聊天室内的其他成员。如果消息为广播消息,则全员投递,如果为定向消息,则仅投递指定的成员。
  3. 目标用户收到消息。

注意事项

  • 用户只有加入聊天室后,才能发送消息。
  • 最新版本可支持文本消息、自定义消息、图片消息以及文件消息,暂不支持语音消息、视频消息等其他类型的消息。

给单人发送文本消息

配置步骤

  1. 调用 getRoomContext 接口,获取房间上下文。

    调用此方法时,您需要将 roomUid 设置为您所加入房间的 ID。

  2. 调用 sendDirectTextMessage 接口,定向给某个人发送文本消息。相关参数说明如下表所示。

    名称 类型 描述
    userUuid String 消息接收方的用户 ID
    message String 文本消息的内容

示例代码

实现给单人发送消息的示例代码如下:

       NERoomService roomService = NERoomKit.getInstance().getService(NERoomService.class);
        NERoomContext roomContext = roomService.getRoomContext(roomUuid);
        if (roomContext!=null){
            String targetUserUuid="";
            String message="broadcast text message";
            roomContext.getChatController().sendDirectTextMessage(targetUserUuid,message, new NECallback2<Unit>() {
                @Override
                public void onSuccess(@Nullable Unit unit) {
                    super.onSuccess(unit);
                    Log.d(TAG,"success");
                }

                @Override
                public void onError(int code, @Nullable String message) {
                    super.onError(code, message);
                    Log.d(TAG,"error");
                }
            });
        }

给多人发送文本消息

配置步骤

  1. 调用 getRoomContext 接口,获取房间上下文。

    调用此方法时,您需要将 roomUid 设置为您所加入房间的 ID。

  2. 调用 sendGroupTextMessage 接口,给多人发送文本消息。相关参数说明如下表所示。

    名称 类型 描述
    userUuids List 消息接收方的用户 ID。
    message String 文本消息内容

示例代码

实现给多人发送消息的示例代码如下:

        NERoomService roomService = NERoomKit.getInstance().getService(NERoomService.class);
        NERoomContext roomContext = roomService.getRoomContext(roomUuid);
        if (roomContext!=null){
            ArrayList<String> uerUuids=new ArrayList<>();
            uerUuids.add("userUuid1");
            uerUuids.add("userUuid2");
            String message="broadcast text message";
            roomContext.getChatController().sendGroupTextMessage(uerUuids,message, new NECallback2<Unit>() {
                @Override
                public void onSuccess(@Nullable Unit unit) {
                    super.onSuccess(unit);
                    Log.d(TAG,"success");
                }

                @Override
                public void onError(int code, @Nullable String message) {
                    super.onError(code, message);
                    Log.d(TAG,"error");
                }
            });
        }

发送广播文本消息

配置步骤

  1. 调用 getRoomContext 接口,获取房间上下文。

    调用此方法时,您需要将 roomUid 设置为您所加入房间的 ID。

  2. 调用 sendBroadcastTextMessage 接口,向全员发送广播文本消息。相关参数说明如下表所示。

    名称 描述
    message 文本消息内容

示例代码

实现发送广播消息的示例代码如下:

      NERoomService roomService = NERoomKit.getInstance().getService(NERoomService.class);
        NERoomContext roomContext = roomService.getRoomContext(roomUuid);
        if (roomContext!=null){
            String message="broadcast text message";
            roomContext.getChatController().sendBroadcastTextMessage(message, new NECallback2<Unit>() {
                @Override
                public void onSuccess(@Nullable Unit unit) {
                    super.onSuccess(unit);
                    Log.d(TAG,"success");
                }

                @Override
                public void onError(int code, @Nullable String message) {
                    super.onError(code, message);
                    Log.d(TAG,"error");
                }
            });
        }

发送图片消息

配置步骤

  1. 调用 getRoomContext 接口,获取房间上下文。

    调用此方法时,您需要将 roomUid 设置为您所加入房间的 ID。

  2. 监听消息附件上传进度。

  3. 调用 sendImageMessage 接口,发送图片消息。相关参数说明如下表所示。

    名称 描述
    messageUuid 消息标识,可用于监听该消息附件上传的进度,可通过 [UUID.randomUUID()] 生成。
    imagePath 图片路径。
    userUuids 用户 ID 列表。
    如果 userUuids 为空,表示发送全员消息。
    如果 userUuids 不为空,表示给单人或多人发送消息。
    callback 回调。

示例代码

实现发送图片消息的示例代码如下:

        NERoomService roomService = NERoomKit.getInstance().getService(NERoomService.class);
        NERoomContext roomContext = roomService.getRoomContext(roomUuid);
        if (roomContext!=null){
            String msgUuid = UUID.randomUUID();
            roomContext.addRoomListener(new RoomListener() {
                @Override
                public void onChatroomMessageAttachmentProgress(String messageUuid , long transferred, long total) {
                    if (msgUuid.equals(messageUuid)) {
                        //todo:处理消息上传进度
                    }
                }
            });

            String imagePath = "/sdcard/image.png";
            List<String> userUuids = null; // 空表示全员广播消息;如果指定了成员列表,则为定向消息
            roomContext.getChatController().sendImageMessage(msgUuid, imagePath, userUuids, new NECallback2<Unit>() {
                @Override
                public void onSuccess(@Nullable Unit unit) {
                    super.onSuccess(unit);
                    Log.d(TAG,"success");
                }

                @Override
                public void onError(int code, @Nullable String message) {
                    super.onError(code, message);
                    Log.d(TAG,"error");
                }
            });
        }

发送文件消息

配置步骤

  1. 调用 getRoomContext 接口,获取房间上下文。

    调用此方法时,您需要将 roomUid 设置为您所加入房间的 ID。

  2. 监听消息附件上传进度。

  3. 调用 sendFileMessage 接口,发送图片消息。相关参数说明如下表所示。

    名称 描述
    messageUuid 消息标识,可用于监听该消息附件上传的进度,可通过 [UUID.randomUUID()] 生成
    filePath 文件路径
    userUuids 用户 ID 列表。
    如果 userUuids 为空,表示发送全员消息。
    如果 userUuids 不为空,表示给单人或多人发送消息。
    callback 回调

示例代码

实现发送文件消息的示例代码如下:

        NERoomService roomService = NERoomKit.getInstance().getService(NERoomService.class);
        NERoomContext roomContext = roomService.getRoomContext(roomUuid);
        if (roomContext!=null){
            String msgUuid = UUID.randomUUID();
            roomContext.addRoomListener(new RoomListener() {
                @Override
                public void onChatroomMessageAttachmentProgress(String messageUuid , long transferred, long total) {
                    if (msgUuid.equals(messageUuid)) {
                        //todo:处理消息上传进度
                    }
                }
            });

            String filePath = "/sdcard/word.docx";
            List<String> userUuids = null; // 空表示全员广播消息;如果指定了成员列表,则为定向消息
            roomContext.getChatController().sendFileMessage(msgUuid, filePath, userUuids, new NECallback2<Unit>() {
                @Override
                public void onSuccess(@Nullable Unit unit) {
                    super.onSuccess(unit);
                    Log.d(TAG,"success");
                }

                @Override
                public void onError(int code, @Nullable String message) {
                    super.onError(code, message);
                    Log.d(TAG,"error");
                }
            });
        }

API 参考

方法 功能描述
sendBroadcastTextMessage 发送广播文本消息。
sendDirectTextMessage 发送定向文本消息。
sendGroupTextMessage 给多人发送文本消息。
sendImageMessage 发送图片消息。
sendFileMessage 发送文件消息。
此文档是否对你有帮助?
有帮助
去反馈
  • 功能介绍
  • 消息类型
  • 功能原理
  • 注意事项
  • 给单人发送文本消息
  • 配置步骤
  • 示例代码
  • 给多人发送文本消息
  • 配置步骤
  • 示例代码
  • 发送广播文本消息
  • 配置步骤
  • 示例代码
  • 发送图片消息
  • 配置步骤
  • 示例代码
  • 发送文件消息
  • 配置步骤
  • 示例代码
  • API 参考