该套代码为从项目案例中提取的,可以直接拿去使用,主要包含了单聊及消息的处理。主要分三个页面处理完成,入口首页(index)、消息列表页(message)、会话页面(chat)
index.html 页面(app入口页面)

var rong;
apiready=function(){rong = api.require('rongCloud2');//判断用户登录成功后执行方法
    rongCloud();
}function rongCloud(){//初始化
    init();//消息的监听,监听到新消息后将消息广播出去,在会话页面监听接收并判断
    setOnReceiveMessageListener();//连接融云服务器
    connect();//监听获取某一会话最新消息记录
    api.addEventListener({name: 'getLatestMessages'}, function(ret){if(ret && ret.value){var value = ret.value;getLatestMessages(value.targetId,value.type);}});//监听获取某一会话历史消息记录
    api.addEventListener({name: 'getHistoryMessages'}, function(ret){if(ret && ret.value){var value = ret.value;getHistoryMessages(value.targetId,value.type,value.oldestMessageId);}});//监听发送新消息,监听完成后将消息再次广播出去,列表级会话页面监听接收
    api.addEventListener({name:'sendMessage'},function(ret){if(ret && ret.value){var data = ret.value;//目标id,消息内容,消息类型
            sendMessage(data.targetId,data.conversationType,data.objectName,data.message);}})
}//初始化融云function init(){rong.init(function(ret, err){});}/**
*全局消息监听
*整个app项目中,所有的消息监听事件都在此方法中完成,如果正在会话,监听到消息后通过api.sendEvent方法广播出去
*/
function setOnReceiveMessageListener(){rong.setOnReceiveMessageListener(function (ret, err) {if(ret){//将监听到的消息广播出去,在会话页面接收
            api.sendEvent({name: 'setOnReceiveMessageListener',extra: {result:ret.result}});switch(ret.result.message.objectName){//文字消息case 'RC:TxtMsg':var notificationMessage = ret.result.message.content.text;break;//图片消息case 'RC:ImgMsg':var notificationMessage = '[图片]';break;//语音消息case 'RC:VcMsg':var notificationMessage = '[语音]';break;}}})
}/**
*连接融云服务器
*连接成功后使用getConversationList获取会话列表
*/
function connect(){//根据本地用户id,从服务器端获取用户融云的tokenvar token = $api.getStorage('rongCloudToken');rong.connect({token: ''+token+''},function(ret, err){if (ret.status == 'success'){//连接成功后获取会话列表
                getConversationList();}});
}//获取会话列表
function getConversationList(){rong.getConversationList(function (ret, err) {if(ret.status=='success'){//广播会话列表事件
            api.sendEvent({name: 'getConversationList',extra: {result:ret.result,status:ret.status}});}})
}//获取某一会话的最新消息记录
function getLatestMessages(targetId,type){rong.getLatestMessages({conversationType: ''+type+'',targetId: ''+targetId+'',count: 20}, function (ret, err) {if(ret.status=='success'){//将获得的历史消息广播出去,在会话页面接收
                api.sendEvent({name: 'backLatestMessages',extra: {result:ret.result,status:ret.status}});}})
}//获取某一会话历史消息记录
function getHistoryMessages(targetId,type,oldestMessageId){rong.getHistoryMessages({conversationType: ''+type+'',targetId: ''+targetId+'',oldestMessageId: ''+oldestMessageId+'',count: 20}, function (ret, err) {if(ret.status=='success'){//将获得的历史消息广播出去,在会话页面接收
                api.sendEvent({name: 'backHistoryMessages',extra: {result:ret.result,status:ret.status}});}})
}//发送消息
function sendMessage(targetId,conversationType,objectName,message){switch(objectName){//文字消息case 'RC:TxtMsg':rong.sendTextMessage({conversationType: ''+conversationType+'',targetId: ''+targetId+'',text: ''+message+'',extra: ''}, function (ret, err) {if (ret.status == 'prepare'){//发送准备,广播出去,在会话页面监听接收
                    api.sendEvent({name: 'backSendMessage',extra: {result:ret.result}});insertMessage(targetId,conversationType,objectName,ret.result);}else if (ret.status == 'success'){//发送成功的处理}else if (ret.status == 'error'){//发送失败的处理//api.toast({ msg: err.code });
                }})break;//图片消息case 'RC:ImgMsg':rong.sendImageMessage({conversationType: ''+conversationType+'',targetId: ''+targetId+'',imagePath: ''+message+'',extra: ''}, function (ret, err) {if (ret.status == 'prepare'){//发送准备,广播出去,在会话页面监听接收
                        api.sendEvent({name: 'backSendMessage',extra: {result:ret.result}});insertMessage(targetId,conversationType,objectName,ret.result);}else if (ret.status == 'progress'){//广播图片的进度
                        }else if (ret.status == 'success'){api.sendEvent({name: 'backSendMessageSuccess',extra: {messageId:ret.result.message.messageId}});}else if (ret.status == 'error'){api.toast({ msg: err.code });}});break;//语音消息case 'RC:VcMsg':rong.sendVoiceMessage({conversationType: ''+conversationType+'',targetId: ''+targetId+'',voicePath: ''+message.path+'',duration: ''+message.duration+'',extra: ''}, function (ret, err) {if (ret.status == 'prepare'){//发送准备,广播出去,在会话页面监听接收
                        api.sendEvent({name: 'backSendMessage',extra: {result:ret.result}});insertMessage(targetId,conversationType,objectName,ret.result);}else if (ret.status == 'success'){api.toast({ msg: ret.result.message.messageId });}else if (ret.status == 'error'){api.toast({ msg: err.code });}});break;}}

