【开源】使用环信UIKit for uniapp 做一个IM即时聊天应用
环信单群聊 UIKit 是基于环信即时通讯云 IM SDK 开发的一款即时通讯 UI 组件库,提供各种组件实现会话列表、聊天界面、联系人列表及后续界面等功能,帮助开发者根据实际业务需求快速搭建包含 UI 界面的即时通讯应用。
本文教大家使用环信 uniapp UIKit 快速实现一个IM即时聊天应用
基本项目结构
└── ChatUIKit├── assets // UIKit 资源文件├── components // UIKit 通用组件├── const // UIKit 常量├── locales // UIKit 国际化├── modules // UIKit 页面组件│ ├── Chat // 聊天功能模块│ ├── ChatNew // 发起新会话模块│ ├── ContactAdd // 添加联系人模块│ ├── ContactList // 联系人列表模块 │ ├── ContactRequestList // 联系人好友请求列表模块│ ├── ContactSearchList // 联系人搜索列表模块│ ├── Conversation // 会话列表模块│ ├── ConversationSearchList // 会话搜索列表模块│ ├── GroupCreate // 创建群组模块│ ├── GroupList // 群组列表模块│ ├── VideoPreview // 视频消息预览模块├── store // UIKit store│ ├── appUser.ts // UIKit用户属性store│ ├── chat.ts // IM连接状态和事件处理│ ├── config.ts // UIKit Config│ ├── conn.ts // 管理 SDK 实例│ ├── contact.ts // 联系人相关 store│ ├── conversation.ts // 会话相关 store│ ├── group.ts // 群组相关 store│ ├── message.ts // 消息相关 store├── styles // UIKit 通用样式├── types // UIKit 类型定义├── utils // UIKit 通用工具函数├── configTypes.ts // UIKit 配置类型定义├── index.ts // UIKit 入口文件├── log.ts // UIKit 日志类├── sdk.ts // UIKit IM SDK 类型
功能介绍
单群聊 UIKit 中业务相关的 UI 组件在 ChatUIKit/modules 目录下
单群聊 UIKit 主要功能:


聊天页面
ChatUIKit/modules/Chat 提供所有聊天视图的容器。

