本文介绍如何创建一个 IMCloud Web 项目,实现即时通讯功能。你也可以通过阅读代码,了解即时通讯的最佳实践。
React 16.10.2+
Node.js(推荐使用 LTS 版本)
npm
TypeScript
npx create-react-app my-chat-app --template typescript
cd my-chat-app
npm install @volcengine/im-web-sdk @volcengine/im-uikit-react
将以下代码复制到 App.tsx 中,并修改 APP_ID 为您在控制台申请的 App 对应的 AppID,修改 getToken 为调用您业务后端接口获取的 token。
import { useEffect, useRef, useState } from "react"; import { UIKit } from "@volcengine/im-uikit-react"; import { BytedIM, im_proto, MultimediaPlugin } from "@volcengine/im-web-sdk"; import "@volcengine/im-uikit-react/dist/es/index.css"; let APP_ID = xxxxxx; // TODO: 修改为 App 对应的 AppID // 需要修改为对应的业务后端接口调用 const getToken = async ({appId, userId}: { appId: number; userId: string; }) => { // TODO: 调用对应的业务后端接口,获取对应用户的 token return token; }; export default function App() { const initCalled = useRef(false); const [im, setIm] = useState<BytedIM>(); useEffect(() => { if (initCalled.current) return; initCalled.current = true; const userId = prompt('输入登录用户 ID', '10001') || '10001'; const bytedIm = new BytedIM( { userId: userId, deviceId: userId, apiUrl: "https://imapi.volcvideo.com", frontierUrl: "wss://frontier-sinf.ivolces.com/ws/v2", authType: im_proto.AuthType.TOKEN_AUTH, appId: APP_ID, token: () => getToken({ appId: APP_ID, userId: userId, }), }, [MultimediaPlugin] ); bytedIm.init(); setIm(bytedIm); }, []); return ( <div className="container-box" style={{height: '100vh', width: '100vw'}}> <UIKit im={im}/> </div> ); };
在 v1.9.0 及之后版本,IM SDK 同时支持海外服务,你可以将 apiUrl
和 frontierUrl
配置为海外域名,示例代码如下。
说明
目前海外版本暂不支持收发语音消息和视频消息,调用发送会返回上传失败错误。
new BytedIM({ apiUrl: 'https://imapi.bytepluses.com', frontierUrl: 'wss://frontier-myatob.byteoversea.com/ws/v2', /* 省略其他配置 */ })
IM SDK 提供了日志记录和性能分析功能,以帮助用户分析线上问题,默认开启。为了更好地排查问题,SDK 会上报部分客户端数据到火山国内的监控服务,如评估后有风险,可在创建实例时设置关闭日志。
new BytedIM({ disableAppLog: true, // 禁用 IM 应用日志(用于分析 IM 性能) disableApmLog: true // 禁用火山 APM 日志(用于分析错误等运行时信息) /* 省略其他配置 */ })
npm run start
启动后在浏览器中开启页面,输入想登录的用户 ID(下面以 1001 为例)。
在左上角输入框中输入另一位用户的 ID,点击发起后即可发起会话(下面以 1002 为例)。
)