消息列表页核心代码

HTML
<div class="aui-content"><ul class="aui-user-view" id="messageList"></ul></div>

JS核心代码
apiready=function(){//请求获取会话列表
    api.sendEvent({name: 'requestConversationList'});//监听新消息
    api.addEventListener({name: 'setOnReceiveMessageListener'}, function(ret, err){if(ret && ret.value){var result = ret.value.result;if($api.byId("target-"+result.message.targetId)){//如果存在更新消息内容//此处也定义个id,更消息内容类型做个判断switch(result.message.objectName){//文字消息case 'RC:TxtMsg':$api.text($api.byId("targetMessage-"+result.message.targetId),result.message.content.text);break;//图片消息case 'RC:ImgMsg':$api.text($api.byId("targetMessage-"+result.message.targetId),"[图片]");break;//语音消息case 'RC:VcMsg':$api.text($api.byId("targetMessage-"+result.message.targetId),"[语音]");break;}//将当前消息容器移动到顶部if(result.message.conversationType!='CUSTOMER_SERVICE' && $api.dom("#messageList > li")){$api.byId("messageList").insertBefore($api.byId("target-"+result.message.targetId),$api.byId("messageList").childNodes[0]);}}else{//如果不存在写入var html='';if(result.message.conversationType=='CUSTOMER_SERVICE'){}else if(result.message.conversationType=='PRIVATE'){html += '<li class="aui-user-view-cell aui-img" id="target-'+result.message.targetId+'" tapmode οnclick="openChat('+result.message.targetId+')">';html += '<img class="aui-img-object aui-pull-left" src="../../image/noavatar.gif" id="avatar-'+result.message.targetId+'">';html += '<div class="aui-img-body aui-arrow-right">'html += '<span id="realname-'+result.message.targetId+'"></span>';//此处也定义个id,更消息内容类型做个判断switch(result.message.objectName){//文字消息case 'RC:TxtMsg':html += '<p class="aui-ellipsis-1" id="targetMessage-'+result.message.targetId+'">'+result.message.content.text+'</p>';break;//图片消息case 'RC:ImgMsg':html += '<p class="aui-ellipsis-1" id="targetMessage-'+result.message.targetId+'">[图片]</p>';break;//语音消息case 'RC:VcMsg':html += '<p class="aui-ellipsis-1" id="targetMessage-'+result.message.targetId+'">[语音]</p>';break;}html += '</div>';html += '</li>';$api.prepend($api.byId("messageList"),html);getUserInfo(result.message.targetId);}api.parseTapmode();}}});//监听会话列表事件 getConversationList
    api.addEventListener({name: 'getConversationList'}, function(ret, err){if(ret && ret.value){var status = ret.value.status;var result = ret.value.result;if(status=='success'){//获取成功后将消息内容插入至容器var targetIds='',html='',messageList = result;for(var i in messageList){if(messageList[i].conversationType=='CUSTOMER_SERVICE'){$api.text($api.byId("targetMessage-"+messageList[i].targetId),messageList[i].latestMessage.text);}else if(messageList[i].conversationType=='PRIVATE'){//组装用户id,批量获取用户信息targetIds += messageList[i].targetId+',';//注意定义容器的id为消息目标id(targetId)html += '<li class="aui-user-view-cell aui-img" id="target-'+messageList[i].targetId+'" tapmode οnclick="openChat('+messageList[i].targetId+')">';html += '<img class="aui-img-object aui-pull-left" src="../image/noavatar.gif" id="avatar-'+messageList[i].targetId+'">';html += '<div class="aui-img-body aui-arrow-right">'html += '<span id="realname-'+messageList[i].targetId+'">...</span>';//此处也定义个id,更消息内容类型做个判断switch(messageList[i].objectName){//文字消息case 'RC:TxtMsg':html += '<p class="aui-ellipsis-1" id="targetMessage-'+messageList[i].targetId+'">'+messageList[i].latestMessage.text+'</p>';break;//图片消息case 'RC:ImgMsg':html += '<p class="aui-ellipsis-1" id="targetMessage-'+messageList[i].targetId+'">[图片]</p>';break;//语音消息case 'RC:VcMsg':html += '<p class="aui-ellipsis-1" id="targetMessage-'+messageList[i].targetId+'">[语音]</p>';break;}html += '</div>';html += '</li>';}}if(targetIds.length>0){//去掉组装完用户id的最后符号targetIds = targetIds.substring(0,targetIds.length-1);getUserInfos(targetIds);}$api.append($api.byId("messageList"),html);api.parseTapmode();}}})//监听发送的新消息
    api.addEventListener({name: 'backSendMessage'}, function(ret){if(ret && ret.value){var result = ret.value.result;if($api.byId("targetMessage-"+result.message.targetId)){switch(result.message.objectName){//文字消息case 'RC:TxtMsg':$api.text($api.byId("targetMessage-"+result.message.targetId),'我:'+result.message.content.text);break;//图片消息case 'RC:ImgMsg':$api.text($api.byId("targetMessage-"+result.message.targetId),'我:[图片]');break;//语音消息case 'RC:VcMsg':$api.text($api.byId("targetMessage-"+result.message.targetId),'我:[语音]');break;}if(result.message.conversationType!='CUSTOMER_SERVICE'){$api.byId("messageList").insertBefore($api.byId("target-"+result.message.targetId),$api.byId("messageList").childNodes[0]);}}else{//如果不存在写入var html='';html += '<li class="aui-user-view-cell aui-img" id="target-'+result.message.targetId+'" tapmode οnclick="openChat('+result.message.targetId+')">';html += '<img class="aui-img-object aui-pull-left" src="../../image/noavatar.gif" id="avatar-'+result.message.targetId+'">';html += '<div class="aui-img-body aui-arrow-right">'html += '<span id="realname-'+result.message.targetId+'"></span>';//此处也定义个id,更消息内容类型做个判断switch(result.message.objectName){//文字消息case 'RC:TxtMsg':html += '<p class="aui-ellipsis-1" id="targetMessage-'+result.message.targetId+'">'+result.message.content.text+'</p>';break;//图片消息case 'RC:ImgMsg':html += '<p class="aui-ellipsis-1" id="targetMessage-'+result.message.targetId+'">我:[图片]</p>';break;//语音消息case 'RC:VcMsg':html += '<p class="aui-ellipsis-1" id="targetMessage-'+result.message.targetId+'">我:[语音]</p>';break;}html += '</div>';html += '</li>';$api.prepend($api.byId("messageList"),html);getUserInfo(result.message.targetId);api.parseTapmode();}}})
}//批量获取用户信息
function getUserInfos(userids){api.ajax({url: '',method: 'post',timeout: 30,dataType: 'json',returnAll:false,data:{values:{userids:userids}}},function(ret,err){if (ret) {for(var i in ret){if(ret[i].userid){if(ret[i].avatar){$api.attr($api.byId("avatar-"+ret[i].userid),'src',ret[i].avatar);}$api.text($api.byId("realname-"+ret[i].userid),ret[i].realname);}}}});
}
//获取单个用户信息
function getUserInfo(userid){api.ajax({url: '',method: 'post',timeout: 30,dataType: 'json',returnAll:false,data:{values:{userid:userid}}},function(ret,err){if (ret) {if(ret.avatar){$api.attr($api.byId("avatar-"+ret.userid),'src',ret.avatar);}$api.text($api.byId("realname-"+ret.userid),ret.realname);}});
}

会话(单聊)页面核心代码:
结合UIChatBox模块

var myAvatar,targetId,targetAvatar,targetNickname,oldestMessageId='-1',chatBox,sourcePath = "widget://image/emotion",//表情存放目录emotionData;//存储表情
apiready = function(){//从本地数据存贮获取我的头像myAvatar = $api.getStorage('avatar');targetId = api.pageParam.targetId;//传递过来的目标用户idtargetAvatar = api.pageParam.targetAvatar;//传递过来的目标用户头像targetNickname = api.pageParam.targetNickname;//传递过来的目标用户昵称api.parseTapmode();//优化点击事件(300)//表情图片处理getImgsPaths(sourcePath, function (emotion) {emotionData = emotion;});//获取最新消息记录
    getLatestMessages();//监听来自消息列表的新消息
    api.addEventListener({name: 'setOnReceiveMessageListener'}, function(ret){if(ret && ret.value){var result = ret.value.result;//如果当前消息的目标id等于当前会话目标id,写入if(result.message.targetId==targetId){var html = '';html += '<div class="aui-chat-receiver" id="message-'+result.message.messageId+'">';html += '<div class="aui-chat-receiver-avatar"><img src="'+targetAvatar+'"></div>';html += '<div class="aui-chat-receiver-cont">';html += '<div class="aui-chat-left-triangle"></div>';switch(result.message.objectName){//文字消息case 'RC:TxtMsg':html += '<span>'+transText(result.message.content.text)+'</span>';break;//图片消息case 'RC:ImgMsg':html += '<span class="aui-chat-img chat-img"><img src="'+result.message.content.thumbPath+'" /></span>';break;//语音消息case 'RC:VcMsg':html += '<div class="aui-chat-status">'+result.message.content.duration+'s</div>';html += '<span tapmode οnclick="playVoice(\''+result.message.content.voicePath+'\',\''+result.message.messageId+'\')" ><i class="aui-iconfont aui-icon-sound" id="messageVoice-'+result.message.messageId+'"></i></span>';break;}html += '</div>';html += '</div>';$api.append($api.byId("messageList"),html);api.parseTapmode();//容器自动滚动至底部的处理,加个100毫秒演示防止不成功setTimeout(function(){window.scrollTo(0,$api.offset($api.byId("messageList")).h);},100)}}})//监听发送的新消息
    api.addEventListener({name: 'backSendMessage'}, function(ret){if(ret && ret.value){var result = ret.value.result;//如果当前消息的目标id等于当前会话目标id,写入if(result.message.targetId==targetId){var html = '';html += '<div class="aui-chat-sender" id="message-'+result.message.messageId+'">';html += '<div class="aui-chat-sender-avatar"><img src="'+myAvatar+'"></div>';html += '<div class="aui-chat-sender-cont">';html += '<div class="aui-chat-right-triangle"></div>';switch(result.message.objectName){//文字消息case 'RC:TxtMsg':html += '<span>'+transText(result.message.content.text)+'</span>';break;//图片消息case 'RC:ImgMsg':html += '<div class="aui-chat-status chat-img" id="messageStatus-'+result.message.messageId+'"><i class="aui-iconfont aui-icon-loading aui-chat-progress"></i></div>';html += '<span class="aui-chat-img"><img src="'+result.message.content.thumbPath+'" /></span>';break;//语音消息case 'RC:VcMsg'://alert(JSON.stringify(ret.value.message.content));html += '<div class="aui-chat-status">'+result.message.content.duration+'s</div>';html += '<span tapmode οnclick="playVoice(\''+result.message.content.voicePath+'\',\''+result.message.messageId+'\')"><i class="aui-iconfont aui-icon-sound" id="messageVoice-'+result.message.messageId+'"></i></span>';break;}html += '</div>';html += '</div>';$api.append($api.byId("messageList"),html);api.parseTapmode();window.scrollTo(0,$api.offset($api.byId("messageList")).h);}}})//监听发送的新消息是否完成
    api.addEventListener({name: 'backSendMessageSuccess'}, function(ret){if(ret && ret.value){if($api.byId("messageStatus-"+ret.value.messageId)){$api.remove($api.byId("messageStatus-"+ret.value.messageId));}}})//下拉加载历史消息
    api.setRefreshHeaderInfo({visible: true,loadingImg: 'widget://image/ptr_pull.png',bgColor: '#ffffff',textColor: '#ff7372',textDown: '下拉加载',textLoading: '加载中',textUp: '松开加载',showTime: false}, function(ret, err){api.refreshHeaderLoading();//发送一个获取历史消息的事件
        api.sendEvent({name: 'getHistoryMessages',extra: {targetId:targetId,type:'PRIVATE',oldestMessageId:oldestMessageId}});api.refreshHeaderLoadDone();//从服务器加载数据,完成后调用api.refreshHeaderLoadDone()方法恢复组件到默认状态
    });//监听获取历史消息
    api.addEventListener({name: 'backHistoryMessages'}, function(ret){if(ret && ret.value.result){var result = ret.value.result;var myUserid = $api.getStorage('userid');//重新排序var messageList = result.sort(getSortFun('asc', 'sentTime'));oldestMessageId  = messageList[0].messageId;var html = '';for(var i in messageList){if(messageList[i].senderUserId==myUserid){//当前发送用户html += '<div class="aui-chat-sender" id="message-'+messageList[i].messageId+'">';html += '<div class="aui-chat-sender-avatar"><img src="'+myAvatar+'"></div>';html += '<div class="aui-chat-sender-cont">';html += '<div class="aui-chat-right-triangle"></div>';}else{html += '<div class="aui-chat-receiver" id="message-'+messageList[i].messageId+'">';html += '<div class="aui-chat-receiver-avatar"><img src="'+targetAvatar+'"></div>';html += '<div class="aui-chat-receiver-cont">';html += '<div class="aui-chat-left-triangle"></div>';}switch(messageList[i].objectName){//文字消息case 'RC:TxtMsg':html += '<span>'+transText(messageList[i].content.text)+'</span>';break;//图片消息case 'RC:ImgMsg':html += '<span class="aui-chat-img chat-img"><img src="'+messageList[i].content.thumbPath+'" /></span>';break;//语音消息case 'RC:VcMsg'://html += '<span>[语音消息]</span>';html += '<div class="aui-chat-status">'+messageList[i].content.duration+'s</div>';html += '<span tapmode οnclick="playVoice(\''+messageList[i].content.voicePath+'\',\''+messageList[i].messageId+'\')"><i class="aui-iconfont aui-icon-sound" id="messageVoice-'+messageList[i].messageId+'"></i></span>';break;}html += '</div>';html += '</div>';}$api.prepend($api.byId("messageList"),html);api.parseTapmode();}});//chatbox部分chatBox = api.require('UIChatBox');openChatBox();//监听键盘聊天框键盘弹出,用于调整聊天窗口高度
    chatBox.addEventListener({target: 'inputBar',name: 'move'}, function(ret,err){if(ret.panelHeight>0){api.setFrameAttr({name: 'chat_private_frm',rect:{h:api.frameHeight-ret.panelHeight}});}else{api.setFrameAttr({name: 'chat_private_frm',rect:{h:api.frameHeight}});}setTimeout(function(){window.scrollTo(0,$api.offset($api.byId("messageList")).h);},200)});//监听按下录音
    chatBox.addEventListener({target: 'recordBtn',name: 'press'}, function(ret,err){api.startRecord({//path: 'fs://1.amr'
        });});//监听松开录音键
    chatBox.addEventListener({target: 'recordBtn',name: 'press_cancel'}, function(ret,err){//松开后停止录音
        api.stopRecord(function(ret,err){if (ret && ret.duration > 0) {api.sendEvent({name:'sendMessage',extra: {targetId:targetId,objectName:'RC:VcMsg',conversationType:'PRIVATE',message:ret}})}});});
}//获取最新消息记录
function getLatestMessages(){//通过sendEvent方法从message_list中获取当前会话历史消息,发送目标id,消息类型,最后一条id
    api.sendEvent({name: 'getLatestMessages',extra: {targetId:targetId,type:'PRIVATE'}});//监听获取历史消息
    api.addEventListener({name: 'backLatestMessages'}, function(ret){//alert(JSON.stringify(ret.value));if(ret && ret.value.result){var result = ret.value.result;var myUserid = $api.getStorage('userid');//重新排序var messageList = result.sort(getSortFun('asc', 'sentTime'));oldestMessageId  = messageList[0].messageId;var html = '';for(var i in messageList){if(messageList[i].senderUserId==myUserid){//当前发送用户html += '<div class="aui-chat-sender" id="message-'+messageList[i].messageId+'">';html += '<div class="aui-chat-sender-avatar"><img src="'+myAvatar+'"></div>';html += '<div class="aui-chat-sender-cont">';html += '<div class="aui-chat-right-triangle"></div>';}else{html += '<div class="aui-chat-receiver" id="message-'+messageList[i].messageId+'">';html += '<div class="aui-chat-receiver-avatar"><img src="'+targetAvatar+'"></div>';html += '<div class="aui-chat-receiver-cont">';html += '<div class="aui-chat-left-triangle"></div>';}switch(messageList[i].objectName){//文字消息case 'RC:TxtMsg':html += '<span>'+transText(messageList[i].content.text)+'</span>';break;//图片消息case 'RC:ImgMsg':html += '<span class="aui-chat-img chat-img"><img src="'+messageList[i].content.thumbPath+'" /></span>';break;//语音消息case 'RC:VcMsg'://html += '<span>[语音消息]</span>';html += '<div class="aui-chat-status">'+messageList[i].content.duration+'s</div>';html += '<span tapmode οnclick="playVoice(\''+messageList[i].content.voicePath+'\',\''+messageList[i].messageId+'\')"><i class="aui-iconfont aui-icon-sound" id="messageVoice-'+messageList[i].messageId+'"></i></span>';break;}html += '</div>';html += '</div>';}$api.prepend($api.byId("messageList"),html);api.parseTapmode();setTimeout(function(){window.scrollTo(0,$api.offset($api.byId("messageList")).h);},300)}});
}//排序函数
function getSortFun(order, sortBy) {var ordAlpah = (order == 'asc') ? '>' : '<';var sortFun = new Function('a', 'b', 'return a.' + sortBy + ordAlpah + 'b.' + sortBy + '?1:-1');return sortFun;
}//表情处理
function transText(text, imgWidth, imgHeight){var imgWidth = imgWidth || 24;var imgHeight = imgHeight || 24;var regx= /\[(.*?)\]/gm;var textTransed = text.replace(regx,function(match){var imgSrc = emotionData[match];if( !imgSrc){ /* 说明不对应任何表情,直接返回即可.*/return match;}var img = "<img src='" + imgSrc+ "' width='" + imgWidth +  "' height ='" + imgHeight +"' />";return img;});return textTransed;
}
/*获取所有表情图片的名称和真实URL地址,以JSON对象形式返回。其中以表情文本为 属性名,以图片真实路径为属性值*/
function getImgsPaths(sourcePathOfChatBox, callback){var jsonPath = sourcePathOfChatBox + "/emotion.json";//表情的JSON数组
    api.readFile({path: jsonPath},function(ret,err){if(ret.status){var emotionArray = JSON.parse(ret.data);var emotion = {};for(var i in emotionArray){var emotionItem = emotionArray[i];var emotionText = emotionItem["text"];var emotionUrl = "../image/emotion/"+emotionItem["name"]+".png";emotion[emotionText] = emotionUrl;}/*把emotion对象 回调出去*/if("function" === typeof(callback)){callback(emotion);}}});
}function openChatBox(){chatBox.open({placeholder: '',maxRows: 4,emotionPath: 'widget://image/emotion',texts: {recordBtn: {normalTitle: '按住 说话',activeTitle: '松开 结束'}},styles: {inputBar: {borderColor: '#d9d9d9',bgColor: '#f2f2f2'},inputBox: {borderColor: '#B3B3B3',bgColor: '#FFFFFF'},emotionBtn: {normalImg: 'widget://image/chatBox/face1.png'},extrasBtn: {normalImg: 'widget://image/chatBox/add1.png'},keyboardBtn: {normalImg: 'widget://image/chatBox/key1.png'},speechBtn: {normalImg: 'widget://image/chatBox/key3.png'},recordBtn: {normalBg: '#c4c4c4',activeBg: '#999999',color: '#000',size: 14},indicator: {target: 'both',color: '#c4c4c4',activeColor: '#9e9e9e'}},extras: {titleSize: 10,titleColor: '#a3a3a3',btns: [{title: '图片',normalImg: 'widget://image/chatBox/album1.png',activeImg: 'widget://image/chatBox/album2.png'},{title: '拍照',normalImg: 'widget://image/chatBox/cam1.png',activeImg: 'widget://image/chatBox/cam2.png'}]}}, function(ret){//点击附加功能面板if(ret.eventType == 'clickExtras'){//alert("用户点击了第"+ ret.index +"个按钮");if(ret.index==0){//图片
                api.getPicture({sourceType: 'library',encodingType: 'jpg',mediaValue: 'pic',destinationType: 'url',allowEdit: true,quality: 70,targetWidth:320,saveToPhotoAlbum: false}, function(ret, err){ if (ret) {api.sendEvent({name:'sendMessage',extra: {targetId:targetId,objectName:'RC:ImgMsg',conversationType:'PRIVATE',message:ret.data}})}});}else if(ret.index==1){//图片
                api.getPicture({sourceType: 'camera',encodingType: 'jpg',mediaValue: 'pic',destinationType: 'url',allowEdit: true,quality: 70,targetWidth:640,saveToPhotoAlbum: false}, function(ret, err){ if (ret) {api.sendEvent({name:'sendMessage',extra: {targetId:targetId,objectName:'RC:ImgMsg',conversationType:'PRIVATE',message:ret.data}})}});}}//点击发送按钮if(ret.eventType == 'send' && ret.msg){//通过sendEvent将发送内容广博,消息页面接收并广播回来//单聊文字消息类型
            api.sendEvent({name:'sendMessage',extra: {targetId:targetId,objectName:'RC:TxtMsg',conversationType:'PRIVATE',message:ret.msg}})//alert('输入的内容是:'+ transText(ret.msg));
        }});
}

[技术分享] 融云开发案例核心代码分享相关推荐

  1. 融云开发案例核心代码分享

    该套代码为从项目案例中提取的,可以直接拿去使用,主要包含了单聊及消息的处理.主要分三个页面处理完成,入口首页(index).消息列表页(message).会话页面(chat) index.html 页 ...

  2. 人人悦--人人悦拼团系统开发部分核心代码分享

    人人悦拼团系统部分开发源码分享: //获取需要开奖的订单.$spell_order_model = StoreOrderSpell::where('goods_id',$data['id'])-> ...

  3. 技术突破 | 融云超级群的无限用户分发实践

    融云超级群,打破了以往群组服务模式下群聊成员的数量上限魔咒,为行业提供了第一个真正支持无限用户在线交流和获取信息的社交产品大杀器. 无限用户分发因群成员数量多.业务需求量大面临消息分发量激增.消息状态 ...

  4. D咚买菜抢购autojs核心代码分享

    D咚买菜抢购autojs核心代码分享 为了释放双手,实现自动点击,分享一段自己写的autojs抢菜代码(只是为了解放双手不能保证抢到,能不能抢到还要看运气) while(1){//进入购物车if(id ...

  5. 云与海计算机谱,天谕手游云与海乐谱_云与海乐谱代码分享_3DM手游

    在天谕手游中玩家可以把自己喜欢的歌写进乐谱,在这里小编给大家分享一下云与海这首歌的乐谱代码,喜欢的小伙伴不要错过哦,下面小编给大家带来<天谕手游>云与海乐谱代码分享,不清楚代码的小伙伴赶紧 ...

  6. 云与海计算机谱,天谕乐谱代码云与海-天谕手游云与海乐谱代码分享-沧浪手游...

    云与海是一首很好听的歌,很多小伙伴都想把云与海这一首歌写进自己的天谕乐谱.那么下面就让小编来个大家分享一下天谕云与海乐谱代码,感兴趣的小伙伴们快来看看吧. 天谕云与海乐谱代码分享 /* 2音轨开始 乐 ...

  7. 融云在WICC2021分论坛分享视频编码优化技术

    7月24日,以"新视界·连未来"为主题的2021全球互联网通信云大会(以下简称WICC 2021)在北京成功落下帷幕.来自主办方全球互联网通信云领导厂商融云的视频算法专家黄震坤在& ...

  8. 融云开发漫谈:你是否了解Go语言并发编程的第一要义?

    2007年诞生的Go语言,凭借其近C的执行性能和近解析型语言的开发效率,以及近乎完美的编译速度,席卷全球.Go语言相关书籍也如雨后春笋般涌现,前不久,一本名为<Go语言并发之道>的书籍被翻 ...

  9. 小程序获取用户手机号_借助云开发5行代码获取小程序用户的手机号

    最近有很多同学有获取小程序用户手机号的需求.其实云开发出现之前我们获取小程序用户的手机号特别繁琐.自从有了云开发,我们获取用户手机号变得非常简单.只需要5行代码即可. 老规矩,我们先来看下效果图 再来 ...

最新文章

  1. 人工智能产业展望:2018年三大难题如何破解?
  2. 理解Go 1.5 vendor
  3. 入门启发:音视频的简单理解
  4. 一句命令删除docker所有镜像或容器
  5. 预测今后的北京高考人数
  6. c++ byte转cbitmap_关于 C++ 打印 PDF 打印及 PDF 转图片、合并
  7. scala代码示例_Scala元组和地图示例
  8. ANDROID开发中注意不同手机CPU架构对SO文件的不同需求。
  9. 关于chrome不能设置小于12px字体的问题
  10. 字符串中第一个只出现一次的字符
  11. 传统蒙文字体_关于传统蒙古文网页的国际标准编码及字体处理技术
  12. 购物提醒(基于python的信息轰炸)
  13. 边缘计算相关论文汇总
  14. texture packer 处理图片空白的问题
  15. 软件项目管理第4版课后习题[附解析]第六章
  16. 从富文本(html字符串)中获取图片,js获取富文本中的第一张图片(正则表达式)
  17. 数据类型和存储上的差别,基本数据类型,引用数据类型
  18. 疫情信息管理系统(附源代码及数据库)
  19. HDU4751 -(广义孪生素数猜想)
  20. PHP 支付宝 “(单笔转账接口)转账到支付宝账号”

热门文章

  1. MySQL Replication主主复制—(实例)
  2. Linux命令总结(之二)Find
  3. vue学习(十五) 过滤器简单实用
  4. 浅谈Cisco ASA的基础
  5. LeetCode每日一题: 搜索插入位置(No.35)
  6. firewalld 极速上手指南
  7. T-SQL Enhancement in SQL Server 2005[下篇]
  8. Python(^^^^^小技巧^^^^^——不定期更新)
  9. MySQL(MariaDB)的 SSL 加密复制
  10. 2012.02.13(rtsp)