easemob-chat-uikit v1.4.0
Easemob UIKit for React
本文将介绍环信新单群聊 UIKit。新单群聊 UIKit 致力于为开发者提供高效集成、即插即用、高自由度定制化的 UI 组件库,助力构建功能全面、设计美观的 IM 应用,轻松满足即时通信绝大多数场景。请下载示例进行体验。
📌 目录
📖 简介
Easemob UIKit for WEB 是集开发工具包与用户界面于一体的开发利器,全面的即插即用的 UI 组件将助力您轻松快速地将标准聊天功能集成到新旧客户端应用中。从会话列表到消息体等核心功能,从整体主题到颜色字体等细节样式,组件均可完全定制,打造契合您品牌标识的独特应用内聊天体验。
特别注意:UIKit 支持单聊、群聊、客服、问诊、AI 陪聊等绝大多数聊天场景。
⚙️ 技术原理
UIKIt 由三部分组成:UI 组件,管理数据的 mobx store, chat SDK。UI 组件包含容器组件 container 复合组件 module, 以及纯 UI 组件 components, 这些不同级别的组件全部对外暴露,用户可以引用任意组件构建自己的应用。UIkit 使用 mobx 管理全局数据,用户可以引用 rootStore 来获得全部数据和 action 方法,可以用 action 方法来操作数据。 UIKit 内部集成了 chat SDK,通过 chat SDK 和服务器交互。
✨ 功能
easemob-chat-uikit
库提供以下功能:
- 聊天界面,支持各种类型消息,和对消息的操作,音视频通话;
- 会话列表,支持搜索、删除、指定、免打扰;
- 通讯录,按首字母排序;
- 群组管理,支持修改群信息,添加删除群成员;
- 自动布局,适配容器的宽高;
定制化 UI。
支持的消息类型: 文本、表情、语音、图片、视频、文件、名片、合并消息。
- 消息支持的操作:回复、删除、撤回、翻译、编辑、多选、转发、举报、固定。
🧩 组件
easemob-chat-uikit
目前提供容器组件、模块组件、纯 UI 组件三个级别的组件,组件详情可以查看故事书
🖥 运行示例 App
- 安装依赖
npm install
- 运行项目
npm run dev
- 选择 demo 目录下的示例 demo 打开,如:http://localhost:5173/demo/module/chat/index.html
🔨 快速开始
前提条件
开启 Easemob Chat 服务前,请确保已经具备以下要素:
- React 16.8.0 或以上版本;
- React DOM 16.8.0 或以上版本;
- Easemob Chat 项目和 App Key。
支持的浏览器
浏览器 | 支持的版本 |
---|---|
IE 浏览器 | 11 或以上 |
Edge | 43 或以上 |
Firefox | 10 或以上 |
Chrome | 54 或以上 |
Safari | 11 或以上 |
UIKit 中用到的服务
- 会话列表
- 漫游消息
- 单向删除漫游消息
- 用户属性
- 翻译
- 举报
- 黑名单
- 用户在线状态
- 消息置顶
- 会话置顶
- 消息撤回
- 消息表情回复
- 子区
如果用到这些功能,请确保相关服务是开通的。
使用步骤
1.创建 chat-uikit 项目
# 安装 CLI 工具。
npm install create-react-app
# 构建一个 my-app 的项目。
npx create-react-app my-app
cd my-app
项目目录:
├── package.json
├── public # Webpack 的静态目录。
│ ├── favicon.ico
│ ├── index.html # 默认的单页面应用。
│ └── manifest.json
├── src
│ ├── App.css # App 根组件的 CSS。
│ ├── App.js # App 组件代码。
│ ├── App.test.js
│ ├── index.css # 启动文件样式。
│ ├── index.js # 启动文件。
│ ├── logo.svg
│ └── serviceWorker.js
└── yarn.lock
2.集成 easemob-chat-uikit
安装 easemob-chat-uikit
- 通过 npm 安装,运行以下命令:
npm install easemob-chat-uikit --save
- 通过 yarn 安装,运行以下命令:
yarn add easemob-chat-uikit
使用 easemob-chat-uikit 组件构建应用
将 easemob-chat-uikit 库导入你的代码中:
// App.js
import React, { Component, useEffect } from 'react';
import { Provider, Chat, ConversationList, useClient, rootStore } from 'easemob-chat-uikit';
import 'easemob-chat-uikit/style.css';
const ChatApp = () => {
const client = useClient();
useEffect(() => {
client &&
client
.open({
user: '',
token: '',
})
.then(res => {
console.log('get token success', res);
// create a conversation
rootStore.conversationStore.addConversation({
chatType: '', // 'singleChat' || 'groupChat'
conversationId: '', // target user id or group id
name: '', // target user nickname or group name
});
});
}, [client]);
return (
<div>
<div>
<ConversationList />
</div>
<div>
<Chat />
</div>
</div>
);
};
class App extends Component {
render() {
return (
<Provider
initConfig={{
appKey: 'your app key',
}}
>
<ChatApp />
</Provider>
);
}
}
export default App;
运行项目并发送你的第一条消息
npm run start
在浏览器可看到你的应用。
在默认 App Key 情况下,为方便快速体验,我们默认支持几种类型的消息下发。点击选中一个成员后,输入你的第一条消息并发送。
注意 使用自定义 App Key 时,由于没有联系人,需先添加好友
🌈 进阶指南
修改组件样式
可以通过组件 props 传递 className, style, prefix 修改样式
import { Chat, Button } from 'easemob-chat-uikit';
const ChatApp = () => {
return (
<div>
<Chat className="customClass" prefix="custom" />
<Button style={{ width: '100px' }}>Button</Button>
</div>
);
};
使用自定义组件
可以通过容器组件的 renderX 方法来渲染自定义组件
import {Chat, Header} from 'easemob-chat-uikit'
const ChatApp = () => {
const CustomHeader = <Header back content="Custom Header">
return(
<div>
<Chat renderHeader={(cvs) => CustomHeader}>
</div>
)
}
修改主题
- UIKit 提供了一些全局主题配置项:
theme: {
primaryColor?: string | number; // 16进制颜色值,或者Hue值
mode?: 'light' | 'dark'; // 明暗主题
avatarShape?: 'circle' | 'square'; // 头像圆形还是方形
bubbleShape?: 'ground' | 'square'; // 消息气泡大圆角还是小圆角
componentsShape?: 'ground' | 'square'; // 搜索,输入框,按钮组件 大圆角还是小圆角
};
使用示例
<UIKitProvider
theme={{
primaryColor: 203,
mode: 'light',
}}
>
{/** ... */}
</UIKitProvider>
- UIKit 样式使用 scss 框架开发,定义了一系列全局样式变量,包括但不限于全局样式(主色、背景色、圆角、边框、字体大小)。
// need to use hsla
$blue-base: hsla(203, 100%, 60%, 1);
$green-base: hsla(155, 100%, 60%, 1);
$red-base: hsla(350, 100%, 60%, 1);
$gray-base: hsla(203, 8%, 60%, 1);
$special-base: hsla(220, 36%, 60%, 1);
$font-color: $gray-3;
$title-color: $gray-1;
$component-background: #fff;
$height-base: 36px;
$height-lg: 48px;
$height-sm: 28px;
// vertical margins
$margin-lg: 24px;
$margin-md: 16px;
$margin-sm: 12px;
$margin-xs: 8px;
$margin-xss: 4px;
// vertical paddings
$padding-lg: 24px;
$padding-md: 20px;
$padding-sm: 16px;
$padding-s: 12px;
$padding-xs: 8px;
$padding-xss: 4px;
// font
$font-size-base: 14px;
$font-size-lg: $font-size-base + 2px;
$font-size-sm: 12px;
$text-color: fade($black, 85%);
使用 webpack 进行变量覆盖:
module.exports = {
module: {
rules: [
{
test: /\.s[ac]ss$/i,
use: [
'style-loader',
'css-loader',
{
loader: 'sass-loader',
options: {
additionalData: `@import "@/styles/index.scss";`,
},
},
],
},
],
},
};
如果这些不能满足定制化要求,还可以检查元素来覆盖 UIKit 的样式。
🏠 项目结构
easemob-uikit-web
├── build // 打包后的产物
├── common // 公共样式
├── component // 纯UI组件
├── demo // 示例demo
├── docs // 文档
├── eventHandler // 时间监听器
├── local // 国际化文案
└── module // 容器和模块组件
├── baseMessage // 消息基础组件,其他类型的消息组件都是在这个组件上宽展
├── chat // Chat 组件,包含整个聊天页面
├── contactList // 联系人组件
├── conversation // 会话列表组件
├── store // 全局状态
└── utils // 工具方法
👥 社区贡献者
如果你认为可将一些功能添加到 UIKit 中让更多用户受益,请随时 Fork 存储库并添加拉取请求。如果你在使用上有任何问题,也请在存储库上提交。感谢你的贡献!
🔗 参考文档
📁 相关资源
集成文档;
📄 代码许可
示例项目遵守 MIT 许可证。
8 months ago
9 months ago
11 months ago
11 months ago
12 months ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago