@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.
Files changed (98) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +57 -55
  3. package/knowledge/chunker.js +1 -0
  4. package/knowledge/path-meta.js +12 -1
  5. package/knowledge/search/search-core.js +22 -4
  6. package/knowledge/search/search-knowledge.js +1 -1
  7. package/package.json +1 -1
  8. package/resource/index/manifest.json +1 -1
  9. package/resource/integration/callkit/preset/android/integration.md +0 -4
  10. package/resource/integration/callkit/preset/flutter/integration.md +4 -8
  11. package/resource/integration/callkit/preset/ios/integration.md +2 -6
  12. package/resource/integration/callkit/preset/react/integration.md +2 -2
  13. package/resource/integration/callkit/preset/vue/integration.md +9 -9
  14. package/resource/integration/chat/preset/android/integration.md +2 -2
  15. package/resource/integration/chat/preset/flutter/integration.md +2 -2
  16. package/resource/integration/chat/preset/ios/integration.md +10 -10
  17. package/resource/integration/chat/preset/react/integration.md +0 -5
  18. package/resource/integration/chat/preset/uni-app/integration.md +0 -4
  19. package/resource/integration/chat/preset/vue/integration.md +0 -5
  20. package/resource/integration/livekit/preset/live/android/live-host-integration.md +0 -4
  21. package/resource/integration/livekit/preset/live/ios/live-host-integration.md +0 -4
  22. package/resource/integration/livekit/preset/live/ios/prepare-integration.md +3 -3
  23. package/resource/integration/livekit/preset/live/vue/live-pusher-integration.md +0 -4
  24. package/resource/integration/roomkit/preset/vue/integration.md +152 -439
  25. package/resource/knowledge/callkit/best-practice/android/video-chat-dating.md +8 -8
  26. package/resource/knowledge/callkit/core-sdk/android/answer-call.md +2 -2
  27. package/resource/knowledge/callkit/core-sdk/android/make-call.md +5 -5
  28. package/resource/knowledge/callkit/core-sdk/flutter/answer-call.md +7 -7
  29. package/resource/knowledge/callkit/core-sdk/flutter/make-call.md +10 -10
  30. package/resource/knowledge/callkit/core-sdk/ios/answer-call.md +9 -9
  31. package/resource/knowledge/callkit/core-sdk/ios/make-call.md +7 -8
  32. package/resource/knowledge/callkit/core-sdk/uni-app/answer-call.md +2 -2
  33. package/resource/knowledge/callkit/core-sdk/uni-app/make-call.md +2 -2
  34. package/resource/knowledge/callkit/faq/android.md +4 -4
  35. package/resource/knowledge/callkit/faq/common.md +4 -4
  36. package/resource/knowledge/callkit/preset/harmonyos/integration.md +0 -4
  37. package/resource/knowledge/callkit/preset/uni-app/integration.md +10 -10
  38. package/resource/knowledge/chat/preset/android-view/integration.md +2 -6
  39. package/resource/knowledge/chat/preset/ios-uikit/integration.md +43 -40
  40. package/resource/knowledge/chat/preset/react/h5/integration.md +0 -5
  41. package/resource/knowledge/chat/preset/vue/features/message-input.md +4 -4
  42. package/resource/knowledge/chat/preset/vue/h5/integration.md +0 -5
  43. package/resource/knowledge/livekit/core-sdk/features/android/audience-list.md +3 -3
  44. package/resource/knowledge/livekit/core-sdk/features/android/live-list.md +3 -3
  45. package/resource/knowledge/livekit/core-sdk/features/flutter/audience-list.md +3 -3
  46. package/resource/knowledge/livekit/core-sdk/features/flutter/live-list.md +3 -3
  47. package/resource/knowledge/livekit/core-sdk/features/ios/audience-list.md +3 -3
  48. package/resource/knowledge/livekit/core-sdk/features/ios/live-list.md +3 -3
  49. package/resource/knowledge/livekit/core-sdk/features/uni-app/audience-list.md +3 -3
  50. package/resource/knowledge/livekit/core-sdk/features/uni-app/live-list.md +3 -3
  51. package/resource/knowledge/livekit/core-sdk/live/android/host-interaction.md +2 -2
  52. package/resource/knowledge/livekit/core-sdk/live/flutter/host-interaction.md +2 -2
  53. package/resource/knowledge/livekit/core-sdk/live/flutter/integration.md +2 -2
  54. package/resource/knowledge/livekit/core-sdk/live/ios/host-interaction.md +2 -2
  55. package/resource/knowledge/livekit/core-sdk/live/uni-app/co-guest-interaction.md +12 -12
  56. package/resource/knowledge/livekit/core-sdk/live/uni-app/host-interaction.md +4 -4
  57. package/resource/knowledge/livekit/core-sdk/live/uni-app/integration.md +9 -9
  58. package/resource/knowledge/livekit/core-sdk/voice/android/host-interaction.md +2 -2
  59. package/resource/knowledge/livekit/core-sdk/voice/ios/host-interaction.md +2 -2
  60. package/resource/knowledge/livekit/core-sdk/voice/uni-app/integration.md +5 -5
  61. package/resource/knowledge/push/config/donut.md +3 -3
  62. package/resource/knowledge/push/config/harmonyos.md +12 -12
  63. package/resource/knowledge/push/config/ios.md +2 -2
  64. package/resource/knowledge/push/integration/android.md +91 -1112
  65. package/resource/knowledge/push/integration/donut.md +8 -8
  66. package/resource/knowledge/push/integration/ios.md +9 -35
  67. package/resource/knowledge/push/integration/unity.md +3 -3
  68. package/resource/knowledge/push/integration/unreal-engine.md +7 -7
  69. package/resource/knowledge/roomkit/core-sdk/android/room-state.md +3 -3
  70. package/resource/knowledge/roomkit/core-sdk/android/schedule-room.md +9 -9
  71. package/resource/knowledge/roomkit/core-sdk/flutter/room-state.md +3 -3
  72. package/resource/knowledge/roomkit/core-sdk/ios/room-state.md +3 -3
  73. package/resource/knowledge/roomkit/core-sdk/vue/recording.md +3 -3
  74. package/resource/knowledge/roomkit/core-sdk/vue/virtual-background.md +3 -3
  75. package/resource/knowledge/roomkit/preset/ios/integration.md +3 -3
  76. package/resource/knowledge/roomkit/preset/uniapp-app/integration.md +52 -10
  77. package/server.js +42 -34
  78. package/tools/common/get_usersig.js +1 -1
  79. package/tools/common/present_framework_choice.js +5 -5
  80. package/tools/definitions/finalize_answer_def.js +17 -16
  81. package/tools/definitions/get_native_call_uikit_integration_def.js +25 -16
  82. package/tools/definitions/get_native_callkit_core_integration_def.js +37 -26
  83. package/tools/definitions/get_native_chat_uikit_integration_def.js +22 -13
  84. package/tools/definitions/get_native_live_uikit_integration_def.js +30 -21
  85. package/tools/definitions/get_native_livekit_core_integration_def.js +25 -16
  86. package/tools/definitions/get_usersig_def.js +20 -13
  87. package/tools/definitions/get_web_call_uikit_integration_def.js +21 -12
  88. package/tools/definitions/get_web_chat_uikit_integration_def.js +22 -13
  89. package/tools/definitions/get_web_live_uikit_integration_def.js +21 -12
  90. package/tools/definitions/get_web_room_core_integration_def.js +29 -20
  91. package/tools/definitions/get_web_room_uikit_integration_def.js +21 -12
  92. package/tools/definitions/integration-boundary.js +9 -5
  93. package/tools/definitions/present_framework_choice_def.js +21 -21
  94. package/tools/definitions/search_trtc_knowledge_def.js +48 -26
  95. package/tools/definitions/submit_feedback_def.js +18 -14
  96. package/utils/preflight-route.js +203 -185
  97. package/utils/report-cls-client.js +1 -1
  98. 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 View 体系(非 Compose),以源码方式开放集成。它提供会话列表、聊天、联系人、搜索、群组等完整 UI 能力。
