房间消息集成

集成房间消息功能需要先 初始化SDK

主要功能为加入房间,收发房间消息、离开房间、具体流程如下:

加入房间

用户必须加入房间才能收发该房间的消息,通过房间 ID 唯一标识某个房间。成功返回0,失败则返回非0

代码示例

LVIMSDK.sharedInstance().joinChatRoom(String rid,Object context, IMBridger.IMSendMessageListener listener);

IMBridger.IMSendMessageListener listener = new IMBridger.IMSendMessageListener() {
        @Override
        public void onIMSendMessageCallback(int ecode, String tid, final IMMsg msg, Object context) {
            if (ecode == 0) {
               Log.d("TAG","加入房间成功");
            }
        }
    };

joinChatRoom

参数说明:

  • rid
    • 待加入的房间ID。
  • context
    • 自定义Object对象,此传参会赋值给listener回调方法onIMSendMessageCallback的context参数返回。
  • listener
    • 发送消息的回调监听。

结果回调

加入房间和之后的离开房间以及发房间消息都是向服务器发消息,得到服务器的响应后 SDK 会回调 IMBridger.IMSendMessageListener 类对象的onIMSendMessageCallback 方法。

void onIMSendMessageCallback(int ecode,String tid,IMMsg msg,Object context);

参数解析

  • ecode
    • 错误码,如果为0则代表发送消息成功,非0为失败。详见 错误码
  • tid
    • 待加入的房间ID。
  • msg
    • 封装加入房间消息的对象。
  • context
    • 发消息接口传入的Object类型参数。

发送房间消息

构建消息

构建失败返回 null

IMMsg msg = IMMsg.buildChatRoomMessage(String targetId,String msgType,String msgContent);

参数说明:

  • targetId
    • 房间ID。此处需传成功加入的房间ID,否则该消息会发送失败。
  • msgType
    • 消息类型,提供给您使用的消息扩展类型字段,您可以使用这个字段自定义消息类型。可传任意字符串,但不能传空串或null。由于房间消息可能数量巨大,此时部分消息可能会被丢弃,若要保证某些类型的消息百分百到达,请联系我们商定该字段的传值以满足该需求。
  • msgContent
    • 消息内容。

代码示例

LVIMSDK.sharedInstance().sendMessage(IMMsg msg,Object context, IMBridger.IMSendMessageListener listener);

IMBridger.IMSendMessageListener sendMessageListener = new IMBridger.IMSendMessageListener() {
        @Override
        public void onIMSendMessageCallback(int ecode, String tid, final IMMsg msg, Object context) {
            if (ecode == 0) {
               Log.d("TAG","发送消息成功");
            }
        }
    };
  • 详细说明
  1. sendMessage

参数说明:

  • msg
    • 步骤1构建的消息对象。
  • context
    • 自定义Object对象,此传参会赋值给listener回调方法onIMSendMessageCallback的context参数返回。
  • listener
    • 发送消息的回调监听。
  1. onIMSendMessageCallback

结果回调

发送私信消息待服务器响应后 SDK 会回调 IMBridger.IMSendMessageListener 类对象的 onIMSendMessageCallback 方法。

void onIMSendMessageCallback(int ecode,String tid,IMMsg msg,Object context);
  • 参数解析

    • ecode
      • 错误码,如果为0则代表发送消息成功,非0为失败。详见 错误码
    • tid
      • 消息接收者ID。
    • msg
      • 发送的消息对象。
    • context
      • 发消息接口传入的Object类型参数。

接收房间消息

加入房间成功后需设置房间消息监听才能收到房间消息。

LVIMSDK.sharedInstance().setChatroomReceiveMessageListener(receiveMessageListener);

IMBridger.IMReceiveMessageListener receiveMessageListener = new IMBridger.IMReceiveMessageListener() {
        @Override
        public boolean onIMReceiveMessageFilter(int cmdtype, int subtype, int diytype, int dataid, String fromid, String toid, String msgType, byte[] msgContent, int waitings, int packetSize, int waitLength, int bufferSize) {
           // 比如当前有超过1000条消息待处理并且消息所占字节数大于10K,则丢弃该消息。
            if(waitings > 1000 && packetSize > 10000){
              return true;
            }
            return false;
        }

        @Override
        public int onIMReceiveMessageHandler(String owner, IMMsg msg, int waitings, int packetSize, int waitLength, int bufferSize) {
            // ...
          
            return 0;
        }
    };

