消息

大约 4 分钟

消息

消息是桌面端集成中最重要的功能之一,消息的使用方法主要为 :

  • 发送消息

  • 接受消息

同时对于发送不超过2分钟的消息,允许主动撤回。

通过对消息的集成,您可以最快速的集成体验 IM 收发消息的流畅体验。


发送消息

发送消息类型主要有以下几种:

  • 文本消息

  • 文件消息

  • 图片消息

  • CMD 消息

  • 自定义 消息

  • 位置消息

通过这些操作,可以组合帮助您完成多种场景下的 IM 需求。

发送文本、文件、图片等消息(单聊/群聊通用)。完整的消息发送过程,包括创建消息体,创建消息,设置属性,设置回调,然后发送消息,不同的消息类型只是在创建消息体过程不同,其他步骤一样。


发送文本消息

/** 
 * 创建文本消息体
 * param1 文本消息正文,输入参数,String
 * return 消息体 EMTextMessageBody
 */
var textMsgBody = new easemob.EMTextMessageBody("wahhahahaha");
/** 
 * 创建消息
 * param1 发送者用户名,输入参数
 * param2 目的端,会话 ID,输入参数
 * param3 消息体 EMTextMessageBody
 * return 消息 EMMessage
 */
var textSendMsg = easemob.createSendMessage("jwfan", "jwfan1", textMsgBody);
// 消息可以设置扩展属性,用户界面可通过自定义属性,实现自定义等功能
textSendMsg.setAttribute("data", 120);
data = textSendMsg.getAttribute("data");
// 设置消息类型,0为单聊,1为群聊,2为聊天室
textSendMsg.setChatType(0);
// 设置回调
var emCallback = new easemob.EMCallback();
emCallback.onSuccess(() => {
    console.log("emCallback call back success");
    if(me.cfr){
        console.log(sendMessage);
        console.log(sendMessage.msgId());
        return true;
    });
    emCallback.onFail((error) => {
        console.log("emCallback call back fail");
        console.log(error.description);
        console.log(error.errorCode);
        return true;
    });
    emCallback.onProgress((progress) => {
        console.log(progress);
        console.log("call back progress");
    });
sendMessage.setCallback(emCallback);
// 发送消息
chatManager.sendMessage(textMsg);

发送文件

/** 
 * 创建文件消息体
 * param1 文件路径,输入参数,String
 * return 消息体 EMFileMessageBody
 */
var fileMsgBody = new easemob.EMFileMessageBody("/Users/jiangwei/Code/fanjiangwei7/emclient-linux/testapp/file.txt");
// 创建消息
var fileMsg = easemob.createSendMessage("jwfan", "jwfan1", fileMsgBody);
//setCallback(callback) 设置消息回调函数,通过回调函数显示消息发送成功失败,以及附件上传百分比
//callback easemob.EMCallback的实例,设置onSuccess、onFail和onProgress三个回调函数。
fileMsg.setCallback(emCallback);
chatManager.sendMessage(fileMsg);

发送图片

/** 
 * 创建图片消息体
 * param1 图片文件路径,输入参数,String
 * param2 图片缩略图路径,输入参数
 * return 消息体EMFileMessageBody
 */
var imageMsgBody = new easemob.EMImageMessageBody('/Users/jiangwei/Code/fanjiangwei7/emclient-linux/testapp/image_960x718.jpg', '/Users/jiangwei/Code/fanjiangwei7/emclient-linux/testapp/thumb_image.jpg');
var imageMsg = easemob.createSendMessage("jwfan", "jwfan1", imageMsgBody);
imageMsg.setCallback(emCallback);
chatManager.sendMessage(imageMsg);

发送 CMD 消息

var cmdMsgBody = new easemob.EMCmdMessageBody("action");
console.log("cmdMsgBody.type() = " + cmdMsgBody.type());

console.log("cmdMsgBody.action() = " + cmdMsgBody.action());
cmdMsgBody.setAction("displayName");
console.log("cmdMsgBody.action() = " + cmdMsgBody.action());

var obj1 = {"key" : "1", "value" : "1"};
var obj2 = {"key" : "2", "value" : "2"};
console.log("cmdMsgBody.params() = " + cmdMsgBody.params());
cmdMsgBody.setParams([obj1, obj2]);
var cmdMsg = easemob.createSendMessage("jwfan", "jwfan1", cmdMsgBody);
chatManager.sendMessage(cmdMsg);

发送 自定义 消息

自定义消息包括消息event和消息扩展exts,构造及发送过程如下

let customMsgBody = new easemob.EMCustomMessageBody("userCard");
customMsgBody.setExts({'avatar':'https://download-sdk.oss-cn-beijing.aliyuncs.com/downloads/IMDemo/avatar/Image5.png','nickname':'xiaoming','uid':'uid'});
let customMsg = easemob.createSendMessage('lxm9','lxm',customMsgBody);
chatManager.sendMessage(customMsg);

位置消息

/** 
 * 创建位置消息体
 * param1 位置经度,输入参数,String
 * param2 位置纬度,输入参数
 * param3 地址,输入参数
 * return 消息体EMFileMessageBody
 */
var locationMsgBody = new easemob.EMLocationMessageBody(123.45, 35.67, 'USA');
console.log("locationMsgBody.type() = " + locationMsgBody.type());
console.log("locationMsgBody.latitude() = " + locationMsgBody.latitude());
console.log("locationMsgBody.longitude() = " + locationMsgBody.longitude());
console.log("locationMsgBody.address() = " + locationMsgBody.address());
locationMsgBody.setLatitude(87.87);
locationMsgBody.setLongitude(45.45);
locationMsgBody.setAddress('china');
var locationMsg = easemob.createSendMessage("jwfan", "jwfan1", locationMsgBody);
chatManager.sendMessage(locationMsg);

撤回消息

默认发送两分钟内的消息可以撤回,撤回使用recallMessage接口

/** 
 * 撤回消息
 * param msg {EMMessage} 要撤回的消息
 */
chatManager.recallMessage(msg);

接收消息

接收消息在会话管理中通过设置回调函数实现,在回调函数中处理

// 实例化监听回调,并添加到client
chatManager = emclient.getChatManager();
listener = new easemob.EMChatManagerListener();
chatManager.addListener(listener);

// 收到会话消息
listener.onReceiveMessages((messages) => {
    console.log("onReceiveMessages messages.length = " + messages.length);
    for (var index = 0, len = messages.length; index < len; index++) {
    var msg = messages[index];
    var bodies = msg.bodies();
    console.log("bodies.length = " + bodies.length);
    var body = bodies[0];
    var type = body.type();
    console.log("msg.from() = " + msg.from());
    console.log("msg.to() = " + msg.to());
    console.log("body.type() = " + type);
    if (type == 0) {    //text message
      console.log("body.text() = " + body.text());
    } else if (type == 1) {     //image message
      console.log("body.displayName() = " + body.displayName());
      console.log("body.localPath() = " + body.localPath());
      chatManager.downloadMessageAttachments(msg);
      chatManager.downloadMessageThumbnail(msg);
    } else if (type == 5) {     //file message
      console.log("body.displayName() = " + body.displayName());
      console.log("body.localPath() = " + body.localPath());
      chatManager.downloadMessageAttachments(msg);
    }
});
// 收到命令消息
listener.onReceiveCmdMessages ((messages) => {
  for (var index = 0, len = messages.length; index < len; index++) {
  var msg = messages[index];
  var bodies = msg.bodies();
  console.log("bodies.length = " + bodies.length);
  var body = bodies[0];
  var type = body.type();
  console.log("msg.from() = " + msg.from());
  console.log("msg.to() = " + msg.to());
  console.log("msg.type() = " + type);
  console.log("body.action() = " + body.action());
  var params = cmdMsgBody.params()
  console.log("cmdMsgBody.params().length = " + params.length);
  if (params.length > 0) {
    console.log("cmdMsgBody.params()[0] = " + JSON.stringify(params[0]));
  }
}
});

// 收到消息撤回
listener.onReceiveRecallMessages ((message) => {
  console.log("onReceiveRecallMessages messages.length = " + messages.length);
  for (var index = 0, len = messages.length; index < len; index++) {
  var message = messages[index];
  console.log("message.msgId() = " + message.msgId());
  console.log("message.from() = " + message.from());
  console.log("message.to() = " + message.to());
} 
});
// addListener(listener) 添加消息回调监听,从监听中获取接收消息。