消息收发

单聊指的是一对一的收发消息。云通讯SDK支持一对一发送文本消息、图片消息、文件消息等,代码示例详细介绍如下。
API介绍
方法名:RL_YTX.sendMsg(MsgBuilder, callback, onError)查看API
对象:MsgBuilder

发送文本 

我们假设Tony给John发送文本消息,示例代码如下(参考Demo中IM.EV_sendTextMsg)
  • //新建消息体对象
  • var obj = new RL_YTX.MsgBuilder();
  • //设置自定义消息id
  • obj.setId(msgid);
  • //设置发送的文本内容
  • obj.setText(text);
  • //设置发送的消息类型1:文本消息 4:图片消息 6:压缩文件 7:非压缩文件
  • //发送非文本消息时,text字段将被忽略,发送文本消息时 file字段将被忽略
  • obj.setType(1);
  • //设置接收者
  • obj.setReceiver(“john的id”); 
  • RL_YTX.sendMsg(obj, function(){
  • //发送消息成功
  • //处理用户逻辑,通知页面
  • }, function(obj){//失败
  • //发送消息失败
  • //处理用户逻辑,通知页面刷新,展现重发按钮

发送图片

我们假设Tony给John发送图片消息,示例代码如下(参考Demo中IM.EV_sendfile)
  • //新建消息体对象
  • var obj = new RL_YTX.MsgBuilder();
  • //设置自定义消息id
  • obj.setId(msgid);
  • //假设页面存在一个id为file的<input type=”file”>元素 
  • //获取图片或附件对象
  • var file = document.getElementById("file").files[0];
  • //设置图片或附件对象
  • obj.setFile(file);
  • //设置发送的消息类型1:文本消息 4:图片消息 6:压缩文件 7:非压缩文件
  • //发送非文本消息时,text字段将被忽略,发送文本消息时 file字段将被忽略
  • obj.setType(4);
  • //设置接收者
  • obj.setReceiver(“john的id”); 
  • RL_YTX.sendMsg(obj, function(){
  • //发送消息成功
  • //处理用户逻辑,通知页面
  • }, function(obj){//失败
  • //发送消息失败
  • //处理用户逻辑,通知页面刷新,展现重发按钮
  • }, function(sended, total){
  • //发送图片或附件时的进度条
  •  //如果发送文本消息,可以不传该参数
  • }); 

发送附件

我们假设Tony给John发送文件消息,示例代码如下(参考Demo中IM.EV_sendfile):
  • //新建消息体对象
  • var obj = new RL_YTX.MsgBuilder();
  • //设置自定义消息id
  • obj.setId(msgid);
  • //假设页面存在一个id为file的<input type=”file”>元素 
  • //获取图片或附件对象
  • var file = document.getElementById("file").files[0];
  • //设置附件对象
  • obj.setFile(file);
  • //设置发送的消息类型1:文本消息 4:图片消息 6:压缩文件 7:非压缩文件
  • //发送非文本消息时,text字段将被忽略,发送文本消息时 file字段将被忽略
  • obj.setType(6或者7);
  • //设置接收者
  • obj.setReceiver(“john的id”);
  •  
  • RL_YTX.sendMsg(obj, function(){
  • //发送消息成功
  • //处理用户逻辑,通知页面
  • }, function(obj){//失败
  • //发送消息失败
  • //处理用户逻辑,通知页面刷新,展现重发按钮
  • }, function(sended, total){
  • //发送图片或附件时的进度条
  •  //如果发送文本消息,可以不传该参数
  • });

用户输入状态

1、当John给Tony发消息:John将光标定位在输入框的时候,如果有选中的当前联系人Tony。根据消息类型12来判断是否是状态消息。
  • var result = IM.Do_boxCheck(bOn);
  • if (result != null){
  •  // 发送消息至服务器
  •  if ("C"== result[3]){
  •  IM.EV_sendTextMsg(result[0], domain, result[2],false, IM._transfer);
  •  }}
2、当Tony收到这个正在输入的状态消息时,判断如果msgType等于12的时候,说明这是个输入状态的消息监听,通过msgDomain来判断状态。 
  • RL_YTX.onMsgReceiveListener(function(obj){
  •  if(obj.msgType == 12){
  •  if (obj.msgDomain == 1){
  •  //正在输入……
  •  return;
  •  } elseif (obj.msgDomain == 0){
  •  //非任何输入状态
  •  return;
  •  } elseif (obj.msgDomain == 2){
  •  //正在录音;
  •  return;
  •  }
  •  }
  •  IM.DO_push_createMsgDiv(obj);
  •  })    

自定义消息

自定义消息通过发送文本消息接口扩展字段来实现,示例代码如下:
  • //新建消息体对象
  • var obj = new RL_YTX.MsgBuilder();
  • //设置自定义消息id
  • obj.setId(msgid);
  • //设置接收者
  • obj.setReceiver(“john的id”);
  • //发送文本消息发自定义
  • obj.setType(1);
  • obj.setDomain(“用户自定义消息”);
  • RL_YTX.sendMsg(obj, function(){
  • //发送消息成功
  • //处理用户逻辑,通知页面
  • }, function(obj){//失败
  • //发送消息失败
  • //处理用户逻辑,通知页面刷新,展现重发按钮
  • });

接收消息

我们假设John收到Tony发送过来的消息,接收消息的监听设置方法参考文档:登录及设置回调
示例代码如下(参考Demo中IM. EV_onMsgReceiveListener)
  • //获取发送者为 
  • var sender = obj.msgSender;
  • //获取发送者昵称,如果不存在,使用账号代替
  • var you_senderNickName = obj.senderNickName;
  • var name = obj.msgSender;
  • if(!!you_senderNickName){
  •  name = you_senderNickName;
  • }
  • var content_type = null;
  • //获取消息版本号(是服务器的版本号)
  • var version = obj.version;
  • //获取消息发送时间
  • var time = obj.msgDateCreated;
  • //获取消息类型 
  • //1:文本消息 2:语音消息4:图片消息6:文件
  • var msgType = obj.msgType;
  • if(1 == msgType || 0 == msgType){
  •  //文本消息,获取消息内容
  • var you_msgContent = obj.msgContent;
  • }else if(2 == msgType){
  •  //语音消息,获取语音文件url
  •  var url = obj.msgFileUrl;
  • }else if(3 == msgType){
  • //3:视频消息,获取视频url
  •  //语音消息,获取语音文件url
  •  var url = obj.msgFileUrl;
  • }else if(4 == msgType){
  •  //图片消息 获取图片url
  •  var url = obj.msgFileUrl;
  • }else{
  •  //后续还会支持(地理位置,视频,以及自定义消息等)
  • }
  • //通知前端更新页面