消息收发
单聊指的是一对一的收发消息。云通讯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{
- //后续还会支持(地理位置,视频,以及自定义消息等)
- }
- //通知前端更新页面