@tencentcloud/sdk-mcp 1.7.4 → 1.7.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/README.md +57 -55
- package/knowledge/chunker.js +1 -0
- package/knowledge/path-meta.js +12 -1
- package/knowledge/search/search-core.js +22 -4
- package/knowledge/search/search-knowledge.js +1 -1
- package/package.json +1 -1
- package/resource/index/manifest.json +1 -1
- package/resource/integration/callkit/preset/android/integration.md +0 -4
- package/resource/integration/callkit/preset/flutter/integration.md +4 -8
- package/resource/integration/callkit/preset/ios/integration.md +2 -6
- package/resource/integration/callkit/preset/react/integration.md +2 -2
- package/resource/integration/callkit/preset/vue/integration.md +9 -9
- package/resource/integration/chat/preset/android/integration.md +2 -2
- package/resource/integration/chat/preset/flutter/integration.md +2 -2
- package/resource/integration/chat/preset/ios/integration.md +10 -10
- package/resource/integration/chat/preset/react/integration.md +0 -5
- package/resource/integration/chat/preset/uni-app/integration.md +0 -4
- package/resource/integration/chat/preset/vue/integration.md +0 -5
- package/resource/integration/livekit/preset/live/android/live-host-integration.md +0 -4
- package/resource/integration/livekit/preset/live/ios/live-host-integration.md +0 -4
- package/resource/integration/livekit/preset/live/ios/prepare-integration.md +3 -3
- package/resource/integration/livekit/preset/live/vue/live-pusher-integration.md +0 -4
- package/resource/integration/roomkit/preset/vue/integration.md +152 -439
- package/resource/knowledge/callkit/best-practice/android/video-chat-dating.md +8 -8
- package/resource/knowledge/callkit/core-sdk/android/answer-call.md +2 -2
- package/resource/knowledge/callkit/core-sdk/android/make-call.md +5 -5
- package/resource/knowledge/callkit/core-sdk/flutter/answer-call.md +7 -7
- package/resource/knowledge/callkit/core-sdk/flutter/make-call.md +10 -10
- package/resource/knowledge/callkit/core-sdk/ios/answer-call.md +9 -9
- package/resource/knowledge/callkit/core-sdk/ios/make-call.md +7 -8
- package/resource/knowledge/callkit/core-sdk/uni-app/answer-call.md +2 -2
- package/resource/knowledge/callkit/core-sdk/uni-app/make-call.md +2 -2
- package/resource/knowledge/callkit/faq/android.md +4 -4
- package/resource/knowledge/callkit/faq/common.md +4 -4
- package/resource/knowledge/callkit/preset/harmonyos/integration.md +0 -4
- package/resource/knowledge/callkit/preset/uni-app/integration.md +10 -10
- package/resource/knowledge/chat/preset/android-view/integration.md +2 -6
- package/resource/knowledge/chat/preset/ios-uikit/integration.md +43 -40
- package/resource/knowledge/chat/preset/react/h5/integration.md +0 -5
- package/resource/knowledge/chat/preset/vue/features/message-input.md +4 -4
- package/resource/knowledge/chat/preset/vue/h5/integration.md +0 -5
- package/resource/knowledge/livekit/core-sdk/features/android/audience-list.md +3 -3
- package/resource/knowledge/livekit/core-sdk/features/android/live-list.md +3 -3
- package/resource/knowledge/livekit/core-sdk/features/flutter/audience-list.md +3 -3
- package/resource/knowledge/livekit/core-sdk/features/flutter/live-list.md +3 -3
- package/resource/knowledge/livekit/core-sdk/features/ios/audience-list.md +3 -3
- package/resource/knowledge/livekit/core-sdk/features/ios/live-list.md +3 -3
- package/resource/knowledge/livekit/core-sdk/features/uni-app/audience-list.md +3 -3
- package/resource/knowledge/livekit/core-sdk/features/uni-app/live-list.md +3 -3
- package/resource/knowledge/livekit/core-sdk/live/android/host-interaction.md +2 -2
- package/resource/knowledge/livekit/core-sdk/live/flutter/host-interaction.md +2 -2
- package/resource/knowledge/livekit/core-sdk/live/flutter/integration.md +2 -2
- package/resource/knowledge/livekit/core-sdk/live/ios/host-interaction.md +2 -2
- package/resource/knowledge/livekit/core-sdk/live/uni-app/co-guest-interaction.md +12 -12
- package/resource/knowledge/livekit/core-sdk/live/uni-app/host-interaction.md +4 -4
- package/resource/knowledge/livekit/core-sdk/live/uni-app/integration.md +9 -9
- package/resource/knowledge/livekit/core-sdk/voice/android/host-interaction.md +2 -2
- package/resource/knowledge/livekit/core-sdk/voice/ios/host-interaction.md +2 -2
- package/resource/knowledge/livekit/core-sdk/voice/uni-app/integration.md +5 -5
- package/resource/knowledge/push/config/donut.md +3 -3
- package/resource/knowledge/push/config/harmonyos.md +12 -12
- package/resource/knowledge/push/config/ios.md +2 -2
- package/resource/knowledge/push/integration/android.md +91 -1112
- package/resource/knowledge/push/integration/donut.md +8 -8
- package/resource/knowledge/push/integration/ios.md +9 -35
- package/resource/knowledge/push/integration/unity.md +3 -3
- package/resource/knowledge/push/integration/unreal-engine.md +7 -7
- package/resource/knowledge/roomkit/core-sdk/android/room-state.md +3 -3
- package/resource/knowledge/roomkit/core-sdk/android/schedule-room.md +9 -9
- package/resource/knowledge/roomkit/core-sdk/flutter/room-state.md +3 -3
- package/resource/knowledge/roomkit/core-sdk/ios/room-state.md +3 -3
- package/resource/knowledge/roomkit/core-sdk/vue/recording.md +3 -3
- package/resource/knowledge/roomkit/core-sdk/vue/virtual-background.md +3 -3
- package/resource/knowledge/roomkit/preset/ios/integration.md +3 -3
- package/resource/knowledge/roomkit/preset/uniapp-app/integration.md +52 -10
- package/server.js +42 -34
- package/tools/common/get_usersig.js +1 -1
- package/tools/common/present_framework_choice.js +5 -5
- package/tools/definitions/finalize_answer_def.js +17 -16
- package/tools/definitions/get_native_call_uikit_integration_def.js +25 -16
- package/tools/definitions/get_native_callkit_core_integration_def.js +37 -26
- package/tools/definitions/get_native_chat_uikit_integration_def.js +22 -13
- package/tools/definitions/get_native_live_uikit_integration_def.js +30 -21
- package/tools/definitions/get_native_livekit_core_integration_def.js +25 -16
- package/tools/definitions/get_usersig_def.js +20 -13
- package/tools/definitions/get_web_call_uikit_integration_def.js +21 -12
- package/tools/definitions/get_web_chat_uikit_integration_def.js +22 -13
- package/tools/definitions/get_web_live_uikit_integration_def.js +21 -12
- package/tools/definitions/get_web_room_core_integration_def.js +29 -20
- package/tools/definitions/get_web_room_uikit_integration_def.js +21 -12
- package/tools/definitions/integration-boundary.js +9 -5
- package/tools/definitions/present_framework_choice_def.js +21 -21
- package/tools/definitions/search_trtc_knowledge_def.js +48 -26
- package/tools/definitions/submit_feedback_def.js +18 -14
- package/utils/preflight-route.js +203 -185
- package/utils/report-cls-client.js +1 -1
- package/utils/report-es-client.js +1 -1
|
@@ -2,47 +2,54 @@ TUIKit 是基于 IM SDK 的一款 UI 组件库,可通过 UI 组件快速实现
|
|
|
2
2
|
|
|
3
3
|
## 集成 TUIKit
|
|
4
4
|
|
|
5
|
-
TUIKit 采用数据驱动的响应式架构与原生 iOS
|
|
5
|
+
TUIKit 采用数据驱动的响应式架构与原生 iOS UIKit 体系(非声明式 UI ),以源码方式开放集成。它提供会话列表、聊天、联系人、搜索、群组等完整 UI 能力。
|
|
6
6
|
|
|
7
7
|
### 前提条件
|
|
8
|
-
- Xcode
|
|
8
|
+
- **Xcode**:16.0 或以上版本(推荐 Xcode 16.x 系列)。
|
|
9
9
|
|
|
10
|
-
- iOS
|
|
10
|
+
- **iOS**:14.0 及以上真机(暂时不支持模拟器)。
|
|
11
|
+
|
|
12
|
+
- **CocoaPods**:1.12.0 及以上版本(推荐 1.16.x)。如尚未安装,请参考 [CocoaPods Getting Started](https://guides.cocoapods.org/using/getting-started.html) 进行安装。
|
|
11
13
|
|
|
12
14
|
- 一个有效的腾讯云账号及 Chat 应用。可参考 开通服务 从控制台获取以下信息:
|
|
13
15
|
|
|
14
|
-
|
|
16
|
+
- SDKAppID:App 在控制台获取的 Chat 应用的 ID,为应用的唯一标识。
|
|
15
17
|
|
|
16
|
-
|
|
18
|
+
- SDKSecretKey:应用的密钥。
|
|
17
19
|
|
|
18
20
|
## 集成并引入组件
|
|
19
21
|
|
|
20
22
|
> **说明:**
|
|
21
|
-
> Demo:[
|
|
23
|
+
> Demo:IM 在 [CNB](https://cnb.cool/tencent/cloud/trtc/TUIKit_iOS) 及 [GitHub](https://github.com/Tencent-RTC/TUIKit_iOS) 上提供即时通信完整 Demo,[5 分钟跑通聊天 + 音视频通话全功能](https://cloud.tencent.com/document/product/269/68228)。
|
|
22
24
|
>
|
|
23
25
|
|
|
24
26
|
### 下载源码
|
|
25
27
|
|
|
26
|
-
从
|
|
28
|
+
从 [CNB](https://cnb.cool/tencent/cloud/trtc/TUIKit_iOS) 或者 [GitHub](https://github.com/Tencent-RTC/TUIKit_iOS) 克隆 TUIKit iOS 源码
|
|
27
29
|
``` bash
|
|
30
|
+
# 从 CNB 中克隆代码
|
|
31
|
+
git clone https://cnb.cool/tencent/cloud/trtc/TUIKit_iOS.git
|
|
32
|
+
|
|
33
|
+
# 从 GitHub 中克隆代码
|
|
28
34
|
git clone https://github.com/Tencent-RTC/TUIKit_iOS.git
|
|
29
35
|
```
|
|
30
36
|
|
|
31
37
|
将仓库根目录下的 `chat`、`call` 文件夹整体复制到您的工程根目录下。复制完成后的目录结构如下:
|
|
32
38
|
``` bash
|
|
33
39
|
YourApplication/
|
|
34
|
-
├──
|
|
40
|
+
├── source/ # 您的工程代码
|
|
35
41
|
├── call/ # 音视频通话组件
|
|
36
42
|
│ └── TUICallKit_Swift.podspec
|
|
37
43
|
│ └── TUICallKit_Swift/
|
|
38
44
|
├── chat/ # Chat 源码
|
|
39
45
|
│ ├── demo/ # 示例工程
|
|
40
|
-
│ └── uikit/ #
|
|
41
|
-
├── Podfile
|
|
46
|
+
│ └── uikit/ # TUIChatKit 组件库
|
|
47
|
+
├── Podfile # 依赖配置文件
|
|
48
|
+
├── YourApplication.xcworkspace # 您的项目文件
|
|
42
49
|
```
|
|
43
50
|
|
|
44
51
|
> **说明:**
|
|
45
|
-
> TUIKit_iOS 是包含多个产品的开源仓库,Chat 的 UI 源码位于 `chat/` 目录下(`chat/uikit` 为 UIKit 组件库,`chat/demo` 为示例工程),其依赖的音视频通话组件 `call/
|
|
52
|
+
> TUIKit_iOS 是包含多个产品的开源仓库,Chat 的 UI 源码位于 `chat/` 目录下(`chat/uikit` 为 UIKit 组件库,`chat/demo` 为示例工程),其依赖的音视频通话组件 `call/TUICallKit_Swift` 位于仓库根目录。模块目录可放在工程任意位置,只需在 `Podfile` 中设置正确的相对路径即可。
|
|
46
53
|
>
|
|
47
54
|
|
|
48
55
|
### 集成组件
|
|
@@ -52,8 +59,9 @@ YourApplication/
|
|
|
52
59
|
# 请使用您的真实项目名称替换 your_project_name
|
|
53
60
|
target 'your_project_name' do
|
|
54
61
|
|
|
55
|
-
# 补充如下内容 增加
|
|
56
|
-
|
|
62
|
+
# 补充如下内容 增加 TUIChatKit 和 TUICallKit_Swift 这两个依赖
|
|
63
|
+
# 注意 path 的相对路径
|
|
64
|
+
pod 'TUIChatKit', :path => 'chat/uikit/TUIChatKit.podspec'
|
|
57
65
|
pod 'TUICallKit_Swift', :path => 'call/TUICallKit_Swift.podspec'
|
|
58
66
|
end
|
|
59
67
|
|
|
@@ -71,7 +79,7 @@ YourApplication/
|
|
|
71
79
|
|
|
72
80
|
## 接入步骤
|
|
73
81
|
|
|
74
|
-
|
|
82
|
+
完成上述集成后,参考以下步骤,您仅需几行代码即可在项目中快速搭建会话列表、聊天、联系人等核心界面。
|
|
75
83
|
|
|
76
84
|
### 步骤1:配置用户鉴权
|
|
77
85
|
|
|
@@ -84,14 +92,14 @@ YourApplication/
|
|
|
84
92
|
【Swift】
|
|
85
93
|
``` swift
|
|
86
94
|
import AtomicXCore
|
|
87
|
-
import
|
|
95
|
+
import TUIChatKit
|
|
88
96
|
import UIKit
|
|
89
97
|
|
|
90
|
-
let
|
|
98
|
+
let yourSdkAppID: Int32 = 10_000_000_00 // 填写你的实际sdkAppID
|
|
91
99
|
let testUserID = "testUserID" // 你的测试用户ID
|
|
92
100
|
let userSig = "xxxxxxx" // 你的测试用户ID对应的 userSig (从IM 控制台获取,看上面的截图)
|
|
93
101
|
|
|
94
|
-
LoginStore.shared.login(sdkAppID:
|
|
102
|
+
LoginStore.shared.login(sdkAppID: yourSdkAppID, userID: testUserID, userSig: userSig) { [weak self] result in
|
|
95
103
|
DispatchQueue.main.async {
|
|
96
104
|
switch result {
|
|
97
105
|
case .success:
|
|
@@ -104,8 +112,7 @@ LoginStore.shared.login(sdkAppID: youSdkAppID, userID: testUserID, userSig: user
|
|
|
104
112
|
}
|
|
105
113
|
```
|
|
106
114
|
|
|
107
|
-
>
|
|
108
|
-
>
|
|
115
|
+
> **警告:**
|
|
109
116
|
> 在正式的生产环境中,建议在您的服务端生成 UserSig,在需要时由 App 向业务服务器发起请求获取动态 UserSig 进行鉴权。详见 [服务端生成 UserSig](https://cloud.tencent.com/document/product/269/32688)。
|
|
110
117
|
>
|
|
111
118
|
|
|
@@ -116,7 +123,7 @@ LoginStore.shared.login(sdkAppID: youSdkAppID, userID: testUserID, userSig: user
|
|
|
116
123
|
【Swift】
|
|
117
124
|
``` java
|
|
118
125
|
import AtomicXCore
|
|
119
|
-
import
|
|
126
|
+
import TUIChatKit
|
|
120
127
|
import UIKit
|
|
121
128
|
|
|
122
129
|
func showConversationList() {
|
|
@@ -137,7 +144,7 @@ func showConversationList() {
|
|
|
137
144
|
【Swift】
|
|
138
145
|
``` swift
|
|
139
146
|
import AtomicXCore
|
|
140
|
-
import
|
|
147
|
+
import TUIChatKit
|
|
141
148
|
import UIKit
|
|
142
149
|
|
|
143
150
|
// 进入单聊
|
|
@@ -155,9 +162,9 @@ groupConversation.title = "测试群"
|
|
|
155
162
|
showChat(groupConversation)
|
|
156
163
|
|
|
157
164
|
func showChat(_ info: ConversationInfo) {
|
|
158
|
-
let chatPage = ChatPage(conversation: info
|
|
165
|
+
let chatPage = ChatPage(conversation: info, onBack: { [weak self] in
|
|
159
166
|
self?.navigationController.popViewController(animated: true)
|
|
160
|
-
}
|
|
167
|
+
})
|
|
161
168
|
navigationController.pushViewController(chatPage, animated: true)
|
|
162
169
|
}
|
|
163
170
|
```
|
|
@@ -177,23 +184,23 @@ func showChat(_ info: ConversationInfo) {
|
|
|
177
184
|
|
|
178
185
|
### 步骤5:构建联系人界面
|
|
179
186
|
|
|
180
|
-
联系人页由 ContactsPage 承载,展示当前用户的好友列表(按字母索引分组)与群列表入口 等。页面自带导航栏,右上角的
|
|
187
|
+
联系人页由 ContactsPage 承载,展示当前用户的好友列表(按字母索引分组)与群列表入口 等。页面自带导航栏,右上角的 **+**按钮内置了**添加好友**和**加入群聊**两个功能入口。
|
|
181
188
|
|
|
182
189
|
【Swift】
|
|
183
190
|
``` swift
|
|
184
191
|
import AtomicXCore
|
|
185
|
-
import
|
|
192
|
+
import TUIChatKit
|
|
186
193
|
import UIKit
|
|
187
194
|
|
|
188
195
|
func showContacts() {
|
|
189
196
|
let contactsPage = ContactsPage(
|
|
190
|
-
onContactClick: { [weak self]
|
|
191
|
-
//
|
|
192
|
-
// self?.showChat(with:
|
|
197
|
+
onContactClick: { [weak self] contact in
|
|
198
|
+
// 点击好友列表中的某个联系人回调(ContactInfo),可在该回调中进入单聊
|
|
199
|
+
// self?.showChat(with: contact.userID, title: contact.nickname ?? contact.userID)
|
|
193
200
|
},
|
|
194
|
-
onGroupClick: { [weak self]
|
|
195
|
-
//
|
|
196
|
-
// self?.showGroupChat(with:
|
|
201
|
+
onGroupClick: { [weak self] group in
|
|
202
|
+
// 点击群列表中的某个群的回调(GroupInfo),可在该回调中进入群聊
|
|
203
|
+
// self?.showGroupChat(with: group.groupID, title: group.groupName)
|
|
197
204
|
}
|
|
198
205
|
)
|
|
199
206
|
navigationController.pushViewController(contactsPage, animated: true)
|
|
@@ -248,24 +255,20 @@ func startVideoCall() {
|
|
|
248
255
|
|
|
249
256
|
4. **如何移除音视频通话功能?**
|
|
250
257
|
|
|
251
|
-
ChatPage 默认集成了音视频通话功能,如果你不需要音视频通话功能。可以在 步骤
|
|
258
|
+
ChatPage 默认集成了音视频通话功能,如果你不需要音视频通话功能。可以在 步骤 4 创建聊天界面 中关闭音视频通话开关,代码如下所示:
|
|
252
259
|
|
|
253
260
|
【Swift】
|
|
254
261
|
``` swift
|
|
255
262
|
func showChat(_ info: ConversationInfo) {
|
|
256
263
|
// 在输入配置中关闭输入面板中的视频通话和音频通话功能
|
|
257
264
|
let inputConfig = ChatMessageInputConfig(isShowVideoCall: false, isShowAudioCall: false)
|
|
258
|
-
let chatPage = ChatPage(conversation: info, messageInputConfig: inputConfig
|
|
265
|
+
let chatPage = ChatPage(conversation: info, messageInputConfig: inputConfig, onBack: { [weak self] in
|
|
259
266
|
self?.navigationController.popViewController(animated: true)
|
|
260
|
-
}
|
|
267
|
+
})
|
|
261
268
|
navigationController.pushViewController(chatPage, animated: true)
|
|
262
269
|
}
|
|
263
270
|
```
|
|
264
271
|
|
|
265
|
-
## AI 助手:知识咨询与代码集成
|
|
266
|
-
|
|
267
|
-
在接入 IM SDK 过程中,您可以通过 MCP 使用 AI 助手,快速完成知识咨询、报错排查和 UIKit 集成代码生成。支持 Web/Android/iOS/Flutter/uni-app 等平台,答案基于官方文档。适用于查询 SDK API、UI 组件用法、服务端 API 与 IM 产品配置等场景,[立即体验,提出您的第一个问题](https://cloud.tencent.com/document/product/269/126983)。
|
|
268
|
-
|
|
269
272
|
## 常见问题
|
|
270
273
|
|
|
271
274
|
### 音视频常见问题
|
|
@@ -303,9 +306,9 @@ ChatPage 默认集成了音视频通话功能,如果你不需要音视频通
|
|
|
303
306
|
func showChat(_ info: ConversationInfo) {
|
|
304
307
|
// 在输入配置中关闭输入面板中的视频通话和音频通话功能
|
|
305
308
|
let inputConfig = ChatMessageInputConfig(isShowVideoCall: false, isShowAudioCall: false)
|
|
306
|
-
let chatPage = ChatPage(conversation: info, messageInputConfig: inputConfig
|
|
309
|
+
let chatPage = ChatPage(conversation: info, messageInputConfig: inputConfig, onBack: { [weak self] in
|
|
307
310
|
self?.navigationController.popViewController(animated: true)
|
|
308
|
-
}
|
|
311
|
+
})
|
|
309
312
|
navigationController.pushViewController(chatPage, animated: true)
|
|
310
313
|
}
|
|
311
314
|
```
|
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
TUIKit 是基于腾讯云 Chat SDK 的一款 React 组件库,它提供了一些通用的 UI 组件,包含会话、聊天、群组等功能。本文介绍如何快速集成 TUIKit 并实现核心功能。
|
|
2
2
|
|
|
3
|
-
> **AI 助手使用说明:**
|
|
4
|
-
>
|
|
5
|
-
> MCP 提供了 **IM 知识咨询**和**含 UI 集成**的 AI 解决方案,您可以通过 MCP 查询 IM 相关的知识和集成 UIKit,[点击这里,立即体验 AI 助手](https://cloud.tencent.com/document/product/269/126983)。
|
|
6
|
-
>
|
|
7
|
-
|
|
8
3
|
## 关键概念
|
|
9
4
|
|
|
10
5
|
chat-uikit-react 主要分为 ConversationListH5、MessageListH5、ChatHeaderH5、MessageInputH5、ChatSettingH5、SearchH5、ContactH5 等核心 UI 组件,每个 UI 组件负责展示不同的内容。
|
|
@@ -46,9 +46,9 @@ MessageInput 是一个功能完整的消息输入组件,专为 Vue3 应用设
|
|
|
46
46
|
|
|
47
47
|
- 详细说明:attachmentPickerMode 用于设置附件选择器的显示模式,默认值为 `'collapsed'`。
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
- **collapsed**:收起模式,点击后展开选项。
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
- **expanded**:展开模式,直接显示所有选项。
|
|
52
52
|
|
|
53
53
|
### actions
|
|
54
54
|
- 类型:`MessageInputActions`
|
|
@@ -57,9 +57,9 @@ MessageInput 是一个功能完整的消息输入组件,专为 Vue3 应用设
|
|
|
57
57
|
|
|
58
58
|
- 注意:
|
|
59
59
|
|
|
60
|
-
|
|
60
|
+
- 每一个 BuiltInAction 都支持默认插槽从而改变 Trigger 的 UI 展示。更加灵活的输入工具自定义建议使用 `headerToolbar` 插槽。
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
- 显示音视频通话的按钮并不意味着可以发起通话,发起音视频通话的前提是集成了 CallKit,集成 CallKit 可以参考 集成 TUICallKit。
|
|
63
63
|
|
|
64
64
|
``` typescript
|
|
65
65
|
type MessageInputActions = Array<BuiltInAction | CustomAction>;
|
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
TUIKit 是基于腾讯云 Chat SDK 的一款 Vue 3 UI 组件库,它提供了一些通用的 UI 组件,包含会话、聊天、群组等功能。本文介绍如何快速集成 TUIKit 并实现核心功能。
|
|
2
2
|
|
|
3
|
-
> **说明:**
|
|
4
|
-
> - **AI 助手使用说明**
|
|
5
|
-
> MCP 提供了 **IM 知识咨询**和**含 UI 集成**的 AI 解决方案,您可以通过 MCP 查询 IM 相关的知识和集成 UIKit,[点击这里,立即体验 AI 助手](https://cloud.tencent.com/document/product/269/126983)。
|
|
6
|
-
>
|
|
7
|
-
|
|
8
3
|
|接入需求|桌面端|移动端 H5|
|
|
9
4
|
|---------|---------|---------|
|
|
10
5
|
|全新 Web Vue3 项目|全功能接入 > 移动端 > Vue3|
|
|
@@ -261,11 +261,11 @@ class LiveRoomManager(
|
|
|
261
261
|
|
|
262
262
|
- **更新机制与频率控制:**
|
|
263
263
|
|
|
264
|
-
|
|
264
|
+
- 无论是即时触发还是延迟触发,所有的人数变更通知都是以消息的形式在房间内广播的。
|
|
265
265
|
|
|
266
|
-
|
|
266
|
+
- 房间内每秒的消息总量有上限,单房间消息频控是**每秒 40 条消息**。
|
|
267
267
|
|
|
268
|
-
|
|
268
|
+
- **关键点: 在"弹幕风暴"或礼物刷屏等消息流量极高的场景下,如果房间内的消息速率超过了 40条/秒 的阈值,为了保证核心消息(例如弹幕)的送达,人数变更的消息可能会被频控策略丢弃**。
|
|
269
269
|
|
|
270
270
|
**这对开发者意味着什么?**
|
|
271
271
|
|
|
@@ -514,10 +514,10 @@ class YourAudienceActivity : AppCompatActivity() {
|
|
|
514
514
|
|
|
515
515
|
- **数量与大小限制**:
|
|
516
516
|
|
|
517
|
-
|
|
517
|
+
- 单个房间最多支持 **10** 个 key。
|
|
518
518
|
|
|
519
|
-
|
|
519
|
+
- 每个 key 的长度不超过 **50 字节**,每个 value 的长度不超过 **2KB**。
|
|
520
520
|
|
|
521
|
-
|
|
521
|
+
- 单个房间所有 value 的总大小不超过 **16KB**。
|
|
522
522
|
|
|
523
523
|
- **冲突解决**: `metaData` 的更新机制是"后来者覆盖"。如果多个管理员在短时间内修改同一个 key,最后一次的修改会生效。建议在业务设计上避免多人同时修改同一个关键信息。
|
|
@@ -251,11 +251,11 @@ class LiveRoomManager {
|
|
|
251
251
|
|
|
252
252
|
- **更新机制与频率控制:**
|
|
253
253
|
|
|
254
|
-
|
|
254
|
+
- 无论是即时触发还是延迟触发,所有的人数变更通知都是以消息的形式在房间内广播的。
|
|
255
255
|
|
|
256
|
-
|
|
256
|
+
- 房间内每秒的消息总量有上限,单房间消息频控是**每秒 40 条消息**。
|
|
257
257
|
|
|
258
|
-
|
|
258
|
+
- **关键点:**在"弹幕风暴"或礼物刷屏等消息流量极高的场景下,如果房间内的消息速率超过了 40条/秒 的阈值,为了保证核心消息(例如弹幕)的送达,**人数变更的消息可能会被频控策略丢弃**。
|
|
259
259
|
|
|
260
260
|
**这对开发者意味着什么?**
|
|
261
261
|
|
|
@@ -718,10 +718,10 @@ class _ProductCardWidgetState extends State<ProductCardWidget> {
|
|
|
718
718
|
|
|
719
719
|
- **数量与大小限制:**
|
|
720
720
|
|
|
721
|
-
|
|
721
|
+
- 单个房间最多支持 **10** 个 key。
|
|
722
722
|
|
|
723
|
-
|
|
723
|
+
- 每个 key 的长度不超过 **50 字节**,每个 value 的长度不超过 **2KB**。
|
|
724
724
|
|
|
725
|
-
|
|
725
|
+
- 单个房间所有 value 的总大小不超过 **16KB**。
|
|
726
726
|
|
|
727
727
|
- **冲突解决**:`metaData` 的更新机制是"后来者覆盖"。如果多个管理员在短时间内修改同一个 key,最后一次的修改会生效。建议在业务设计上避免多人同时修改同一个关键信息。
|
|
@@ -254,11 +254,11 @@ class LiveRoomManager {
|
|
|
254
254
|
|
|
255
255
|
- **更新机制与频率控制:**
|
|
256
256
|
|
|
257
|
-
|
|
257
|
+
- 无论是即时触发还是延迟触发,所有的人数变更通知都是以消息的形式在房间内广播的。
|
|
258
258
|
|
|
259
|
-
|
|
259
|
+
- 房间内每秒的消息总量有上限,单房间消息频控是**每秒 40 条消息**。
|
|
260
260
|
|
|
261
|
-
|
|
261
|
+
- **关键点:**在“弹幕风暴”或礼物刷屏等消息流量极高的场景下,如果房间内的消息速率超过了 40条/秒 的阈值,为了保证核心消息(例如弹幕)的送达,**人数变更的消息可能会被频控策略丢弃**。
|
|
262
262
|
|
|
263
263
|
**这对开发者意味着什么?**
|
|
264
264
|
|
|
@@ -395,10 +395,10 @@ class YourAudienceViewController: UIViewController {
|
|
|
395
395
|
|
|
396
396
|
- **数量与大小限制**:
|
|
397
397
|
|
|
398
|
-
|
|
398
|
+
- 单个房间最多支持 **10** 个 key。
|
|
399
399
|
|
|
400
|
-
|
|
400
|
+
- 每个 key 的长度不超过 **50 字节**,每个 value 的长度不超过 **2KB**。
|
|
401
401
|
|
|
402
|
-
|
|
402
|
+
- 单个房间所有 value 的总大小不超过 **16KB**。
|
|
403
403
|
|
|
404
404
|
- **冲突解决**: `metaData` 的更新机制是“后来者覆盖”。如果多个管理员在短时间内修改同一个 key,最后一次的修改会生效。建议在业务设计上避免多人同时修改同一个关键信息。
|
|
@@ -206,11 +206,11 @@ onMounted(() => {
|
|
|
206
206
|
|
|
207
207
|
- **更新机制与频率控制:**
|
|
208
208
|
|
|
209
|
-
|
|
209
|
+
- 无论是即时触发还是延迟触发,所有的人数变更通知都是以消息的形式在房间内广播的。
|
|
210
210
|
|
|
211
|
-
|
|
211
|
+
- 房间内每秒的消息总量有上限,单房间消息频控是**每秒 40 条消息**。
|
|
212
212
|
|
|
213
|
-
|
|
213
|
+
- **关键点:**在“弹幕风暴”或礼物刷屏等消息流量极高的场景下,如果房间内的消息速率超过了 40条/秒 的阈值,为了保证核心消息(例如弹幕)的送达,**人数变更的消息可能会被频控策略丢弃**。
|
|
214
214
|
|
|
215
215
|
**这对开发者意味着什么?**
|
|
216
216
|
|
|
@@ -286,10 +286,10 @@ watch( currentLive, (newVal, oldVal) => {
|
|
|
286
286
|
|
|
287
287
|
- **数量与大小限制**:
|
|
288
288
|
|
|
289
|
-
|
|
289
|
+
- 单个房间最多支持 **10** 个 key。
|
|
290
290
|
|
|
291
|
-
|
|
291
|
+
- 每个 key 的长度不超过 **50 字节**,每个 value 的长度不超过 **2KB**。
|
|
292
292
|
|
|
293
|
-
|
|
293
|
+
- 单个房间所有 value 的总大小不超过 **16KB**。
|
|
294
294
|
|
|
295
295
|
- **冲突解决**: `metaData` 的更新机制是“后来者覆盖”。如果多个管理员在短时间内修改同一个 key,最后一次的修改会生效。建议在业务设计上避免多人同时修改同一个关键信息。
|
|
@@ -508,9 +508,9 @@
|
|
|
508
508
|
#### 关键流程说明
|
|
509
509
|
1. **获取 PK 状态**:
|
|
510
510
|
|
|
511
|
-
|
|
511
|
+
- 回调配置:您可以通过配置 PK 状态回调,由 LiveKit 后台在 PK 开始、结束时,主动通知您的系统 PK 状态。
|
|
512
512
|
|
|
513
|
-
|
|
513
|
+
- 主动查询:您的后台服务可主动调用 PK 状态查询 接口,随时查询当前 PK 状态。
|
|
514
514
|
|
|
515
515
|
2. **PK 分数计算**:您的后台服务根据业务规则(如上述示例),计算 PK 分数增量。
|
|
516
516
|
|
|
@@ -809,9 +809,9 @@ class _FullCustomLiveWidgetState extends State<FullCustomLiveWidget> {
|
|
|
809
809
|
#### 关键流程说明
|
|
810
810
|
1. **获取 PK 状态**:
|
|
811
811
|
|
|
812
|
-
|
|
812
|
+
- 回调配置:您可以通过配置 PK 状态回调,由 LiveKit 后台在 PK 开始、结束时,主动通知您的系统 PK 状态。
|
|
813
813
|
|
|
814
|
-
|
|
814
|
+
- 主动查询:您的后台服务可主动调用 PK 状态查询 接口,随时查询当前 PK 状态。
|
|
815
815
|
|
|
816
816
|
2. **PK 分数计算**:您的后台服务根据业务规则(如上述示例),计算 PK 分数增量。
|
|
817
817
|
|
|
@@ -139,9 +139,9 @@ void main() async {
|
|
|
139
139
|
|
|
140
140
|
这是最关键的一步。我们需要根据 `_isLiveStarted` 的状态选择不同的组件:
|
|
141
141
|
|
|
142
|
-
|
|
142
|
+
- **预览态:**使用 `VideoView` + `setLocalVideoView`(直接渲染本地采集数据)。
|
|
143
143
|
|
|
144
|
-
|
|
144
|
+
- **直播态:**使用 `LiveCoreWidget`(渲染直播间流数据)。
|
|
145
145
|
|
|
146
146
|
``` java
|
|
147
147
|
// 3.1 封装预览视图组件
|
|
@@ -441,9 +441,9 @@
|
|
|
441
441
|
#### 关键流程说明
|
|
442
442
|
1. **获取 PK 状态**:
|
|
443
443
|
|
|
444
|
-
|
|
444
|
+
- 回调配置:您可以通过配置 PK 状态回调,由 LiveKit 后台在 PK 开始、结束时,主动通知您的系统 PK 状态。
|
|
445
445
|
|
|
446
|
-
|
|
446
|
+
- 主动查询:您的后台服务可主动调用 PK 状态查询 接口,随时查询当前 PK 状态。
|
|
447
447
|
|
|
448
448
|
2. **PK 分数计算**:您的后台服务根据业务规则(如上述示例),计算 PK 分数增量。
|
|
449
449
|
|
|
@@ -324,9 +324,9 @@
|
|
|
324
324
|
|
|
325
325
|
这个组件是我们的“UI 贴纸”,它只负责根据数据渲染 UI,不关心视频。
|
|
326
326
|
|
|
327
|
-
|
|
327
|
+
- 在您的 `components` 目录下,创建一个新文件 `ParticipantOverlay.vue`。
|
|
328
328
|
|
|
329
|
-
|
|
329
|
+
- 将以下代码复制到文件中。
|
|
330
330
|
|
|
331
331
|
``` typescript
|
|
332
332
|
<template>
|
|
@@ -383,9 +383,9 @@
|
|
|
383
383
|
|
|
384
384
|
这是将视频层和 `UI` 层“叠”在一起的关键步骤,同时需要解决 `nvue` 的布局问题。
|
|
385
385
|
|
|
386
|
-
|
|
386
|
+
- 打开您的直播间页面文件
|
|
387
387
|
|
|
388
|
-
|
|
388
|
+
- 按照以下结构和样式进行修改。
|
|
389
389
|
|
|
390
390
|
``` typescript
|
|
391
391
|
<template>
|
|
@@ -449,9 +449,9 @@
|
|
|
449
449
|
|
|
450
450
|
- 解决方案:
|
|
451
451
|
|
|
452
|
-
|
|
452
|
+
- 使用 `Flex` 布局:从页面的最外层根 `<view>` 开始,使用 `flex: 1` 样式,让容器逐层向下“撑满”可用空间。
|
|
453
453
|
|
|
454
|
-
|
|
454
|
+
- 使用绝对定位:对于需要覆盖的层(例如 `LiveCoreView` 和自定义的 `ParticipantOverlay`),将其父容器设置为 `position: relative` 和 `flex: 1`,然后将这些覆盖层设置为 `position: absolute` 并配合 `top: 0; left: 0; right: 0; bottom: 0;`,让它们从四个方向贴紧父容器边缘,这是在 `nvue` 中实现“占满”效果最可靠的方法。
|
|
455
455
|
|
|
456
456
|
### 自定义的昵称/头像 UI 与视频画面位置错乱
|
|
457
457
|
- 问题描述: 按照“完善 `UI` 细节”章节添加了 `ParticipantOverlay` 组件后,显示的昵称条或头像占位图没有精确地覆盖在对应的视频小窗上,存在偏移或尺寸不匹配。
|
|
@@ -460,9 +460,9 @@
|
|
|
460
460
|
|
|
461
461
|
- 解决方案:
|
|
462
462
|
|
|
463
|
-
|
|
463
|
+
- 确保 `scale` 值正确计算:必须在父页面中正确计算 `scale` 值。通常的计算方式是:`scaleX = 屏幕实际宽度 / 设计稿宽度。`
|
|
464
464
|
|
|
465
|
-
|
|
465
|
+
- 确保 `scale` 值正确传递:将计算好的 `scale` 对象传递给 `<ParticipantOverlay>` 组件。
|
|
466
466
|
|
|
467
467
|
### 连麦功能无响应(申请/邀请/接受/拒绝均失败)
|
|
468
468
|
- 问题描述: 调用 `applyForSeat`, `acceptApplication`, `inviteToSeat` 等 `CoGuestState` 提供的方法后,没有任何效果,也没有收到预期的回调。
|
|
@@ -471,9 +471,9 @@
|
|
|
471
471
|
|
|
472
472
|
- 解决方案:
|
|
473
473
|
|
|
474
|
-
|
|
474
|
+
- 校验 `liveID`:确保在调用 `useCoGuestState(liveID)` 和所有相关方法(例如 `applyForSeat({ liveID, ... })`)时,使用的 `liveID` 是当前直播间真实且有效的 `ID`。
|
|
475
475
|
|
|
476
|
-
|
|
476
|
+
- 保持 `liveID` 一致:在整个页面的生命周期中,所有与 `CoGuestState` 相关的操作都必须使用同一个 `liveID`。
|
|
477
477
|
|
|
478
478
|
### 无法接收到连麦相关的事件通知
|
|
479
479
|
- 问题描述: 观众端收不到主播的邀请(`onHostInvitationReceived`),或者主播端收不到观众的申请(`onGuestApplicationReceived`)。
|
|
@@ -482,9 +482,9 @@
|
|
|
482
482
|
|
|
483
483
|
- 解决方案: 确保在页面初始化时(例如在 `onMounted` 钩子中),根据角色(主播/观众)调用相应的方法来注册监听器:
|
|
484
484
|
|
|
485
|
-
|
|
485
|
+
- 主播端:调用 `addCoGuestHostListener` 来监听 `onGuestApplicationReceived`、`onHostInvitationResponded` 等事件。
|
|
486
486
|
|
|
487
|
-
|
|
487
|
+
- 观众端:调用 `addCoGuestGuestListener` 来监听 `onGuestApplicationResponded`、`onHostInvitationReceived` 等事件。
|
|
488
488
|
|
|
489
489
|
### 连麦成功后,对方看不到我的画面或听不到我的声音
|
|
490
490
|
- 问题描述: 作为观众,上麦申请被主播同意后,虽然麦位列表中有我,但我的视频画面没有出现,或者麦克风图标显示为关闭状态。
|
|
@@ -133,9 +133,9 @@
|
|
|
133
133
|
|
|
134
134
|
这个组件是我们的“UI 贴纸”,它只负责根据数据渲染 UI,不关心视频。
|
|
135
135
|
|
|
136
|
-
|
|
136
|
+
- 在您的 `components` 目录下,创建一个新文件 `ParticipantOverlay.vue`。
|
|
137
137
|
|
|
138
|
-
|
|
138
|
+
- 将以下代码复制到文件中。
|
|
139
139
|
|
|
140
140
|
``` typescript
|
|
141
141
|
<template>
|
|
@@ -192,9 +192,9 @@
|
|
|
192
192
|
|
|
193
193
|
这是将视频层和 `UI` 层“叠”在一起的关键步骤,同时需要解决 `nvue` 的布局问题。
|
|
194
194
|
|
|
195
|
-
|
|
195
|
+
- 打开您的直播间页面文件
|
|
196
196
|
|
|
197
|
-
|
|
197
|
+
- 按照以下结构和样式进行修改。
|
|
198
198
|
|
|
199
199
|
``` typescript
|
|
200
200
|
<template>
|
|
@@ -13,13 +13,13 @@
|
|
|
13
13
|
|
|
14
14
|
2. **配置工程权限:** 请在应用的 manifest.json 文件的 app-plus > distribute 节点下,确保添加了以下必要的权限:
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
- Android 平台(`android` 节点):在 `permissions` 数组中,请确保包含以下权限:
|
|
17
17
|
|
|
18
18
|
``` json
|
|
19
19
|
"<uses-permission android:name=\"android.permission.RECORD_AUDIO\" />",
|
|
20
20
|
"<uses-permission android:name=\"android.permission.CAMERA\"/>"
|
|
21
21
|
```
|
|
22
|
-
|
|
22
|
+
- iOS 平台(ios 节点):在 `privacyDescription` 对象中,请确保包含以下描述:
|
|
23
23
|
|
|
24
24
|
``` json
|
|
25
25
|
"NSCameraUsageDescription" : "应用需要访问您的相机以进行直播",
|
|
@@ -282,26 +282,26 @@ onMounted(() => {
|
|
|
282
282
|
|
|
283
283
|
- 解决方案:
|
|
284
284
|
|
|
285
|
-
|
|
285
|
+
- 使用 `cover-view`:uni-app 提供了 `cover-view` 和 `cover-image`,它们可以覆盖在原生组件之上,但样式支持有限。
|
|
286
286
|
|
|
287
|
-
|
|
287
|
+
- 切换到 `nvue`:如果页面交互复杂,需要大量元素覆盖在原生组件上,建议将整个页面用 `nvue` 来编写。`nvue` 的所有组件都是原生渲染,不存在层级问题。
|
|
288
288
|
|
|
289
289
|
### nvue 与 vue 的抉择问题
|
|
290
290
|
- 问题:不知道什么时候该用 `nvue`,什么时候用 `vue`。
|
|
291
291
|
|
|
292
292
|
- 选型建议:
|
|
293
293
|
|
|
294
|
-
|
|
294
|
+
- 默认用 `vue`:适合绝大多数业务和 UI 复杂的页面。
|
|
295
295
|
|
|
296
|
-
|
|
296
|
+
- 当遇到长列表滑动卡顿、复杂动画掉帧、需要覆盖原生组件等性能或层级问题时,再考虑将该页面重构为 `nvue`。直播、地图这类页面是 nvue 的绝佳应用场景。
|
|
297
297
|
|
|
298
298
|
### 原生能力集成问题
|
|
299
299
|
- 问题:插件调用失败或无响应。
|
|
300
300
|
|
|
301
301
|
- 解决方案:
|
|
302
302
|
|
|
303
|
-
|
|
303
|
+
- 必须打包自定义基座:在开发调试原生插件时,不能使用标准基座,必须通过 `HBuilderX` > 运行 > 运行到手机或模拟器 > 制作自定义基座,然后选择这个自定义基座来运行。
|
|
304
304
|
|
|
305
|
-
|
|
305
|
+
- 检查权限:如本文档“准备工作”中所述,`manifest.json` 必须声明相机、麦克风等权限。
|
|
306
306
|
|
|
307
|
-
|
|
307
|
+
- 查看原生日志:这是终极调试手段。通过 `Android Studio (Logcat)` 或 `Xcode (Console)` 查看设备的原生日志,通常能发现最直接的错误信息。
|
|
@@ -435,9 +435,9 @@ override fun onCoHostRequestReceived(inviter: SeatUserInfo, extensionInfo: Strin
|
|
|
435
435
|
#### 关键流程说明
|
|
436
436
|
1. **获取 PK 状态**:
|
|
437
437
|
|
|
438
|
-
|
|
438
|
+
- 回调配置:您可以通过配置 PK 状态回调,由 LiveKit 后台在 PK 开始、结束时,主动通知您的系统 PK 状态。
|
|
439
439
|
|
|
440
|
-
|
|
440
|
+
- 主动查询:您的后台服务可主动调用 PK 状态查询 接口,随时查询当前 PK 状态。
|
|
441
441
|
|
|
442
442
|
2. **PK 分数计算**:您的后台服务根据业务规则(例如上述示例),计算 PK 分数增量。
|
|
443
443
|
|
|
@@ -531,9 +531,9 @@ coHostStore.coHostEventPublisher
|
|
|
531
531
|
#### 关键流程说明
|
|
532
532
|
1. **获取 PK 状态**:
|
|
533
533
|
|
|
534
|
-
|
|
534
|
+
- 回调配置:您可以通过配置 PK 状态回调,由 LiveKit 后台在 PK 开始、结束时,主动通知您的系统 PK 状态。
|
|
535
535
|
|
|
536
|
-
|
|
536
|
+
- 主动查询:您的后台服务可主动调用 PK 状态查询 接口,随时查询当前 PK 状态。
|
|
537
537
|
|
|
538
538
|
2. **PK 分数计算**:您的后台服务根据业务规则(如上述示例),计算 PK 分数增量。
|
|
539
539
|
|