5
+ TUIKit 采用数据驱动的响应式架构与原生 iOS UIKit 体系(非声明式 UI ),以源码方式开放集成。它提供会话列表、聊天、联系人、搜索、群组等完整 UI 能力。
6
6
 
7
7
  ### 前提条件
8
- - Xcode 15 及以上
8
+ - **Xcode**:16.0 或以上版本(推荐 Xcode 16.x 系列)。
9
9
 
10
- - iOS 14.0 及以上
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
- - SDKAppID:App 在控制台获取的 Chat 应用的 ID,为应用的唯一标识。
16
+ - SDKAppID:App 在控制台获取的 Chat 应用的 ID,为应用的唯一标识。
15
17
 
16
- - SDKSecretKey:应用的密钥。
18
+ - SDKSecretKey:应用的密钥。
17
19
 
18
20
  ## 集成并引入组件
19
21
 
20
22
  > **说明:**
21
- > Demo:[GitHub 完整 Demo](https://github.com/Tencent-RTC/TUIKit_iOS) 开箱即用,[5 分钟跑通聊天 + 音视频通话全功能](https://cloud.tencent.com/document/product/269/68228)。
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
- 从 GitHub 下载 [TUIKit iOS](https://github.com/Tencent-RTC/TUIKit_iOS) 源码:
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
- ├── app/ # 您的应用模块
40
+ ├── source/ # 您的工程代码
35
41
  ├── call/ # 音视频通话组件
36
42
  │ └── TUICallKit_Swift.podspec
37
43
  │ └── TUICallKit_Swift/
38
44
  ├── chat/ # Chat 源码
39
45
  │ ├── demo/ # 示例工程
40
- │ └── uikit/ # Chat 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/TUICallkit_Swift` 位于仓库根目录。模块目录可放在工程任意位置,只需在 `Podfile` 中设置正确的相对路径即可。
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
- # 补充如下内容 增加 ChatUIKit 和 TUICallKit_Swift 这两个依赖
56
- pod 'ChatUIKit', :path => 'chat/uikit/ChatUIKit.podspec'
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 ChatUIKit
95
+ import TUIChatKit
88
96
  import UIKit
89
97
 
90
- let youSdkAppID: Int32 = 10_000_000_00 // 填写你的实际sdkAppID
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: youSdkAppID, userID: testUserID, userSig: userSig) { [weak self] result in
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 ChatUIKit
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 ChatUIKit
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) { [weak self] in
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 ChatUIKit
192
+ import TUIChatKit
186
193
  import UIKit
187
194
 
188
195
  func showContacts() {
189
196
  let contactsPage = ContactsPage(
190
- onContactClick: { [weak self] item in
191
- // 点击好友列表中的某个联系人回调,可在该回调中进入单聊
192
- // self?.showChat(with: item.userID, title: item.title)
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] item in
195
- // 点击群列表中的某个群的回调,可在该回调中进入群聊
196
- // self?.showGroupChat(with: item.userID, title: item.title)
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 默认集成了音视频通话功能,如果你不需要音视频通话功能。可以在 步骤 3 创建聊天界面 中关闭音视频通话开关,代码如下所示:
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) { [weak self] in
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) { [weak self] in
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
- - **collapsed**:收起模式,点击后展开选项。
49
+ - **collapsed**:收起模式,点击后展开选项。
50
50
 
51
- - **expanded**:展开模式,直接显示所有选项。
51
+ - **expanded**:展开模式,直接显示所有选项。
52
52
 
53
53
  ### actions
54
54
  - 类型:`MessageInputActions`
@@ -57,9 +57,9 @@ MessageInput 是一个功能完整的消息输入组件,专为 Vue3 应用设
57
57
 
58
58
  - 注意:
59
59
 
60
- - 每一个 BuiltInAction 都支持默认插槽从而改变 Trigger 的 UI 展示。更加灵活的输入工具自定义建议使用 `headerToolbar` 插槽。
60
+ - 每一个 BuiltInAction 都支持默认插槽从而改变 Trigger 的 UI 展示。更加灵活的输入工具自定义建议使用 `headerToolbar` 插槽。
61
61
 
62
- - 显示音视频通话的按钮并不意味着可以发起通话,发起音视频通话的前提是集成了 CallKit,集成 CallKit 可以参考 集成 TUICallKit。
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
- - 房间内每秒的消息总量有上限,单房间消息频控是**每秒 40 条消息**。
266
+ - 房间内每秒的消息总量有上限,单房间消息频控是**每秒 40 条消息**。
267
267
 
268
- - **关键点: 在"弹幕风暴"或礼物刷屏等消息流量极高的场景下,如果房间内的消息速率超过了 40条/秒 的阈值,为了保证核心消息(例如弹幕)的送达,人数变更的消息可能会被频控策略丢弃**。
268
+ - **关键点: 在"弹幕风暴"或礼物刷屏等消息流量极高的场景下,如果房间内的消息速率超过了 40条/秒 的阈值,为了保证核心消息(例如弹幕)的送达,人数变更的消息可能会被频控策略丢弃**。
269
269
 
270
270
  **这对开发者意味着什么?**
271
271
 
@@ -514,10 +514,10 @@ class YourAudienceActivity : AppCompatActivity() {
514
514
 
515
515
  - **数量与大小限制**:
516
516
 
517
- - 单个房间最多支持 **10** 个 key。
517
+ - 单个房间最多支持 **10** 个 key。
518
518
 
519
- - 每个 key 的长度不超过 **50 字节**,每个 value 的长度不超过 **2KB**。
519
+ - 每个 key 的长度不超过 **50 字节**,每个 value 的长度不超过 **2KB**。
520
520
 
521
- - 单个房间所有 value 的总大小不超过 **16KB**。
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
- - 房间内每秒的消息总量有上限,单房间消息频控是**每秒 40 条消息**。
256
+ - 房间内每秒的消息总量有上限,单房间消息频控是**每秒 40 条消息**。
257
257
 
258
- - **关键点:**在"弹幕风暴"或礼物刷屏等消息流量极高的场景下,如果房间内的消息速率超过了 40条/秒 的阈值,为了保证核心消息(例如弹幕)的送达,**人数变更的消息可能会被频控策略丢弃**。
258
+ - **关键点:**在"弹幕风暴"或礼物刷屏等消息流量极高的场景下,如果房间内的消息速率超过了 40条/秒 的阈值,为了保证核心消息(例如弹幕)的送达,**人数变更的消息可能会被频控策略丢弃**。
259
259
 
260
260
  **这对开发者意味着什么?**
261
261
 
@@ -718,10 +718,10 @@ class _ProductCardWidgetState extends State<ProductCardWidget> {
718
718
 
719
719
  - **数量与大小限制:**
720
720
 
721
- - 单个房间最多支持 **10** 个 key。
721
+ - 单个房间最多支持 **10** 个 key。
722
722
 
723
- - 每个 key 的长度不超过 **50 字节**,每个 value 的长度不超过 **2KB**。
723
+ - 每个 key 的长度不超过 **50 字节**,每个 value 的长度不超过 **2KB**。
724
724
 
725
- - 单个房间所有 value 的总大小不超过 **16KB**。
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
- - 房间内每秒的消息总量有上限,单房间消息频控是**每秒 40 条消息**。
259
+ - 房间内每秒的消息总量有上限,单房间消息频控是**每秒 40 条消息**。
260
260
 
261
- - **关键点:**在“弹幕风暴”或礼物刷屏等消息流量极高的场景下,如果房间内的消息速率超过了 40条/秒 的阈值,为了保证核心消息(例如弹幕)的送达,**人数变更的消息可能会被频控策略丢弃**。
261
+ - **关键点:**在“弹幕风暴”或礼物刷屏等消息流量极高的场景下,如果房间内的消息速率超过了 40条/秒 的阈值,为了保证核心消息(例如弹幕)的送达,**人数变更的消息可能会被频控策略丢弃**。
262
262
 
263
263
  **这对开发者意味着什么?**
264
264
 
@@ -395,10 +395,10 @@ class YourAudienceViewController: UIViewController {
395
395
 
396
396
  - **数量与大小限制**:
397
397
 
398
- - 单个房间最多支持 **10** 个 key。
398
+ - 单个房间最多支持 **10** 个 key。
399
399
 
400
- - 每个 key 的长度不超过 **50 字节**,每个 value 的长度不超过 **2KB**。
400
+ - 每个 key 的长度不超过 **50 字节**,每个 value 的长度不超过 **2KB**。
401
401
 
402
- - 单个房间所有 value 的总大小不超过 **16KB**。
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
- - 房间内每秒的消息总量有上限,单房间消息频控是**每秒 40 条消息**。
211
+ - 房间内每秒的消息总量有上限,单房间消息频控是**每秒 40 条消息**。
212
212
 
213
- - **关键点:**在“弹幕风暴”或礼物刷屏等消息流量极高的场景下,如果房间内的消息速率超过了 40条/秒 的阈值,为了保证核心消息(例如弹幕)的送达,**人数变更的消息可能会被频控策略丢弃**。
213
+ - **关键点:**在“弹幕风暴”或礼物刷屏等消息流量极高的场景下,如果房间内的消息速率超过了 40条/秒 的阈值,为了保证核心消息(例如弹幕)的送达,**人数变更的消息可能会被频控策略丢弃**。
214
214
 
215
215
  **这对开发者意味着什么?**
216
216
 
@@ -286,10 +286,10 @@ watch( currentLive, (newVal, oldVal) => {
286
286
 
287
287
  - **数量与大小限制**:
288
288
 
289
- - 单个房间最多支持 **10** 个 key。
289
+ - 单个房间最多支持 **10** 个 key。
290
290
 
291
- - 每个 key 的长度不超过 **50 字节**,每个 value 的长度不超过 **2KB**。
291
+ - 每个 key 的长度不超过 **50 字节**,每个 value 的长度不超过 **2KB**。
292
292
 
293
- - 单个房间所有 value 的总大小不超过 **16KB**。
293
+ - 单个房间所有 value 的总大小不超过 **16KB**。
294
294
 
295
295
  - **冲突解决**: `metaData` 的更新机制是“后来者覆盖”。如果多个管理员在短时间内修改同一个 key,最后一次的修改会生效。建议在业务设计上避免多人同时修改同一个关键信息。
@@ -508,9 +508,9 @@
508
508
  #### 关键流程说明
509
509
  1. ​**获取 PK 状态​**:
510
510
 
511
- - 回调配置​:您可以通过配置 PK 状态回调,由 LiveKit 后台在 PK 开始、结束时,主动通知您的系统 PK 状态。
511
+ - 回调配置​:您可以通过配置 PK 状态回调,由 LiveKit 后台在 PK 开始、结束时,主动通知您的系统 PK 状态。
512
512
 
513
- - 主动查询​:您的后台服务可主动调用 PK 状态查询 接口,随时查询当前 PK 状态。
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
- - 回调配置​:您可以通过配置 PK 状态回调,由 LiveKit 后台在 PK 开始、结束时,主动通知您的系统 PK 状态。
812
+ - 回调配置​:您可以通过配置 PK 状态回调,由 LiveKit 后台在 PK 开始、结束时,主动通知您的系统 PK 状态。
813
813
 
814
- - 主动查询​:您的后台服务可主动调用 PK 状态查询 接口,随时查询当前 PK 状态。
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
- - **预览态:**使用 `VideoView` + `setLocalVideoView`(直接渲染本地采集数据)。
142
+ - **预览态:**使用 `VideoView` + `setLocalVideoView`(直接渲染本地采集数据)。
143
143
 
144
- - **直播态:**使用 `LiveCoreWidget`(渲染直播间流数据)。
144
+ - **直播态:**使用 `LiveCoreWidget`(渲染直播间流数据)。
145
145
 
146
146
  ``` java
147
147
  // 3.1 封装预览视图组件
@@ -441,9 +441,9 @@
441
441
  #### 关键流程说明
442
442
  1. ​**获取 PK 状态​**:
443
443
 
444
- - 回调配置​:您可以通过配置 PK 状态回调,由 LiveKit 后台在 PK 开始、结束时,主动通知您的系统 PK 状态。
444
+ - 回调配置​:您可以通过配置 PK 状态回调,由 LiveKit 后台在 PK 开始、结束时,主动通知您的系统 PK 状态。
445
445
 
446
- - 主动查询​:您的后台服务可主动调用 PK 状态查询 接口,随时查询当前 PK 状态。
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
- - 在您的 `components` 目录下,创建一个新文件 `ParticipantOverlay.vue`。
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
- - 使用 `Flex` 布局:从页面的最外层根 `<view>` 开始,使用 `flex: 1` 样式,让容器逐层向下“撑满”可用空间。
452
+ - 使用 `Flex` 布局:从页面的最外层根 `<view>` 开始,使用 `flex: 1` 样式,让容器逐层向下“撑满”可用空间。
453
453
 
454
- - 使用绝对定位:对于需要覆盖的层(例如 `LiveCoreView` 和自定义的 `ParticipantOverlay`),将其父容器设置为 `position: relative` 和 `flex: 1`,然后将这些覆盖层设置为 `position: absolute` 并配合 `top: 0; left: 0; right: 0; bottom: 0;`,让它们从四个方向贴紧父容器边缘,这是在 `nvue` 中实现“占满”效果最可靠的方法。
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
- - 确保 `scale` 值正确计算:必须在父页面中正确计算 `scale` 值。通常的计算方式是:`scaleX = 屏幕实际宽度 / 设计稿宽度。`
463
+ - 确保 `scale` 值正确计算:必须在父页面中正确计算 `scale` 值。通常的计算方式是:`scaleX = 屏幕实际宽度 / 设计稿宽度。`
464
464
 
465
- - 确保 `scale` 值正确传递:将计算好的 `scale` 对象传递给 `<ParticipantOverlay>` 组件。
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
- - 校验 `liveID`:确保在调用 `useCoGuestState(liveID)` 和所有相关方法(例如 `applyForSeat({ liveID, ... })`)时,使用的 `liveID` 是当前直播间真实且有效的 `ID`。
474
+ - 校验 `liveID`:确保在调用 `useCoGuestState(liveID)` 和所有相关方法(例如 `applyForSeat({ liveID, ... })`)时,使用的 `liveID` 是当前直播间真实且有效的 `ID`。
475
475
 
476
- - 保持 `liveID` 一致:在整个页面的生命周期中,所有与 `CoGuestState` 相关的操作都必须使用同一个 `liveID`。
476
+ - 保持 `liveID` 一致:在整个页面的生命周期中,所有与 `CoGuestState` 相关的操作都必须使用同一个 `liveID`。
477
477
 
478
478
  ### 无法接收到连麦相关的事件通知
479
479
  - 问题描述: 观众端收不到主播的邀请(`onHostInvitationReceived`),或者主播端收不到观众的申请(`onGuestApplicationReceived`)。
@@ -482,9 +482,9 @@
482
482
 
483
483
  - 解决方案: 确保在页面初始化时(例如在 `onMounted` 钩子中),根据角色(主播/观众)调用相应的方法来注册监听器:
484
484
 
485
- - 主播端:调用 `addCoGuestHostListener` 来监听 `onGuestApplicationReceived`、`onHostInvitationResponded` 等事件。
485
+ - 主播端:调用 `addCoGuestHostListener` 来监听 `onGuestApplicationReceived`、`onHostInvitationResponded` 等事件。
486
486
 
487
- - 观众端:调用 `addCoGuestGuestListener` 来监听 `onGuestApplicationResponded`、`onHostInvitationReceived` 等事件。
487
+ - 观众端:调用 `addCoGuestGuestListener` 来监听 `onGuestApplicationResponded`、`onHostInvitationReceived` 等事件。
488
488
 
489
489
  ### 连麦成功后,对方看不到我的画面或听不到我的声音
490
490
  - 问题描述: 作为观众,上麦申请被主播同意后,虽然麦位列表中有我,但我的视频画面没有出现,或者麦克风图标显示为关闭状态。
@@ -133,9 +133,9 @@
133
133
 
134
134
  这个组件是我们的“UI 贴纸”,它只负责根据数据渲染 UI,不关心视频。
135
135
 
136
- - 在您的 `components` 目录下,创建一个新文件 `ParticipantOverlay.vue`。
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
- - Android 平台(`android` 节点):在 `permissions` 数组中,请确保包含以下权限:
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
- - iOS 平台(ios 节点):在 `privacyDescription` 对象中,请确保包含以下描述:
22
+ - iOS 平台(ios 节点):在 `privacyDescription` 对象中,请确保包含以下描述:
23
23
 
24
24
  ``` json
25
25
  "NSCameraUsageDescription" : "应用需要访问您的相机以进行直播",
@@ -282,26 +282,26 @@ onMounted(() => {
282
282
 
283
283
  - 解决方案:
284
284
 
285
- - 使用 `cover-view`:uni-app 提供了 `cover-view` 和 `cover-image`,它们可以覆盖在原生组件之上,但样式支持有限。
285
+ - 使用 `cover-view`:uni-app 提供了 `cover-view` 和 `cover-image`,它们可以覆盖在原生组件之上,但样式支持有限。
286
286
 
287
- - 切换到 `nvue`:如果页面交互复杂,需要大量元素覆盖在原生组件上,建议将整个页面用 `nvue` 来编写。`nvue` 的所有组件都是原生渲染,不存在层级问题。
287
+ - 切换到 `nvue`:如果页面交互复杂,需要大量元素覆盖在原生组件上,建议将整个页面用 `nvue` 来编写。`nvue` 的所有组件都是原生渲染,不存在层级问题。
288
288
 
289
289
  ### nvue 与 vue 的抉择问题
290
290
  - 问题:不知道什么时候该用 `nvue`,什么时候用 `vue`。
291
291
 
292
292
  - 选型建议:
293
293
 
294
- - 默认用 `vue`:适合绝大多数业务和 UI 复杂的页面。
294
+ - 默认用 `vue`:适合绝大多数业务和 UI 复杂的页面。
295
295
 
296
- - 当遇到长列表滑动卡顿、复杂动画掉帧、需要覆盖原生组件等性能或层级问题时,再考虑将该页面重构为 `nvue`。直播、地图这类页面是 nvue 的绝佳应用场景。
296
+ - 当遇到长列表滑动卡顿、复杂动画掉帧、需要覆盖原生组件等性能或层级问题时,再考虑将该页面重构为 `nvue`。直播、地图这类页面是 nvue 的绝佳应用场景。
297
297
 
298
298
  ### 原生能力集成问题
299
299
  - 问题:插件调用失败或无响应。
300
300
 
301
301
  - 解决方案:
302
302
 
303
- - 必须打包自定义基座:在开发调试原生插件时,不能使用标准基座,必须通过 `HBuilderX` > 运行 > 运行到手机或模拟器 > 制作自定义基座,然后选择这个自定义基座来运行。
303
+ - 必须打包自定义基座:在开发调试原生插件时,不能使用标准基座,必须通过 `HBuilderX` > 运行 > 运行到手机或模拟器 > 制作自定义基座,然后选择这个自定义基座来运行。
304
304
 
305
- - 检查权限:如本文档“准备工作”中所述,`manifest.json` 必须声明相机、麦克风等权限。
305
+ - 检查权限:如本文档“准备工作”中所述,`manifest.json` 必须声明相机、麦克风等权限。
306
306
 
307
- - 查看原生日志:这是终极调试手段。通过 `Android Studio (Logcat)` 或 `Xcode (Console)` 查看设备的原生日志,通常能发现最直接的错误信息。
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
- - 回调配置​:您可以通过配置 PK 状态回调,由 LiveKit 后台在 PK 开始、结束时,主动通知您的系统 PK 状态。
438
+ - 回调配置​:您可以通过配置 PK 状态回调,由 LiveKit 后台在 PK 开始、结束时,主动通知您的系统 PK 状态。
439
439
 
440
- - 主动查询​:您的后台服务可主动调用 PK 状态查询 接口,随时查询当前 PK 状态。
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
- - 回调配置​:您可以通过配置 PK 状态回调,由 LiveKit 后台在 PK 开始、结束时,主动通知您的系统 PK 状态。
534
+ - 回调配置​:您可以通过配置 PK 状态回调,由 LiveKit 后台在 PK 开始、结束时,主动通知您的系统 PK 状态。
535
535
 
536
- - 主动查询​:您的后台服务可主动调用 PK 状态查询 接口,随时查询当前 PK 状态。
536
+ - 主动查询​:您的后台服务可主动调用 PK 状态查询 接口,随时查询当前 PK 状态。
537
537
 
538
538
  2. **PK 分数计算**​:您的后台服务根据业务规则(如上述示例),计算 PK 分数增量。
539
539