zoukankan      html  css  js  c++  java
  • vue-cli3.0 Typescript 项目集成环信WebIM 群组聊天

    项目背景

    环信webim 官方没有vue版本的,自己就根据sdk重写了个vue版本的,只实现了基础的 登录 群组功能,其他的可以根据需要参考官方文档,添加相应的功能。

    环信webim SDK相关文档:
    http://docs-im.easemob.com/im/web/intro/start

    先使用vue-cli新建一个typescript项目

    集成webim

    安装环信sdk和strophe.js 这两个是必须的

    cnpm install easemob-websdk --save
    cnpm install strophe.js --save
    cnpm install crypto-js --save
    cnpm install underscore --save

    • 打开node_modules/easemob-websdk/src/connection.js

    添加组件
    在components中添加 WebIM.ts

    // 引入Strophe方法
    var Strophejs = require('strophe.js');
    var Strophe = (Strophejs as any).Strophe;
    
    // 给Strophe.Connection 添加方法
    Strophe.Connection.prototype.setJid = (jid: any) => {
        Strophe.Connection.jid = jid;
        Strophe.Connection.authzid = Strophe.getBareJidFromJid(Strophe.Connection.jid);
        Strophe.Connection.authcid = Strophe.getNodeFromJid(Strophe.Connection.jid);
    }
    
    Strophe.Connection.prototype.getJid = () => {
        return Strophe.Connection.jid;
    }
    
    (window as any).Strophe = Strophe;
    
    var WebIM = require('easemob-websdk') as any;
    
    //配置文件参考环信demo
    var config = {
        xmppURL: 'im-api.easemob.com',
        apiURL: (location.protocol === 'https:' ? 'https:' : 'http:') + '//a1.easemob.com',
        appkey: 'easemob-demo#chatdemoui',
        https: false,
        isMultiLoginSessions: true,
        isAutoLogin: true,
        isWindowSDK: false,
        isSandBox: false,
        isDebug: false,
        autoReconnectNumMax: 2,
        autoReconnectInterval: 2,
        // isWebRTC: (/Firefox/.test(navigator.userAgent) || /WebKit/.test(navigator.userAgent)) && /^https:$/.test(window.location.protocol),
        heartBeatWait: 4500,
        isHttpDNS: false,
        msgStatus: true,
        delivery: true,
        read: true,
        saveLocal: false,
        encrypt: {
            type: 'none'
        }
    }
    
    //初始化配置
    WebIM.config = config
    
    var conn: any = () => {
        return new WebIM.connection({
            isMultiLoginSessions: WebIM.config.isMultiLoginSessions,
            https: typeof WebIM.config.https === 'boolean' ? WebIM.config.https : location.protocol === 'https:',
            url: WebIM.config.xmppURL,
            isAutoLogin: true,
            heartBeatWait: WebIM.config.heartBeatWait,
            autoReconnectNumMax: WebIM.config.autoReconnectNumMax,
            autoReconnectInterval: WebIM.config.autoReconnectInterval,
            apiUrl: WebIM.config.apiURL
        });
    }
    
    export interface CurrentUserInfo {
        access_token: string,
        expires_in: number,
        user: {
            activated: string,
            nickname: string,
            type: string,
            username: string,
            uuid: string
        }
    }
    
    export default {
        conn,
        WebIM
    };
    

    运行效果

    git仓库地址:
    https://github.com/sandsli/huanxin-vue

  • 相关阅读:
    jquery如何获取url中问号后面的数值
    CSS3 @font-face
    如何在代码中应用设计模式
    面试中可能被问到的常用排序算法
    《深入java虚拟机》读书笔记之垃圾收集器与内存分配策略
    《深入java虚拟机》读书笔记之Java内存区域
    Spring系列之手写一个SpringMVC
    Java多线程之Executor框架和手写简易的线程池
    Spring系列之手写注解与配置文件的解析
    Spring系列之AOP的原理及手动实现
  • 原文地址:https://www.cnblogs.com/sands/p/11284605.html
Copyright © 2011-2022 走看看