快速实现一个IM即时聊天
支持平台(vue3)
- Android
- iOS
- 微信小程序
- H5
前提条件
开始前,请确保你的开发环境满足以下条件:
- HBuilderX 最新版
- Vue3
- sass:sass-loader 10.1.1 及之前版本
- node:12.13.0 - 17.0.0,推荐 LTS 版本 16.17.0
- npm:版本请与 Node.js 版本匹配
项目集成
1、创建 uni-app Vue3 项目,详情参考 uni-app 项目创建。
2、下载 UIKit 源码
源码地址:https://github.com/easemob/easemob-uikit-uniapp
UIKit 中依赖的静态资源(
ChatUIKit/assets)放置在环信服务器中,存在访问频率限制,建议你将静态资源放置在你的业务服务器上,然后修改ChatUIKit/const/index.ts文件中的ASSETS_URL为你的资源服务器地址。
# 克隆 UIKitgit clone https://github.com/easemob/easemob-uikit-uniapp.git# 在你的 uni-app 项目根目录下执行以下命令,拷贝组件文件mkdir -p ./ChatUIKit# macOSmv ${组件项目路径}/ChatUIKit/* ./ChatUIKit# windowsmove ${组件项目路径}/ChatUIKit/* .\ChatUIKit
3、添加依赖
环信即时通讯 IM Web SDK 4.10.0 及以上。
在项目根目录下执行以下命令,添加依赖:
npm init -y
npm i easemob-websdk@4.11.0 pinyin-pro@3.26.0 mobx@6.13.4 --save
4、引入 ChatUIKit 初始化并设置通用样式。
在你的项目的App.vue文件中引入 ChatUIKit 组件,并进行初始化。
要查看服务器域名配置,请点击这里 。
<script lang="ts">
import { ChatUIKit } from "./ChatUIKit";
import websdk from "easemob-websdk/uniApp/Easemob-chat";
import { EasemobChatStatic } from "easemob-websdk/Easemob-chat";// 创建 IM 实例
const chat = new (websdk as unknown as EasemobChatStatic).connection({appKey: '', // 应用的 App KeyisHttpDNS: false,url: '', // 环信 websocket URLapiUrl: '', // 环信 Restful API URLdelivery: true // 是否开启消息已送达回执
});// 初始化 ChatUIKit
ChatUIKit.init({chat, // 传入 IM 实例config: {theme: {// 头像形状:圆形(circle)和方形(square)avatarShape: "square"},isDebug: true // 是否开启调试模式}
});uni.$UIKit = ChatUIKit;// 登录环信即时通讯 IM
const login = () => {uni.$UIKit.chatStore.login({user: "", // 用户 IDaccessToken: "" // 用户 Token}).then(() => {// 登录成功后,跳转会话列表页面uni.navigateTo({url: '/ChatUIKit/modules/Conversation/index'})});
}
// 退出登录
const logout = () => {uni.$UIKit.chatStore.logout();
}
export default {onLaunch: function () {// 应用启动时,调用登录方法login();console.log("App Launch");},onShow: function () {console.log("App Show");// 在 onShow 中调用 ChatUIKit.onShow() 方法,主动监测 IM 连接状态ChatUIKit.onShow();},onHide: function () {console.log("App Hide");}
};
</script>
<style>
/* 通用样式 */
html,body,page {height: 100%;width: 100%;
}
</style>
5、配置路由。
在你项目的 pages.json 文件中更新 pages 路由:
{"pages": [{"path": "ChatUIKit/modules/Conversation/index","style": {"navigationStyle": "custom","app-plus": {"bounce": "none"}}},{"path": "ChatUIKit/modules/Chat/index","style": {"navigationStyle": "custom",// #ifdef MP-WEIXIN"disableScroll": true,// #endif "app-plus": {"bounce": "none","softinputNavBar": "none"}}},{"path": "ChatUIKit/modules/ChatNew/index","style": {"navigationStyle": "custom","app-plus": {"bounce": "none"}}},{"path": "ChatUIKit/modules/GroupList/index","style": {"navigationStyle": "custom","app-plus": {"bounce": "none"}}},{"path": "ChatUIKit/modules/ConversationSearchList/index","style": {"navigationStyle": "custom","app-plus": {"bounce": "none"}}},{"path": "ChatUIKit/modules/VideoPreview/index","style": {"navigationBarTitleText": "Video Preview","app-plus": {"bounce": "none"}}},{"path": "ChatUIKit/modules/ContactList/index","style": {"navigationStyle": "custom","app-plus": {"bounce": "none"}}},{"path": "ChatUIKit/modules/ContactAdd/index","style": {"navigationStyle": "custom","app-plus": {"bounce": "none"}}},{"path": "ChatUIKit/modules/ContactRequestList/index","style": {"navigationStyle": "custom","app-plus": {"bounce": "none"}}},{"path": "ChatUIKit/modules/ContactSearchList/index","style": {"navigationStyle": "custom","app-plus": {"bounce": "none"}}},{"path": "ChatUIKit/modules/GroupCreate/index","style": {"navigationStyle": "custom","app-plus": {"bounce": "none"}}}]
}
6、运行 Demo。
在 uni-app IDE 中,运行 Demo:

大功告成!~
参考文档:
-
想研究高阶特性请到官方文档
-
小程序域名配置
-
注册环信
相关文章:
【开源】使用环信UIKit for uniapp 做一个IM即时聊天应用
环信单群聊 UIKit 是基于环信即时通讯云 IM SDK 开发的一款即时通讯 UI 组件库,提供各种组件实现会话列表、聊天界面、联系人列表及后续界面等功能,帮助开发者根据实际业务需求快速搭建包含 UI 界面的即时通讯应用。 本文教大家使用环信 uniapp UIKit 快…...
计算机网络知识点全梳理(一.TCP/IP网络模型)
目录 TCP/IP网络模型概述 应用层 什么是应用层 应用层功能 应用层协议 传输层 什么是传输层 传输层功能 传输层协议 网络层 什么是网络层 网络层功能 网络层协议 数据链路层 什么是数据链路层 数据链路层功能 物理层 物理层的概念和功能 写在前面 本系列文…...
神州数码DCME-320 online_list.php存在任意文件读取漏洞
免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...
神经网络基础-神经网络搭建和参数计算
文章目录 1.构建神经网络2. 神经网络的优缺点 1.构建神经网络 在 pytorch 中定义深度神经网络其实就是层堆叠的过程,继承自nn.Module,实现两个方法: __init__方法中定义网络中的层结构,主要是全连接层,并进行初始化。…...
Linux入门攻坚——41、Linux集群系统入门-lvs(2)
lvs-dr:GATEWAY Director只负责请求报文,响应报文不经过Director,直接由RS返回给Client。 lvs-dr的报文路线如上图,基本思路就是报文不会回送Director,第①种情况是VIP、DIP、RIP位于同一个网段,这样&…...
音视频入门基础:MPEG2-TS专题(17)——FFmpeg源码中,解析TS program map section的实现
一、引言 由《音视频入门基础:MPEG2-TS专题(16)——PMT简介》可以知道,PMT表(Program map table)由一个或多个段(Transport stream program map section,简称TS program map sectio…...
了解https原理,对称加密/非对称加密原理,浏览器与服务器加密的进化过程,https做了些什么
最开始的加密 浏览器与服务器之间需要防止传输的数据被黑客破解。因此,浏览器在发送数据时会对数据进行加密,并把加密的密钥(或密钥的某些部分)放在数据的某一个区域中。服务器收到数据后,会提取密钥并用它来解密数据…...
山西省第十八届职业院校技能大赛高职组 5G 组网与运维赛项规程
山西省第十八届职业院校技能大赛高职组 5G 组网与运维赛项规程 一、赛项名称 赛项编号:GZ035 赛项名称:5G 组网与运维 赛项组别:高职学生组、教师组 二、竞赛目的 2019 年 6 月 6 日,5G 牌照正式发放,标志着我国全面进…...
tcpdump编译 wireshark远程抓包
https://github.com/westes/flex/releases/download/v2.6.4/flex-2.6.4.tar.gz tar -zxvf flex-2.6.4.tar.gz ./configure CFLAGS-D_GNU_SOURCE make sudo make installwget http://ftp.gnu.org/gnu/bison/bison-3.2.1.tar.gz ./configure make sudo make install以上两个库是…...
Web开发 -前端部分-CSS
CSS CSS(Cascading Style Sheet):层叠样式表,用于控制页面的样式(表现)。 一 基础知识 1 标题格式 标题格式一: 行内样式 <!DOCTYPE html> <html lang"en"><head><meta…...
用 Python Turtle 绘制流动星空:编程中的璀璨星河
用 Python Turtle 绘制流动星空:编程中的璀璨星河 🐸 前言 🐸🐞往期绘画>>点击进所有绘画🐞🐋 效果图 🐋🐉 代码 🐉 🐸 前言 🐸 夜空中繁星…...
Java从入门到工作2 - IDEA
2.1、项目启动 从git获取到项目代码后,用idea打开。 安装依赖完成Marven/JDK等配置检查数据库配置启动相关服务 安装依赖 如果个别依赖从私服下载不了,可以去maven官网下载补充。 如果run时提示程序包xx不存在,在项目目录右键Marven->Re…...
fastadmin批量压缩下载远程视频文件
后端代码 // 批量下载并压缩 public function downloadAll(){$ids input(ids);$row $this->model->where(id, in, $ids)->field(id,title,video_url)->select();if (!$row) {$this->error(记录不存在);}$arr [];$tempFiles []; // 用来存储临时下载的视频文…...
【保姆级】Mac如何安装+切换Java环境
本文从如何下载不同版本的JDK,到如何丝滑的切换JDK,以及常见坑坑的处理方法,应有尽有,各位看官走过路过不要错过~~~ 下载⏬ 首先上官网: https://www.oracle.com/ 打不开的话可以使用下面👇这个中文的 https://www.oracle.com/cn/java/technologies/downloads/a…...
2024首届世界酒中国菜国际地理标志产品美食文化节成功举办篇章
2024首届世界酒中国菜国际地理标志产品美食文化节成功举办,开启美食文化交流新篇章 近日,首届世界酒中国菜国际地理标志产品美食文化节在中国国际地理标志大厦成功举办,这场为期三天的美食文化盛会吸引了来自世界各地的美食爱好者、行业专家…...
Springboot静态资源
默认位置 静态资源访问目录下的资源可以直接访问,默认的四个位置 classpath:/META-INF/resources/(默认加载,不受自定义配置的影响) classpath:/resources/ classpath:/static/ classpath:/public/ 如果在静态目录下存在favic…...
MTK修改配置更改产品类型ro.build.characteristics
文章目录 需求场景实际问题 参考资料解决方案MTK 修改方案修改点一:build\core\product_config.mk修改点二:build\make\core\main.mk修改是否成功,adb 验证 实战项目中解决案例 需求场景 更改产品设备属性 table-phone-device,使…...
SQL 查询中的动态字段过滤
这段代码是一个 SQL 查询中的动态字段过滤部分,使用了 MyBatis 的 标签和 标签。以下是逐步的解释: <!-- 动态字段过滤 --><if test"parameters ! null and parameters.size() > 0"><foreach collection"parameters&qu…...
数字IC后端零基础入门基础理论(Day1)
数字IC后端设计导入需要用到的input数据如下图所示。 数字后端零基础入门系列 | Innovus零基础LAB学习Day9 Netlist: 设计的Gate level(门级)网表。下图所示为一个计数器设计综合后的门级netlist。 从这个netlist中我们看到这个设计顶层的名字叫counte…...
【LC】240. 搜索二维矩阵 II
题目描述: 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1: 输入:matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
