该套代码为从项目案例中提取的,可以直接拿去使用,主要包含了单聊及消息的处理。主要分三个页面处理完成,入口首页(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();}}});//监听会话列表事件 getConversationListapi.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,消息类型,最后一条idapi.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));}});
}

转载于:https://www.cnblogs.com/haonanZhang/p/6733699.html

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

  1. [技术分享] 融云开发案例核心代码分享

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. java融云即时通开发流程,基于融云开发的 Android 版即时通讯(IM)应用程序

    SealTalk-Android Android 应用 SealTalk 由 融云 RongCloud 出品. 特别注意 SealTalk 自从 1.3.14 版本起,CallLib 模块引用的音视频 ...

  9. 小程序短信验证码登录,1分钟实现小程序发短信功能,借助云开发10行代码实现短信验证码登录小程序

    老规矩先看效果图 普通短信 验证码短信 今天被云开发官方告知,云开发支持发短信功能了,然后就迫不及待的来尝下鲜. 进入官方文档一看,云开发给咱们开发者的福利还真不小. 不仅仅可以很方便的使用短信功能, ...

最新文章

  1. 位宽512bit显卡_显卡知识:关于显卡位宽的基础知识科普
  2. mysql半复制_mysql半同步复制
  3. 银行业务软件测试,银行业务软件系统测试研究
  4. 用shiro框架实现注册登陆,让你快速理解shiro用法
  5. JDK1.8简单配置环境变量---两步曲
  6. 在CentOS7上安装和使用ZooKeeper最新版本(V3.4.12)
  7. [论文评析] ICLR,2021,An image is worth 16x16 words-transformers for image recognition at scale
  8. 两款开发辅助工具介绍
  9. 交互式电子杂志_电子杂志形式与交互问题分析
  10. c语言调用DOS命令删除文件,DOS删除命令怎么使用?用DOS命令删除文件的方法
  11. Web前端常用IDE快捷键记忆(WebSorm、VSCode)
  12. Python实现异方差检验(statsmodels)
  13. 鱼塘钓鱼 (贪心+枚举)
  14. string的取值范围
  15. oracle 查询时间段内的天,ORACLE任意时间段内所有天数日期查询
  16. 分享一套永久免费的ChatGPT使用方法
  17. 深度分析网络游戏运营手段
  18. 宽度优先搜索与深度优先搜索
  19. 社交APP软件开发上线
  20. JQuery OrgChart

热门文章

  1. erp系统是什么东西
  2. 你会快速裂变顾客吗?
  3. 新零售时代,美妆行业如何打造新主场?
  4. 赚钱的逻辑和赚钱的道具要发生改变
  5. 为什么说社区团购进行得如火如荼?
  6. 越成功的人越能直面人性的欲望
  7. 农业不一定靠规模赚钱
  8. 面向对象编程(Object-Oriented Programming)
  9. PP-YOLO是最先进的吗?
  10. Qt——P14 Lambda表达式