Skip to content

Commit 6f4fe0e

Browse files
authored
Merge pull request #1071 from haoxiuwen/doc-v2
Add Web CallKit Doc
2 parents e9e2ee0 + 299c82d commit 6f4fe0e

File tree

4 files changed

+224
-0
lines changed

4 files changed

+224
-0
lines changed
45.5 KB
Loading
45.7 KB
Loading

docs/.vuepress/sidebar/document.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ const documentSidebar = [
159159
{ text: '错误码', link: 'error.html' },
160160
//{ text: 'EaseIMKit 使用指南', link: 'easeimkit.html', except: ['web', 'windows', 'react-native', 'flutter', 'unity'] },
161161
{ text: 'EaseCallKit 使用指南', link: 'easecallkit.html', except: ['web', 'windows', 'react-native', 'flutter', 'unity', 'harmonyos'] },
162+
{ text: 'CallKit 使用指南', link: 'easecallkit.html', only: ['web'] },
162163
{ text: '苹果隐私策略', link: 'privacy_policy.html', only: ['ios'] },
163164
],
164165
except: ['applet', 'server-side','electron','linux']

docs/document/web/easecallkit.md

Lines changed: 223 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,223 @@
1+
# CallKit 使用指南
2+
3+
`CallKit` 是一套基于环信 IM 和声网音视频结合开发的音视频 UI 库,实现了一对一语音和视频通话以及多人音视频通话的功能。通过同一用户 ID 登录多台设备的场景下,当用户处理一台设备上的来电响铃后,其他所有设备都会同时停止响铃。
4+
5+
## 技术原理
6+
7+
使用 `CallKit` 实现实时音视频通讯的基本流程如下:
8+
9+
1. 调用 `init``CallKit` 进行初始化。
10+
2. 主叫方调用 `startCall` 发起通话邀请,进行一对一或多人通话。
11+
3. 被叫方收到 `onInvite` 后,选择接受或拒绝通话邀请。若接受邀请,则进入通话。
12+
4. 通话结束时,SDK 触发 `onStateChange` 回调。
13+
14+
## 前提条件
15+
16+
集成该库之前,你需要满足以下条件:
17+
18+
- 创建 [环信应用](/product/enable_and_configure_IM.html)[声网应用](https://doc.shengwang.cn/doc/rtc/javascript/get-started/enable-service#创建声网项目)
19+
- 实现环信 IM 的基本功能,包括登录、好友、群组以及会话等的集成;
20+
- 上线前开通声网 Token 验证时,用户需要实现自己的 [App Server](https://github.com/easemob/easemob-im-app-server/tree/master/agora-app-server),用于生成 Token。详见[创建 Token 服务及使用 App Server 生成 Token](https://doc.shengwang.cn/doc/rtc/javascript/basic-features/token-authentication)
21+
22+
## 项目设置
23+
24+
1. 在终端上运行以下命令安装 `CallKit`
25+
26+
```
27+
npm install chat-callkit
28+
```
29+
30+
2. 导入 `CallKit`
31+
32+
```
33+
import Callkit from 'chat-callkit';
34+
```
35+
36+
## 实现音频和视频通话
37+
38+
本节介绍如何在你的项目中实现音频和视频通话。
39+
40+
### 初始化 `CallKit`
41+
42+
调用 `init` 初始化 `CallKit`
43+
44+
```javascript
45+
/**
46+
* 初始化 CallKit
47+
*
48+
* @param appId 声网 App ID。
49+
* @param agoraUid 声网用户 ID(UID)。
50+
* @param connection IM SDK 连接实例。
51+
*/
52+
CallKit.init(appId, agoraUid, connection);
53+
```
54+
55+
### 发送通话邀请
56+
57+
主叫方调用 `startCall` 发送一对一或多人通话邀请。调用该方法时,需要指定通话类型。
58+
59+
- 一对一通话
60+
61+
一对一通话时,主叫方向被叫方发送短信作为通话邀请。
62+
63+
```javascript
64+
let options = {
65+
/** 通话类型:
66+
* 0:一对一音频通话
67+
* 1:一对一视频通话
68+
* 2:多人视频通话
69+
* 3:多人音频通话
70+
*/
71+
callType: 0,
72+
chatType: "singleChat",
73+
/** IM 用户 ID */
74+
to: "userId",
75+
/** 通话邀请消息 */
76+
message: "Join me on the call",
77+
/** 通话频道名称 */
78+
channel: "channel",
79+
/** 声网 token <Vg k="VSDK" /> */
80+
accessToken: "Agora token",
81+
};
82+
CallKit.startCall(options);
83+
```
84+
85+
- 多人通话
86+
87+
在多人通话中,主叫方向群组或聊天室发送文本消息,同时向用户发送命令消息加入通话。
88+
89+
```javascript
90+
let options = {
91+
/** 通话类型:
92+
* 0:一对一音频通话
93+
* 1:一对一视频通话
94+
* 2:多人视频通话
95+
* 3:多人音频通话
96+
*/
97+
callType: 2,
98+
chatType: "groupChat",
99+
/** IM 用户 ID */
100+
to: ["userId"],
101+
/** 通话邀请消息 */
102+
message: "Join me on the call",
103+
/** 群组 ID */
104+
groupId: "groupId",
105+
/** 群组名称 */
106+
groupName: "group name",
107+
/** 声网 token <Vg k="VSDK" />*/
108+
accessToken: "Agora token",
109+
/** 通话频道名称 */
110+
channel: "channel",
111+
};
112+
CallKit.startCall(options);
113+
```
114+
115+
下图为发送一对一视频通话邀请后的用户界面示例:
116+
117+
![img](/images/web/callkit_single_invite.png)
118+
119+
### 收到通话邀请
120+
121+
通话邀请发送后,如果被叫方在线且可以通话,将通过 `onInvite` 回调收到邀请。你可以弹出一个用户界面,让被叫方在该回调中接受或拒绝邀请。
122+
123+
```javascript
124+
/**
125+
* 处理通话邀请。
126+
*
127+
* @param result 是否弹出用户界面,接听来电:
128+
* - true:是。
129+
* - false:否。这种情况下,你无需传入 token <Vg k="VSDK" />。
130+
* @param accessToken 声网 token <Vg k="VSDK" />。
131+
*/
132+
CallKit.answerCall(result, accessToken);
133+
```
134+
135+
下图为收到一对一视频通话邀请后的用户界面示例:
136+
137+
![img](/images/web/callkit_single_receive.png)
138+
139+
### 多人通话中间发起邀请
140+
141+
在多人通话中,多个用户还可以向其他用户发送通话邀请。发送邀请后,SDK 会在发送方的客户端触发 `onAddPerson` 回调。在该回调中,你可以让发送方指定想要邀请加入多人通话的用户,然后调用 `startCall` 发出邀请。
142+
143+
### 监听回调事件
144+
145+
在通话中,你还可以监听以下回调事件:
146+
147+
```javascript
148+
function Call() {
149+
// 处理会话状态变更。
150+
const handleCallStateChange = (info) => {
151+
switch (info.type) {
152+
case "hangup":
153+
// 挂断电话。
154+
break;
155+
case "accept":
156+
// 被叫方接受通话邀请。
157+
break;
158+
case "refuse":
159+
// 被叫方拒绝通话邀请。
160+
break;
161+
case "user-published":
162+
// 远端用户在通话中发布媒体流。
163+
break;
164+
case "user-unpublished":
165+
// 远端用户在通话中停止发布媒体流。
166+
break;
167+
case "user-left":
168+
// 远端用户离开通话。
169+
break;
170+
default:
171+
break;
172+
}
173+
};
174+
return <Callkit onStateChange={handleCallStateChange} />;
175+
}
176+
```
177+
178+
### 结束通话
179+
180+
一对一通话中,只要有一方挂断电话,通话即结束。多人通话中,只有本地用户挂断电话,通话才会结束。若本地用户挂断电话,SDK 会触发 `onStateChange` 回调,其中 `info.type` 中的值为 `hangup`。若远端用户挂断电话,SDK 触发 `onStateChange` 回调,其中 `info.type` 的值为 `user-left`
181+
182+
## 后续步骤
183+
184+
本节介绍你在项目中实现音频和视频通话功能时采取的其他步骤。
185+
186+
### 使用 Video SDK Token 对用户进行身份验证
187+
188+
为了提升通讯安全性,声网建议你在加入通话前通过 Video SDK token 对应用用户进行身份验证。为此,你需要确保[项目的主要证书已启用](https://doc.shengwang.cn/doc/console/general/user-guides/manage_authentication#启用主要证书)
189+
190+
Token 由声网提供的 token 生成器在应用服务器上生成。获取 token 后,需要在调用 `startCall``answerCall` 时将 token 传递给 callkit。关于在服务器上如何生成 Token 以及在客户端如何获取和更新 Token,详见[使用 Token 认证用户](https://doc.shengwang.cn/doc/rtc/javascript/basic-features/token-authentication)
191+
192+
## 参考
193+
194+
本节提供了实现实时音频和视频通信功能时可以参考的其他信息。
195+
196+
### API 列表
197+
198+
`CallKit` 提供以下 API:
199+
200+
- 方法如下表所示:
201+
202+
| 方法 | 描述 |
203+
| ------------------------- | --------------------------------------------------------------------------------------------------------- |
204+
| `initWithConfig:delegate` | 初始化 `CallKit`|
205+
| `startCall` | 开始通话。 |
206+
| `answerCall` | 接听电话。 |
207+
| `setUserIdMap` | 设置环信 IM 用户 ID 与声网用户 ID(UID)的映射,格式为 `{[uid1]: 'custom name', [uid2]: 'custom name'}`|
208+
209+
- 回调如下表所示:
210+
211+
| 事件 | 描述 |
212+
| --------------- | ---------------------------------- |
213+
| `onAddPerson` | 当用户邀请其他用户加入通话时触发。 |
214+
| `onInvite` | 收到通话邀请时触发。 |
215+
| `onStateChange` | 当通话状态变更时发生。 |
216+
217+
- 属性如下表所示:
218+
219+
| 属性 | 描述 |
220+
| --------------- | ------------------------ |
221+
| `contactAvatar` | 一对一通话时显示的头像。 |
222+
| `groupAvatar` | 多人通话时显示的头像。 |
223+
| `ringingSource` | 铃声文件。 |

0 commit comments

Comments
 (0)