跳转至

消息发送

注意事项

  1. 发送消息必须在成功连接融云服务器 connect 成功之后进行
  2. 每秒最多发送 5 条消息
  3. 群定向消息不存储在历史消息中

参数说明:

参数 类型 必填 说明 最低版本
conversationType Number 会话类型 2.2.0
targetId String 目标 id 2.2.0
msg Object 消息 2.2.0
callback Object 回调对象 2.2.0
isMentioned Boolean 是否为 @ 消息 2.2.0
pushContent String Push 显示内容 2.2.0
pushData String Push 通知时附加信息 2.2.0
orientation Object 群定向消息 2.2.0
orientation.userIds Array 接收定向消息的用户 id 2.2.0
methodType String 已废弃 2.2.0

支持 @ 的会话类型: RongIMLib.ConversationType.GROUP

支持 @ 的消息类型: TextMessageImageMessageVoiceMessageRichContentMessageLocationMessage

文本消息

var isMentioned = true;  // @ 消息
var mentioneds = new RongIMLib.MentionedInfo(); // @ 消息对象
mentioneds.type = RongIMLib.MentionedType.PART;
mentioneds.userIdList = [ 'user1', 'user2' ]; // @ 人员列表

var msg = new RongIMLib.TextMessage({ content: 'hello RongCloud!', extra: '附加信息', mentionedInfo: mentioneds });
var conversationType = RongIMLib.ConversationType.GROUP;  // 群聊, 其他会话选择相应的消息类型即可
var targetId = 'group1';  // 目标 Id

var pushContent = 'user 发送了一条消息';  // Push 显示内容
var pushData = null;  // Push 通知时附加信息, 可不填

var orientation = {
  userIds: [ 'user1', 'user2' ]
}; // 群定向消息, 仅发消息给群中的 user1 和 user2

RongIMClient.getInstance().sendMessage(conversationType, targetId, msg, {
  onSuccess: function (message) {
    // message 为发送的消息对象并且包含服务器返回的消息唯一 id 和发送消息时间戳
    console.log('发送文本消息成功', message);
  },
  onError: function (errorCode) {
    console.log('发送文本消息失败', errorCode);
  }
}, isMentioned, pushContent, pushData, null, orientation);

图片消息

注意事项

  1. 略缩图(content 字段)必须是 base64 字符串, 类型必须为 jpg
  2. base64 略缩图必须不带前缀
  3. base64 字符串大小不可超过 100 k
  4. 可通过 FileReader 或者 canvas 对图片进行压缩, 生成压缩后的 base64 字符串

图片上传请参考:上传

var base64Str = '/9j/4AAQSBAAD/2wBDDBAYEBAQEB....';  // 压缩后的 base64 略缩图, 用来快速展示图片
var imageUri = 'https://www.rongcloud.cn/images/newVersion/log_wx.png';  // 上传到自己服务器的 url. 用来展示高清图片
var msg = new RongIMLib.ImageMessage({content: base64Str, imageUri: imageUri});
var conversationType = RongIMLib.ConversationType.PRIVATE;
var targetId = 'user1';  // 目标 Id

RongIMClient.getInstance().sendMessage(conversationType, targetId, msg, {
  onSuccess: function (message) {
    console.log('发送图片消息成功', message);
  },
  onError: function (errorCode) {
    console.log('发送图片消息失败', errorCode);
  }
});

文件消息

文件上传请参考:上传插件

var name = 'RongIMLib.js';  // 文件名
var size = 1024;  // 文件大小
var type = 'js';  // 文件类型
var fileUrl = 'https://cdn.ronghub.com/RongIMLib.js';  // 文件地址
var msg = new RongIMLib.FileMessage({
  name: name,
  size: size,
  type: type,
  fileUrl: fileUrl
});
var conversationType = RongIMLib.ConversationType.PRIVATE;
var targetId = 'user1';  // 目标 Id

RongIMClient.getInstance().sendMessage(conversationType, targetId, msg, {
  onSuccess: function (message) {
    console.log('发送文件消息成功', message);
  },
  onError: function (errorCode) {
    console.log('发送文件消息失败', errorCode);
  }
});

图文消息

图文消息也称为富文本消息

图片上传请参考:上传

var title = '融云';  // 图文标题
var content = '为用户提供 IM 即时通讯和音视频通讯云服务';  // 图文内容
var imageUri = '';  // 上传到自己服务器的 url
var url = 'https://www.rongcloud.cn';  // 富文本消息点击后打开的 URL
var msg = new RongIMLib.RichContentMessage({
  title: title,
  content: content,
  imageUri: imageUri,
  url: url
});
var conversationType = RongIMLib.ConversationType.PRIVATE;
var targetId = 'user1';  // 目标 Id

RongIMClient.getInstance().sendMessage(conversationType, targetId, msg, {
  onSuccess: function (message) {
    console.log('发送富文本消息成功', message);
  },
  onError: function (errorCode) {
    console.log('发送富文本消息失败', errorCode);
  }
});

位置消息

var latitude = 40.0317727;
var longitude = 116.4175057;
var poi = '北苑路北辰·泰岳';
var content = '/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDABsSFBcUERsXFhceHBsgKE';  // 位置图片 base64
var msg = new RongIMLib.LocationMessage({
  latitude: latitude,
  longitude: longitude,
  poi: poi,
  content: content
});
var conversationType = RongIMLib.ConversationType.PRIVATE;
var targetId = 'user1';  // 目标 Id

