RONGIM-vue-web icon indicating copy to clipboard operation
RONGIM-vue-web copied to clipboard

使用vue的PC端接入融云即时聊天

刚开始接触这一块内容,发现vue接融云还是搜不到很具体的案例,靠自己一点点摸索花费了一些时间

终于完成了一些基本的功能就写了一个demo,希望能够帮助到一些人(虽然我也不确定会不会有人看到这个,哈哈哈) 对啦,我这边只写了一些概念的东西哦,因为这个群聊啊涉及到的APPkey和token都是官网提供的,结果不能用 我也不能用公司的那些信息吧,这边demo里的代码注释已经尽量写得很清楚,如果有问题可以发我邮箱[email protected]

index.js

 <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <title>rongyun-web</title>
    <script src="https://cdn.ronghub.com/RongIMLib-2.3.3.min.js"></script>
    <script src="https://cdn.ronghub.com/RongEmoji-2.2.7.min.js"></script>
  </head>

一定要在头部引入SDK,第二个是表情包

融云初始化

建议在公共方法里加入这个方法,可以多次调用

  RONGIMBreak() {  // 融云断开连接
    RongIMClient.getInstance().disconnect();
  },
   RongIMInit() { // 融云初始化
      RongIMClient.init(Appkey);
      var token = JSON.parse(gaijinCounselor).token.data;
      RongIMClient.connect(token, {
        onSuccess: function(userId) {
          console.log("Login successfully."+ userId);
          //userId是申请token时的填写的id,到时候可以封装在下面的extra中传过去
        },
        onTokenIncorrect: function() {
          console.log('token无效');
        },
        onError:function(errorCode){
          var info = '';
          switch (errorCode) {
            case RongIMLib.ErrorCode.TIMEOUT:
              info = '超时';
              break;
            case RongIMLib.ErrorCode.UNKNOWN_ERROR:
              info = '未知错误';
              break;
            case RongIMLib.ErrorCode.UNACCEPTABLE_PaROTOCOL_VERSION:
              info = '不可接受的协议版本';
              break;
            case RongIMLib.ErrorCode.IDENTIFIER_REJECTED:
              info = 'appkey不正确';
              break;
            case RongIMLib.ErrorCode.SERVER_UNAVAILABLE:
              info = '服务器不可用';
              break;
          }
          console.log(errorCode);
        }
      });
      // 连接状态监听器
      RongIMClient.setConnectionStatusListener({
        onChanged: function (status) {
          switch (status) {
            //链接成功
            case RongIMLib.ConnectionStatus.CONNECTED:
              console.log('连接成功');
              break;
            //正在链接
            case RongIMLib.ConnectionStatus.CONNECTING:
              console.log('正在连接');
              break;
            //重新链接
            case RongIMLib.ConnectionStatus.DISCONNECTED:
              console.log('断开连接');
              break;
            //其他设备登陆
            case RongIMLib.ConnectionStatus.KICKED_OFFLINE_BY_OTHER_CLIENT:
              console.log('其他设备登陆');
              alert('该用户在其它浏览器登录,聊天功能暂不可用');
              break;
            //网络不可用
            case RongIMLib.ConnectionStatus.NETWORK_UNAVAILABLE:
              console.log('网络不可用');
              break;
          }
        }
      });
      // 消息监听器
      RongIMClient.setOnReceiveMessageListener({
        // 接收到的消息
        onReceived: function (message) {
          //message接受到的消息(包含发送的信息,也可以在extra中添加要传递的值,如:时间等)

          // 自定义消息
          // do something...
        }

      });
      var config = {
        size: 24, // 大小, 默认 24, 建议18 - 58
        url: "//f2e.cn.ronghub.com/sdk/emoji-48.png", // Emoji 背景图片
        lang: "zh", // Emoji 对应名称语言, 默认 zh
        // 扩展表情
        extension: {
          dataSource: {
            u1F914: {
              en: "thinking face", // 英文名称
              zh: "思考", // 中文名称
              tag: "🤔", // 原生 Emoji
              position: "0 0" // 所在背景图位置坐标
            }
          },
          // 新增 Emoji 背景图 url
          url: "//cdn.ronghub.com/thinking-face.png"
        }
      };
      RongIMLib.RongIMEmoji.init(config);  // 表情初始化
    },

初始化完成了以后才可以进行比如获取历史消息,发送等操作,一定要确保这个执行顺序,不然会报错的

我能想的到的一些注意点

  • web端的聊天界面需要自己绘制的,没有现成的!
  • 消息都需要处理过,写几个公共方法来处理消息格式
  • 群成员信息(昵称,头像等)不会在消息里,通过后台拿了以后,在处理消息的时候判断这个消息是谁发的,然后把成员信息给加进去
  • 图片,文件,语音啊这些资源,都需要上传到服务器生成链接,然后才能通过融云发送,图片要压缩哦,不然最多100k根本不够用(不会的可以下载代码看一下,我有写在项目里)
  • 页面刷新就需要重新链接,注意执行顺序
  • 我用了vuex,因为当监听到你所在的聊天有消息进入时,页面需要及时做出反应。
  • 消息要滚动到底部这个功能也要自己写哦
  • 项目克隆下来看里面代码,直接跑不出来的,因为欠缺了AppKey和UserId