建议在 初始化sdk 时设置全局消息监听,如不设置,私信消息和房间消息都将无法收到。

若设置了房间消息监听,则房间消息只会 回调房间消息监听器 的方法。

在过滤回调方法中您可以根据各参数对消息进行过滤。

以上面代码为例,根据当前待处理消息条数和消息所占字节数过滤掉该消息。

详细说明

  1. onIMReceiveMessageFilter

消息过滤回调,对消息进行过滤。

return true 表示丢弃消息。return false 则会继续处理,回调 onIMReceiveMessageHandler 方法。

boolean onIMReceiveMessageFilter(int cmdtype, int subtype, int diytype, int dataid, String fromid,
                                 String toid, String msgType, byte[] msgContent, int waitings, 
                                 int packetSize, int waitLength, int bufferSize)

参数说明:

  • cmdtype
    • 消息类型:10代表私信类型,11代表群组类型,20代表房间类型,40代表系统类型。
  • subtype
    • 内容类型,为内容的媒体类型,0代表文本内容,1代表图片内容,2代表音频内容,3代表视频内容。80为房间消息,即房间消息不区分媒体类型。
  • diytype
    • SDK处理消息加速策略用,请忽略。
  • dataid
    • SDK处理消息加速策略用,请忽略。
  • fromid
    • 消息发送者用户ID
  • toid
    • 接收者用户ID(如果是房间消息则是房间ID)
  • msgType
    • 消息类型,提供给您使用的消息扩展类型字段,您可以使用这个字段自定义消息类型。可传任意字符串,但不能传空串或null。
  • msgContent
    • 消息内容,是消息内容字符串对应的字节数组。
  • waitings
    • 当前收到的消息队列中等待处理的消息数量。如果待处理的消息量特别大,建议适当丢弃部分消息。
  • packetSize
    • 此条消息数据包所占字节数。在内存紧张的情况下,建议丢弃占字节数特别大的消息。
  • waitLength
    • 当前读取消息的缓冲区中等待处理的字节数大小。
  • bufferSize
    • 当前读取消息的缓冲区的大小。
  1. onIMReceiveMessageHandler

消息处理回调,如果消息未被丢弃,则调用此方法。

int onIMReceiveMessageHandler(String owner, IMMsg msg, int waitings, int packetSize,
                              int waitLength, int bufferSize)
  • owner
    • 当前登录IM的用户ID。
  • msg
  • waitings
    • 当前收到的消息队列中等待处理的消息数量。
  • packetSize
    • 此条消息数据包所占字节数大小。
  • waitLength
    • 当前读取消息的缓冲区中等待处理的字节数大小。
  • bufferSize
    • 当前读取消息的缓冲区的大小。

离开房间

离开房间和加入房间对应,当用户退出房间时调用此方法。

离开房间后将无法收发该房间的消息。

LVIMSDK.sharedInstance().leaveChatRoom(String rid,Object context, IMBridger.IMSendMessageListener listener);

IMBridger.IMSendMessageListener listener = new IMBridger.IMSendMessageListener() {
        @Override
        public void onIMSendMessageCallback(int ecode, String tid, final IMMsg msg, Object context) {
            if (ecode == 0) {
               Log.d("TAG","离开房间成功");
            }
        }
    };

详细说明

  1. leaveChatRoom

参数详解

  • rid
    • 待离开的房间ID。
  • context
    • 自定义Object对象,此传参会赋值给listener回调方法onIMSendMessageCallback的context参数返回。
  • listener
    • 发送消息的回调监听。
  1. onIMSendMessageCallback

结果回调。

加入房间和之后的离开房间以及发房间消息都是向服务器发消息,得到服务器的响应后SDK会回调 IMBridger.IMSendMessageListener 类对象的onIMSendMessageCallback 方法。

void onIMSendMessageCallback(int ecode,String tid,IMMsg msg,Object context);
  • ecode
    • 错误码,如果为0则代表发送消息成功,非0为失败。详见 错误码
  • tid
    • 待离开的房间ID。
  • msg
    • 发送的消息对象。
  • context
    • 发消息接口传入的Object类型参数。