RongIMClient.getInstance().sendMessage(conversationType, targetId, msg, {
  onSuccess: function (message) {
    console.log('发送位置消息成功', message);
  },
  onError: function (errorCode) {
    console.log('发送位置消息失败', errorCode);
  }
});

命令消息

var data = "命令指令";  // 可以是一个对象, data = { cmd: update };
var msg = new RongIMLib.CommandMessage({ data: data });
var conversationType = RongIMLib.ConversationType.PRIVATE;
var targetId = "user1";  // 目标 Id

RongIMClient.getInstance().sendMessage(conversationType, targetId, msg, {
  onSuccess: function (message) {
    console.log('发送命令消息成功', message);
  },
  onError: function (errorCode) {
    console.log('发送命令消息失败', errorCode);
  }
});

撤回消息

消息撤回操作服务器端没有撤回时间范围的限制,由客户端决定

// recallMessage 为需要撤回的消息对象
RongIMClient.getInstance().sendRecallMessage(recallMessage, {
  onSuccess: function (message) {
    console.log('撤回成功', message);
  },
  onError: function (errorCode) {
    console.log('撤回失败', errorCode);
  }
});

自定义消息

注册

注意事项

  1. 注册自定义消息代码必须在发送、接收该自定义消息之前
  2. 推荐将所有注册自定义消息代码放在 init 方法之后, connect 方法之前
  3. 注册的消息内置名称, 必须多端一致

代码示例:

var messageName = 'PersonMessage';  // 消息名称
var objectName = 's:person';  // 消息内置名称,请按照此格式命名
var isCounted = true;  // 消息计数
var isPersited = true;  // 消息保存
var mesasgeTag = new RongIMLib.MessageTag(isCounted, isPersited);
var prototypes = ['name', 'age'];  // 消息类中的属性名
RongIMClient.registerMessageType(messageName, objectName, mesasgeTag, prototypes);
发送

代码示例:

var conversationType = RongIMLib.ConversationType.PRIVATE;  //单聊, 其他会话选择相应的消息类型即可
var targetId = 'user1';
var msg = new RongIMClient.RegisterMessage.PersonMessage({ name: 'zhang', age: 12 });
RongIMClient.getInstance().sendMessage(conversationType, targetId, msg, {
    onSuccess: function (message) {
        console.log('发送自定义消息成功');
    },
    onError: function (errorCode) {
        console.log('发送自定义消息失败');
    }
});

正在输入消息

var conversationType = RongIMLib.ConversationType.PRIVATE;  // 只有单聊有正在输入状态
var targetId = 'user1';
var msgName = 'TextMessage';  //用户正在输入的消息类型 VoiceMessage等。

RongIMClient.getInstance().sendTypingStatusMessage(conversationType, targetId, msgName, {
  onSuccess: function (message) {
    console.log('发送正在输入状态成功', message);
  },
  onError: function (errorCode) {
    console.log('发送正在输入状态失败', errorCode);
  }
});

已读通知消息

var messageUId = '1301-NBJQ-MK31-3417';  // 消息唯一 Id, message 中的 messageUid
var lastMessageSendTime = 1550719033312;  // 最后一条消息的发送时间
var type = '1';  // 备用,默认赋值 1 即可
// 以上 3 个属性在会话的最后一条消息中可以获得

var msg = new RongIMLib.ReadReceiptMessage({ messageUId: messageUId, lastMessageSendTime: lastMessageSendTime, type: type });
var conversationType = RongIMLib.ConversationType.PRIVATE;
var targetId = 'user1';  // 目标 Id

RongIMClient.getInstance().sendMessage(conversationType, targetId, msg, {
  onSuccess: function (message) {
    console.log('发送已读通知成功', message);
  },
  onError: function (errorCode) {
    console.log('发送已读通知失败', errorCode);
  }
});

阅读状态同步

单聊会话中消息阅读状态处理详情请参考: 消息状态判定及处理方式

携带用户信息

Web 端如何展示用户信息 ?

一般展示用户信息的方法有两种:

通过开发者 App Server 获取用户信息

1、开发者 App Server 封装获取用户信息接口

2、通过 message.senderUserId 获取发送者 id

3、将发送者 id 传入 App Server 暴露的接口中, 获取对应用户信息

4、将用户信息展示到页面中

发消息时携带用户信息

1、获取当前用户(也就是发送者)的用户信息

2、发消息时携带当前用户信息

3、展示消息时, 通过消息体内的用户信息进行展示

以文本消息为例:

var msg = new RongIMLib.TextMessage({
  content: 'hello RongCloud!',
  user : { // 当前用户(发送者) 信息
    "id" : "user1",
    "name" : "张三",
    "portrait" : "https://cdn.ronghub.com/thinking-face.png"
  },
});
var conversationType = RongIMLib.ConversationType.PRIVATE;
var targetId = 'user2';  // 目标 Id

RongIMClient.getInstance().sendMessage(conversationType, targetId, msg, {
  onSuccess: function (message) {
    console.log('发送消息成功, 用户信息为: ', message.content.user);
    /* {
      "id" : "user1",
      "name" : "张三",
      "portrait" : "https://cdn.ronghub.com/thinking-face.png"
    } */
  },
  onError: function (errorCode) {
    console.log('发送消息失败', errorCode);
  }
});