• 融云项目案例开发教程


    先来理下思路,对比前面的几个教程,我们时这样实现的,在消息列表页我们连接一次融云,打开会话页面后又加载了一次融云,这样打开会话页面后就会导致消息列表页的监听事件取消,同时还会存在一些位置的bug,导致了开发难度。
    我们这次改变下思路,把所有的融云类的处理全部放在消息列表页,然后通过APICloud的api.sendEvent和api.addEventListener 来处理融云的一些事件。
    记住除了消息列表页其他页面不要做融云的任何链接处理。

    消息列表页实现代码

    <script>
    /*rong全局*/
    var rong;
    /*获取会话消息列表*/
    function coversationList(){
        //消息列表
        rong.getConversationList(function (ret, err) {
            if(ret.status=='success'){
                alert(JSON.stringify(ret.result));
            }
        })
    }
    
    /*
    *监听新消息
    *当有新消息传来时,利用sendEvent发出一个事件,同时传递消息内容,可以在会话页面进行一次监听接收
    */
    function receiveMessageListener(){
        rong.setOnReceiveMessageListener(function (ret, err) {
            if(ret.status=="success"){
                //发送事件
                api.sendEvent({
                    name:'getNewMessage',
                    extra:{
                        data:ret.result.message
                    }
                })
                
                
            }
        })
    }
    
    /*
    *发送消息的函数
    *注意要放在消息列表页,不要放在会话页面
    *在会话页面利用sendEvent发出一个发送消息的事件,在消息列表页监听
    */
    function sendMessage(type,targetId,content,extra,conversationType){
        rong.sendTextMessage({
                conversationType: ''+conversationType+'',
                targetId: ''+targetId+'',
                text: ''+content+'',
                extra: ''+extra+''
            }, function (ret, err) {
                if (ret.status == 'prepare'){
                    //单聊准备发送,向会话页面发送正在发送消息事件
                    api.sendEvent({
                        name:'insertSendMessage',
                        extra:{
                            data:messageData
                        }
                    })
                    
                }else if (ret.status == 'success'){
                    //成功后处理
                    
                }else if (ret.status == 'error'){
                    //失败
                }
            }
        );
    }
    /*
    *融云的初始化
    */
    function rongCloud(){
        var token = $api.getStorage('token');
        //融云初始化
        rong.init(function(ret, err){
        });
        //监听新消息
        receiveMessageListener();
        //连接
        rong.connect({
            token: ''+token+''
        },function(ret, err){
            if(ret.status=='success'){
                //消息列表
                coversationList();
            }
        });
    }
    apiready = function(){
        rong = api.require('rongCloud');
        rongCloud();
        //监听来自会话页面发送消息的事件
        api.addEventListener({
            name:'sendMessage'
        },function(ret){
            if(ret && ret.value){
                var value = ret.value;
                sendMessage(''+value.type+'',''+value.targetId+'',''+value.content+'',''+value.extra+'',''+value.conversationType+'');
            }
        })
    };
    </script>

    会话页面的实现

    <script>
    var targetId,historyMessages;
    //发送聊天
    function chat(){
        //向会话列表页发送消息事件
        api.sendEvent({
            name:'sendMessage',
            extra:{
                type:'text',
                targetId:''+targetId+'',
                content:'消息内容',
                conversationType:'PRIVATE',
                extra:''
            }
        })
    }
    apiready = function(){
        //当前会话用户id和当前会话历史消息从消息列表页点击传递进来
        targetId = api.pageParam.targetId;
        historyMessages = api.pageParam.historyMessages;
    
        //监听发送新消息写入,这个事件主要来处理发送消息插入到会话窗口中
        api.addEventListener({
            name:'insertSendMessage'
        },function(ret){
            if(ret && ret.value){
                var newMessageData = ret.value;
                //
            }
        })
    
        //监听收到新消息写入
        api.addEventListener({
            name:'getNewMessage'
        },function(ret){
            if(ret && ret.value){
                //监听成功
                var newMessageData = ret.value;
                alert(JSON.stringify(newMessageData));
                //根据targetId和当前会话用户id判断一下,如果相等则写入
            }
        })
    
        
    };
    </script>
  • 相关阅读:
    float浮点型底层存储原理
    PermissionError: WinError
    django数据库设置sql_mode
    Git 之 git diff
    以太网数据格式与封装解封
    MYSQL进阶
    MYSQL基础
    Python连接MySQL数据库之pymysql模块使用
    Python装饰器进阶
    BootStrap框架
  • 原文地址:https://www.cnblogs.com/haonanZhang/p/6733662.html
Copyright © 2020-2023  润新知