@tencentcloud/sdk-mcp 1.6.8 → 1.7.1
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 +36 -0
- package/README.md +59 -35
- package/knowledge/build-index.js +28 -4
- package/knowledge/chunker.js +82 -14
- package/knowledge/chunking-policy.js +100 -0
- package/knowledge/doc-url-resolver.js +70 -19
- package/knowledge/frontmatter-meta.js +167 -0
- package/knowledge/path-meta.js +28 -6
- package/knowledge/search/exact-lookup.js +126 -125
- package/knowledge/search/filter-pool.js +12 -29
- package/knowledge/search/framework-fallback.js +22 -0
- package/knowledge/search/intent-router.js +29 -0
- package/knowledge/search/l1-enrich.js +159 -0
- package/knowledge/search/query-normalizer.js +63 -3
- package/knowledge/search/search-core.js +410 -0
- package/knowledge/search/search-knowledge.js +419 -377
- package/knowledge/search/search-message.js +88 -0
- package/knowledge/search/search-pass.js +428 -0
- package/knowledge/search/search-types.js +1 -0
- package/knowledge/search/url-row-idf.js +120 -0
- package/knowledge/search/url-row-scorer.js +337 -0
- package/package.json +3 -1
- package/resource/index/manifest.json +1 -1
- package/resource/integration/callkit/preset/flutter/integration.md +7 -3
- package/resource/integration/callkit/preset/ios/integration.md +1 -0
- package/resource/integration/chat/preset/android/integration.md +1 -0
- package/resource/integration/chat/preset/flutter/integration.md +111 -10
- package/resource/integration/chat/preset/ios/integration.md +1 -0
- package/resource/integration/chat/preset/react/integration.md +1 -0
- package/resource/integration/chat/preset/uni-app/integration.md +1 -0
- package/resource/integration/chat/preset/vue/integration.md +1 -0
- package/resource/integration/livekit/preset/live/android/prepare-integration.md +1 -0
- package/resource/integration/livekit/preset/live/vue/live-player-desk-integration.md +12 -10
- package/resource/integration/livekit/preset/live/vue/live-pusher-integration.md +14 -14
- package/resource/integration/roomkit/preset/vue/integration.md +1 -0
- package/resource/knowledge/callkit/best-practice/callkit-miniprogram/uniapp-shrink.md +64 -0
- package/resource/knowledge/callkit/best-practice/common/call-autoplay-blocked.md +81 -0
- package/resource/knowledge/callkit/best-practice/common/call-message-in-chat.md +84 -0
- package/resource/knowledge/callkit/best-practice/common/call-vs-calls.md +114 -0
- package/resource/knowledge/callkit/best-practice/common/callengine-call-flow.md +128 -0
- package/resource/knowledge/callkit/best-practice/common/callengine-log-level.md +72 -0
- package/resource/knowledge/callkit/best-practice/common/callkit-get-engine-instance.md +87 -0
- package/resource/knowledge/callkit/best-practice/common/callkit-get-roomid.md +83 -0
- package/resource/knowledge/callkit/best-practice/common/callkit-limitations.md +37 -0
- package/resource/knowledge/callkit/best-practice/common/callkit-user-register-and-kicked.md +103 -0
- package/resource/knowledge/callkit/core-sdk/android/answer-call.md +1 -0
- package/resource/knowledge/callkit/core-sdk/android/make-call.md +1 -0
- package/resource/knowledge/callkit/core-sdk/flutter/answer-call.md +1 -0
- package/resource/knowledge/callkit/core-sdk/flutter/make-call.md +1 -0
- package/resource/knowledge/callkit/core-sdk/ios/answer-call.md +1 -0
- package/resource/knowledge/callkit/core-sdk/ios/make-call.md +1 -0
- package/resource/knowledge/callkit/core-sdk/ios/offline-push.md +1 -1
- package/resource/knowledge/callkit/core-sdk/uni-app/answer-call.md +1 -0
- package/resource/knowledge/callkit/core-sdk/uni-app/make-call.md +1 -0
- package/resource/knowledge/callkit/faq/flutter.md +1 -0
- package/resource/knowledge/callkit/faq/uniapp-app.md +1 -0
- package/resource/knowledge/callkit/preset/react/api.md +1 -150
- package/resource/knowledge/callkit/preset/vue/api.md +1 -38
- package/resource/knowledge/chat/best-practice/common/avchatroom-message-loss-diagnosis.md +71 -0
- package/resource/knowledge/chat/best-practice/common/group-conversation-cleanup-on-system-notice.md +67 -0
- package/resource/knowledge/chat/best-practice/common/image-message-url-lifecycle.md +63 -0
- package/resource/knowledge/chat/best-practice/common/login-repeat-2025-diagnosis.md +65 -0
- package/resource/knowledge/chat/best-practice/common/message-read-report-and-receipt.md +72 -0
- package/resource/knowledge/chat/best-practice/common/message-receive-event.md +70 -0
- package/resource/knowledge/chat/best-practice/common/message-risk-error-and-render.md +69 -0
- package/resource/knowledge/chat/best-practice/common/message-unread-count.md +71 -0
- package/resource/knowledge/chat/best-practice/miniprogram/audio-message-send.md +118 -0
- package/resource/knowledge/chat/best-practice/miniprogram/login-timeout-2801-diagnosis.md +67 -0
- package/resource/knowledge/chat/best-practice/miniprogram/media-upload-fail-diagnosis.md +68 -0
- package/resource/knowledge/chat/best-practice/web/audio-message-send.md +123 -0
- package/resource/knowledge/chat/preset/android/features/conversation-list.md +1 -0
- package/resource/knowledge/chat/preset/android/features/language.md +1 -0
- package/resource/knowledge/chat/preset/android/features/message-input.md +1 -0
- package/resource/knowledge/chat/preset/android/features/message-list.md +1 -0
- package/resource/knowledge/chat/preset/android-view/integration.md +1 -0
- package/resource/knowledge/chat/preset/flutter/features/conversation-list.md +1 -0
- package/resource/knowledge/chat/preset/flutter/features/message-input.md +1 -0
- package/resource/knowledge/chat/preset/flutter/features/message-list.md +1 -0
- package/resource/knowledge/chat/preset/ios/features/conversation-list.md +1 -0
- package/resource/knowledge/chat/preset/ios/features/message-input.md +1 -0
- package/resource/knowledge/chat/preset/ios/features/message-list.md +1 -0
- package/resource/knowledge/chat/preset/ios-uikit/integration.md +1 -0
- package/resource/knowledge/chat/preset/react/features/conversation-preview.md +1 -0
- package/resource/knowledge/chat/preset/react/features/message-input.md +61 -3
- package/resource/knowledge/chat/preset/react/features/message-list.md +7 -0
- package/resource/knowledge/chat/preset/vue/features/message-input.md +58 -5
- package/resource/knowledge/chat/preset/vue/features/message-list.md +7 -0
- package/resource/knowledge/chat/urls/product.md +8 -8
- package/resource/knowledge/chat/urls/restapi.md +3 -3
- package/resource/knowledge/chat/urls/sdk/android.md +5 -5
- package/resource/knowledge/chat/urls/sdk/flutter.md +5 -5
- package/resource/knowledge/chat/urls/sdk/ios.md +5 -5
- package/resource/knowledge/chat/urls/sdk/web.md +8 -8
- package/resource/knowledge/chat/urls/webhook.md +11 -17
- package/resource/knowledge/livekit/best-practice/android/voice-room-anchor-start.md +124 -0
- package/resource/knowledge/livekit/best-practice/common/admin-take-seat.md +73 -0
- package/resource/knowledge/livekit/best-practice/common/audience-leave-live.md +81 -0
- package/resource/knowledge/livekit/best-practice/common/voice-room-no-audio-troubleshoot.md +100 -0
- package/resource/knowledge/livekit/best-practice/common/voice-room-seat-list-change.md +65 -0
- package/resource/knowledge/livekit/best-practice/flutter/voice-room-anchor-start.md +126 -0
- package/resource/knowledge/livekit/best-practice/ios/voice-room-anchor-start.md +130 -0
- package/resource/knowledge/push/config/harmonyos.md +1 -1
- package/resource/knowledge/push/config/ios.md +2 -2
- package/resource/knowledge/push/config/react-native.md +1 -0
- package/resource/knowledge/push/config/unity.md +1 -0
- package/resource/knowledge/push/config/unreal-engine.md +1 -0
- package/resource/knowledge/push/integration/android.md +17 -16
- package/resource/knowledge/push/integration/donut.md +2 -2
- package/resource/knowledge/push/integration/flutter.md +4 -3
- package/resource/knowledge/push/integration/harmonyos.md +1 -1
- package/resource/knowledge/push/integration/ios.md +4 -3
- package/resource/knowledge/push/integration/react-native.md +1 -1
- package/resource/knowledge/push/integration/uni-app.md +1 -0
- package/resource/knowledge/push/integration/unity.md +4 -4
- package/resource/knowledge/push/integration/unreal-engine.md +37 -35
- package/resource/knowledge/roomkit/best-practice/common/room-ghost-member.md +75 -0
- package/resource/knowledge/roomkit/best-practice/common/room-limit-and-multi.md +88 -0
- package/resource/knowledge/roomkit/best-practice/common/room-screen-share-preview.md +87 -0
- package/resource/knowledge/roomkit/best-practice/common/room-status-after-all-leave.md +73 -0
- package/resource/knowledge/roomkit/best-practice/vue/room-uikit-vs-atomicx.md +115 -0
- package/resource/knowledge/roomkit/core-sdk/android/call-user-to-room.md +1 -0
- package/resource/knowledge/roomkit/core-sdk/android/room-participant-state.md +1 -0
- package/resource/knowledge/roomkit/core-sdk/android/room-state.md +1 -0
- package/resource/knowledge/roomkit/core-sdk/android/schedule-room.md +1 -0
- package/resource/knowledge/roomkit/core-sdk/flutter/call-user-to-room.md +1 -0
- package/resource/knowledge/roomkit/core-sdk/flutter/room-participant-state.md +1 -0
- package/resource/knowledge/roomkit/core-sdk/flutter/room-state.md +1 -0
- package/resource/knowledge/roomkit/core-sdk/flutter/schedule-room.md +1 -0
- package/resource/knowledge/roomkit/core-sdk/ios/call-user-to-room.md +1 -0
- package/resource/knowledge/roomkit/core-sdk/ios/room-participant-state.md +1 -0
- package/resource/knowledge/roomkit/core-sdk/ios/room-state.md +1 -0
- package/resource/knowledge/roomkit/core-sdk/ios/schedule-room.md +1 -0
- package/resource/knowledge/roomkit/core-sdk/vue/room-view.md +1 -0
- package/resource/knowledge/roomkit/preset/react/integration.md +1 -0
- package/resource/knowledge/rtcengine/web/plugin/30-advanced-cross-room-link.md +2 -0
- package/resource/knowledge/rtcengine/web/plugin/39-advanced-video-decoder.md +2 -0
- package/resource/knowledge/trtc/android/TRTCCloud.md +1 -0
- package/resource/knowledge/trtc/c++/ITRTCCloud.md +1 -0
- package/resource/knowledge/trtc/ios/TRTCCloud.md +1 -0
- package/server.js +9 -4
- package/streamable-http.js +19 -54
- package/tools/common/search_trtc_knowledge.js +24 -12
- package/tools/definitions/finalize_answer_def.js +2 -2
- package/tools/definitions/integration-boundary.js +2 -1
- package/tools/definitions/search_trtc_knowledge_def.js +5 -3
- package/utils/fetch-doc-content.js +198 -0
- package/utils/preflight-route.js +197 -0
- package/utils/report-cls-client.js +1 -1
- package/utils/report-es-client.js +1 -1
- package/cursor-setting.png +0 -0
- package/mcp-server-prompt.png +0 -0
- package/resource/knowledge/callkit/best-practice/web/callengine-invitation.md +0 -80
- package/resource/knowledge/callkit/best-practice/web/callengine-log-control.md +0 -20
- package/resource/knowledge/callkit/best-practice/web/callkit-call-vs-calls.md +0 -116
- package/resource/knowledge/callkit/preset/react/uikit-api-reference.md +0 -469
- package/resource/knowledge/callkit/preset/vue/uikit-api-reference.md +0 -581
- package/resource/knowledge/callkit/preset/web/api.md +0 -79
- package/resource/knowledge/chat/best-practice/web/image-message-url-handling.md +0 -16
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## 前提条件
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
请确认已 开通 Push 服务 并按需完成 **Android 厂商配置**(小米 / 华为 / OPPO / vivo / 荣耀 / 魅族 / Google FCM),获取到了下列信息:
|
|
6
6
|
|
|
7
7
|
|**资源**|**获取位置**|**用途**|
|
|
8
8
|
|---------|---------|---------|
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
|
|
20
20
|
## AI 集成
|
|
21
21
|
|
|
22
|
-
通过 npx 安装 [@tencent-rtc/trtc-push-skill](https://www.npmjs.com/package/@tencent-rtc/trtc-push-skill/v/1.0.1#%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) 到本地 AI IDE 中,辅助完成 TIMPush
|
|
22
|
+
通过 npx 安装 [@tencent-rtc/trtc-push-skill](https://www.npmjs.com/package/@tencent-rtc/trtc-push-skill/v/1.0.1#%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) 到本地 AI IDE 中,辅助完成 TIMPush 离线推送集成。安装后,您可以直接向 AI 输入“集成 Android 离线推送”“帮我集成 Android TIMPush”等需求,AI 将根据项目类型引导您完成环境检测、厂商通道配置、凭据填写、代码接入和验证等步骤。
|
|
23
23
|
|
|
24
24
|
> **注意:**
|
|
25
25
|
> 使用 Push Skill AI 集成不是全自动流程,依然需要开发者在厂商配置控制台、腾讯云控制台等配置 Push 相关信息。具体的配置方法请参考下文相关章节。
|
|
@@ -27,11 +27,11 @@
|
|
|
27
27
|
|
|
28
28
|
## 集成 TIMPush
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
如果您想手动集成,请按下述操作步骤依次完成放置配置文件、配置 Gradle、补充 Manifest 与混淆。
|
|
31
31
|
|
|
32
32
|
### 下载并添加 TIMPush 配置文件
|
|
33
33
|
|
|
34
|
-
下载后,将该文件添加到应用模块的 `assets` 目录。推荐存储路径:`app/src/main/assets/timpush-configs.json`,其中 app
|
|
34
|
+
下载后,将该文件添加到应用模块的 `assets` 目录。推荐存储路径:`app/src/main/assets/timpush-configs.json`,其中 app 是您项目的应用模块,可替换成实际名称。如果工程中没有 `assets` 目录,请在 `src/main/` 下手动创建。
|
|
35
35
|
|
|
36
36
|
> **注意:**
|
|
37
37
|
> TIMPush 注册推送时会读取该文件中的厂商证书配置,不要放在 MainActivity 同级目录、工程根目录或 res 目录。如果文件缺失或放错目录,SDK 无法获得对应厂商通道配置,可能导致注册或收消息失败。
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
|荣耀|`mcs-services.json`|在荣耀开发者服务平台下载。修改项目、应用信息或开发服务设置后,需要重新下载。|
|
|
47
47
|
|Google FCM|`google-services.json`|在 Firebase 控制台下载。|
|
|
48
48
|
|
|
49
|
-
推荐放置路径如下(与应用模块的 `build.gradle` / `build.gradle.kts` 同级),其中 app
|
|
49
|
+
推荐放置路径如下(与应用模块的 `build.gradle` / `build.gradle.kts` 同级),其中 app 是您项目的应用模块,可替换成实际名称:
|
|
50
50
|
``` text
|
|
51
51
|
app/mcs-services.json # 荣耀
|
|
52
52
|
app/google-services.json # Google FCM
|
|
@@ -129,7 +129,7 @@ dependencyResolutionManagement {
|
|
|
129
129
|
|
|
130
130
|
【Gradle 7.0 版本】
|
|
131
131
|
|
|
132
|
-
Gradle 7.0 版本通常使用 Groovy DSL
|
|
132
|
+
Gradle 7.0 版本通常使用 Groovy DSL。如您的工程使用 Kotlin DSL,请将单引号改为双引号,`url "..."` 改为 `url = uri("...")`。
|
|
133
133
|
1. 在项目级 `build.gradle` 的 `buildscript > repositories` 中添加插件仓库。
|
|
134
134
|
|
|
135
135
|
``` groovy
|
|
@@ -165,7 +165,7 @@ dependencyResolutionManagement {
|
|
|
165
165
|
|
|
166
166
|
【Gradle 7.0 以下版本】
|
|
167
167
|
|
|
168
|
-
Gradle 7.0 以下版本通常使用 Groovy DSL
|
|
168
|
+
Gradle 7.0 以下版本通常使用 Groovy DSL。如您的工程使用 Kotlin DSL,请将单引号改为双引号,`url "..."` 改为 `url = uri("...")`。
|
|
169
169
|
|
|
170
170
|
在项目级 `build.gradle` 的 `buildscript > repositories` 和 `allprojects > repositories` 中添加仓库。
|
|
171
171
|
``` groovy
|
|
@@ -278,7 +278,7 @@ buildscript {
|
|
|
278
278
|
|
|
279
279
|
【Gradle 7.0 及以下】
|
|
280
280
|
|
|
281
|
-
|
|
281
|
+
如果您已在上一节「配置 Gradle 仓库」中按照 Gradle 7.0 或 Gradle 7.0 以下示例配置了 `buildscript > repositories` 和 `buildscript > dependencies`,可以跳过本节的项目级插件依赖配置。
|
|
282
282
|
|
|
283
283
|
如果尚未配置,请回到上一节,根据当前 Gradle 版本补充 `buildscript` 中的仓库和插件 classpath。
|
|
284
284
|
|
|
@@ -300,7 +300,7 @@ plugins {
|
|
|
300
300
|
}
|
|
301
301
|
```
|
|
302
302
|
|
|
303
|
-
|
|
303
|
+
如果您的应用级 `build.gradle` 使用 `apply plugin` 写法,也可以写成:
|
|
304
304
|
``` groovy
|
|
305
305
|
apply plugin: 'com.google.gms.google-services'
|
|
306
306
|
apply plugin: 'com.huawei.agconnect'
|
|
@@ -319,7 +319,7 @@ plugins {
|
|
|
319
319
|
}
|
|
320
320
|
```
|
|
321
321
|
|
|
322
|
-
|
|
322
|
+
如果您的应用级 `build.gradle.kts` 使用 `apply` 写法,也可以写成:
|
|
323
323
|
``` kotlin
|
|
324
324
|
apply(plugin = "com.google.gms.google-services")
|
|
325
325
|
apply(plugin = "com.huawei.agconnect")
|
|
@@ -509,7 +509,7 @@ public class App extends Application {
|
|
|
509
509
|
|
|
510
510
|
private void registerTIMPush() {
|
|
511
511
|
int sdkAppId = 0; // TODO: Replace with your SDKAppID.
|
|
512
|
-
String appKey = "
|
|
512
|
+
String appKey = "您的客户端密钥"; // TODO: Replace with your Push Key.
|
|
513
513
|
|
|
514
514
|
TIMPushManager.getInstance().registerPush(this, sdkAppId, appKey, new TIMPushCallback<Object>() {
|
|
515
515
|
@Override
|
|
@@ -542,7 +542,7 @@ class App : Application() {
|
|
|
542
542
|
|
|
543
543
|
private fun registerTIMPush() {
|
|
544
544
|
val sdkAppId = 0 // TODO: Replace with your SDKAppID.
|
|
545
|
-
val appKey = "
|
|
545
|
+
val appKey = "您的客户端密钥" // TODO: Replace with your Push Key.
|
|
546
546
|
|
|
547
547
|
TIMPushManager.getInstance().registerPush(this, sdkAppId, appKey, object : TIMPushCallback<Any?>() {
|
|
548
548
|
override fun onSuccess(data: Any?) {
|
|
@@ -659,7 +659,7 @@ fun loginIMAndRegisterPush(context: Context) {
|
|
|
659
659
|
|
|
660
660
|
> **警告:**
|
|
661
661
|
>
|
|
662
|
-
>
|
|
662
|
+
> 如果您的业务仅使用即时通信 IM 聊天能力,请勿在 IM 登录前先调用 `registerPush`。否则 SDK 可能会按独立推送场景注册 Push 类型账号,并产生对应的 Push DAU。Push DAU 超出套餐额度后,可能会产生额外费用。
|
|
663
663
|
>
|
|
664
664
|
|
|
665
665
|
**验证**:
|
|
@@ -792,7 +792,7 @@ V2TIMManager.getMessageManager().sendMessage(
|
|
|
792
792
|
|
|
793
793
|
通过 [V2TIMOfflinePushInfo](https://im.sdk.qcloud.com/doc/zh-cn/classcom_1_1tencent_1_1imsdk_1_1v2_1_1V2TIMOfflinePushInfo.html) 的 `ext` 属性携带跳转参数,再随消息一起发送。`setExt` 接收 `byte[]` 入参,业务自定义的 JSON 字符串需要先转成字节数组。
|
|
794
794
|
|
|
795
|
-
|
|
795
|
+
如果您接入了 TUIKit,TUIKit 内置的消息发送链路会自动用 `OfflinePushExtInfo` 组装 `ext`,无需手动设置。下方示例适用于自行调用 IM SDK 发送消息的场景。
|
|
796
796
|
|
|
797
797
|
【Java】
|
|
798
798
|
``` java
|
|
@@ -874,7 +874,7 @@ V2TIMManager.getMessageManager().sendMessage(
|
|
|
874
874
|
|
|
875
875
|
请在 `Application.onCreate()` 中调用 addPushListener 注册 `TIMPushListener`,并在 onNotificationClicked 中解析 `ext` 后跳转到业务页面。
|
|
876
876
|
|
|
877
|
-
以下示例只演示解析 `ext` 的核心逻辑,跳转部分用 `TODO`
|
|
877
|
+
以下示例只演示解析 `ext` 的核心逻辑,跳转部分用 `TODO` 占位,请按自身业务补充。如果您接入了 TUIKit 并使用 `OfflinePushExtInfo` 组装的 `ext`,可改为 `new Gson().fromJson(ext, OfflinePushExtInfo.class)` 解析后再跳转。
|
|
878
878
|
|
|
879
879
|
【Java】
|
|
880
880
|
``` java
|
|
@@ -1099,7 +1099,7 @@ pushInfo.setAndroidOPPOChannelID("your_oppo_private_channel_id");
|
|
|
1099
1099
|
- 华为/荣耀:测试包签名(debug 或 release)的 SHA-256 必须已在厂商控制台「项目设置 > 常规 > SHA 证书指纹」中添加,指纹不一致会报 `6003: certificate fingerprint error`。
|
|
1100
1100
|
|
|
1101
1101
|
#### 步骤6:确认消息分类和厂商限制
|
|
1102
|
-
-
|
|
1102
|
+
- 是否超出厂商单日推送限额(例如 vivo 运营消息每日限制、小米公信消息限额)。
|
|
1103
1103
|
|
|
1104
1104
|
- 是否在夜间发送(部分厂商运营消息夜间不下发)。
|
|
1105
1105
|
|
|
@@ -1117,3 +1117,4 @@ pushInfo.setAndroidOPPOChannelID("your_oppo_private_channel_id");
|
|
|
1117
1117
|
- 部分厂商定制系统可能额外限制通知展示方式。
|
|
1118
1118
|
|
|
1119
1119
|
#### 联系方式
|
|
1120
|
+
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
请参见 [Apple Developer 平台 Bundle ID 配置指引](https://dev.weixin.qq.com/docs/miniapp/handbook/web/set-bundleid.html),配置时请勾选以下能力:
|
|
78
78
|
- **Push Notification**
|
|
79
79
|
|
|
80
|
-
- **App Group (按需配置:字段配置可参见** [生成 App GroupID](https://cloud.tencent.com/document/product/269/100624#
|
|
80
|
+
- **App Group (按需配置:字段配置可参见** [生成 App GroupID](https://cloud.tencent.com/document/product/269/100624#778049b7-7ce0-4953-95fd-da523cca0bd4)**)**
|
|
81
81
|
|
|
82
82
|
- Donut 建议的权限:Access WiFi Information、Associated Domains、Hotspot、Wireless Accessory Configuration;如果使用苹果登录,还需开启 Sign In with Apple(更多其他权限开发者按需开启,并非越多越好哈)
|
|
83
83
|
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
|
|
88
88
|
4. 苹果推送服务 (APNs) 证书 ID 配置。
|
|
89
89
|
|
|
90
|
-
**当您需要接入 APNs 时开启厂商通道推送时,**`businessID` 为**必传项**,请先按照 [证书配置文档](https://cloud.tencent.com/document/product/269/100624#
|
|
90
|
+
**当您需要接入 APNs 时开启厂商通道推送时,**`businessID` 为**必传项**,请先按照 [证书配置文档](https://cloud.tencent.com/document/product/269/100624#e60424bc-0e30-43cc-9583-3ede9de495f5) 上传证书到推送控制台,之后控制台会为您分配此 ID。
|
|
91
91
|
|
|
92
92
|
5. 运行前准备。
|
|
93
93
|
|
|
@@ -216,7 +216,7 @@ iOS 如需统计推送触达数据,请在 `registerPush` 时传入 `applicatio
|
|
|
216
216
|
|
|
217
217
|
运行 App 后,过滤 `TIMPush` 关键字查看注册日志。注册成功后,调用 `getRegistrationID()` 获取当前设备推送标识。控制台或服务端发送测试消息时,可使用该值定位设备。
|
|
218
218
|
|
|
219
|
-
测试流程请参考 [Android 测试推送](https://cloud.tencent.com/document/product/269/100626#.E6.B5.8B.E8.AF.95.E6.8E.A8.E9.80.81) 和 [iOS 测试推送](https://cloud.tencent.com/document/product/269/100627#.E6.B5.8B.E8.AF.95.E6.8E.A8.E9.80.81)文档。仅集成 TIMPush 的用户,建议优先使用腾讯云控制台接入测试能力验证离线推送。
|
|
219
|
+
测试流程请参考 [Android 测试推送](https://cloud.tencent.com/document/product/269/100626#.E6.B5.8B.E8.AF.95.E6.8E.A8.E9.80.81) 和 [iOS 测试推送](https://cloud.tencent.com/document/product/269/100627#.E6.B5.8B.E8.AF.95.E6.8E.A8.E9.80.81) 文档。仅集成 TIMPush 的用户,建议优先使用腾讯云控制台接入测试能力验证离线推送。
|
|
220
220
|
|
|
221
221
|
如果您的项目已接入 IM SDK,可通过 SDK API 发送一条带离线推送参数的消息进行验证。Flutter 侧示例如下:
|
|
222
222
|
``` java
|
|
@@ -354,11 +354,11 @@ Future<void> removeTIMPushListener() async {
|
|
|
354
354
|
|
|
355
355
|
## 收不到推送排障流程
|
|
356
356
|
|
|
357
|
-
###
|
|
357
|
+
### 步骤1:原生侧排查
|
|
358
358
|
|
|
359
359
|
如果发送测试消息后设备没有收到推送,请先按平台文档 [Android 收不到推送排障流程](https://cloud.tencent.com/document/product/269/100626#.E6.94.B6.E4.B8.8D.E5.88.B0.E6.8E.A8.E9.80.81.E6.8E.92.E9.9A.9C.E6.B5.81.E7.A8.8B) 和 [iOS 收不到推送排障流程](https://cloud.tencent.com/document/product/269/100627#.E6.94.B6.E4.B8.8D.E5.88.B0.E6.8E.A8.E9.80.81.E6.8E.92.E9.9A.9C.E6.B5.81.E7.A8.8B) 完成原生侧排查。
|
|
360
360
|
|
|
361
|
-
###
|
|
361
|
+
### 步骤2:Flutter 侧可按以下顺序补充检查
|
|
362
362
|
1. 确认 `registerPush` 返回 `code = 0`。如果返回非 0,请先根据错误码和 `errorMessage` 排查,不要只看 App 是否启动成功。
|
|
363
363
|
|
|
364
364
|
2. 注册成功后调用 `getRegistrationID()`,确认返回值非空。控制台或服务端发送测试消息时,使用的 `RegistrationID / userID` 应与这里返回的值一致。
|
|
@@ -370,3 +370,4 @@ Future<void> removeTIMPushListener() async {
|
|
|
370
370
|
5. 如果通过 Chat SDK 发送测试消息,确认 `OfflinePushInfo` 中已设置 `title`、`desc`,并按业务需要设置 `ext`。如需点击跳转,`ext` 中应包含客户端可解析的页面或会话参数。
|
|
371
371
|
|
|
372
372
|
### 仍无法解决
|
|
373
|
+
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|Push 服务开通状态|腾讯云控制台 > 即时通信 IM > **推送服务 Push** > **概览**|创建 Push 应用不等于已开通 Push 服务,请确认 Push 服务已开通。|
|
|
11
11
|
|TIMPush iOS `VERSION`|更新日志|`VERSION` 是 Podfile 中 TIMPush 依赖的版本号占位符,例如 `8.9.7537`、`8.8.7357`、`8.7.7201` 等,请以实际接入版本为准。|
|
|
12
12
|
|
|
13
|
-
本文示例中的 `VERSION`、`SDKAppID`、`
|
|
13
|
+
本文示例中的 `VERSION`、`SDKAppID`、`appKey`均为占位符,请勿在代码仓库中提交真实密钥。
|
|
14
14
|
|
|
15
15
|
## 操作步骤
|
|
16
16
|
|
|
@@ -132,7 +132,7 @@ import TIMPush
|
|
|
132
132
|
registerPush 用于向 TIMPush 注册当前设备的推送 token。推送 token 是厂商通道返回的设备凭证,通常由 SDK 自动处理。注册成功后,TIMPush 会为当前设备建立一个推送目标标识 `registrationID`;服务端、控制台接入测试和排查工具可以使用该标识向这台设备下发离线推送。若 App 同时接入 IM 并完成登录,也可以使用 `userID` 向该用户已建立推送关系的设备下发离线推送。
|
|
133
133
|
|
|
134
134
|
`appKey` 的取值会影响注册方式和可用的推送标识:
|
|
135
|
-
- `appKey = Push Key`:注册 TIMPush 独立推送能力。Push Key 为腾讯云控制台 > 即时通信 IM >
|
|
135
|
+
- `appKey = Push Key`:注册 TIMPush 独立推送能力。Push Key 为腾讯云控制台 > 即时通信 IM > **推送服务 Push** > **概览**中的客户端密钥。
|
|
136
136
|
|
|
137
137
|
- `appKey = nil`:复用 IM 登录态注册推送,必须在 IM `login` 成功后调用。
|
|
138
138
|
|
|
@@ -660,7 +660,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate, TIMPushListener {
|
|
|
660
660
|
@end
|
|
661
661
|
```
|
|
662
662
|
|
|
663
|
-
**验证**:点击通知后 `onNotificationClicked` 被调用,且 `ext`
|
|
663
|
+
**验证**:点击通知后 `onNotificationClicked` 被调用,且 `ext` 内容与发送时设置的一致。如果回调未触发,请检查:控制台点击动作是否选择了**打开应用内指定页面**、监听器是否在 `didFinishLaunchingWithOptions` 中注册、发送消息时是否设置了 `ext`。
|
|
664
664
|
|
|
665
665
|
## 收不到推送排障流程
|
|
666
666
|
|
|
@@ -685,7 +685,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate, TIMPushListener {
|
|
|
685
685
|
### 步骤3:确认控制台排查工具能查到 token
|
|
686
686
|
|
|
687
687
|
在腾讯云控制台 **即时通信 IM > 推送服务 Push** 的排查工具中输入 `registrationID` 或 `userID`:
|
|
688
|
-
- **能查到设备且 token
|
|
688
|
+
- **能查到设备且 token 正常**:进入步骤4。
|
|
689
689
|
|
|
690
690
|
- **查不到设备 / 显示「没有上传成功 token」**:常见原因是 Chat 场景未在 Chat 登录成功后调用 `registerPush`,或调用顺序错误。请重新核对调用时机。
|
|
691
691
|
|
|
@@ -721,3 +721,4 @@ class AppDelegate: UIResponder, UIApplicationDelegate, TIMPushListener {
|
|
|
721
721
|
- 推送服务是否到期(试用到期后自动停止服务)。
|
|
722
722
|
|
|
723
723
|
### 仍无法解决
|
|
724
|
+
|
|
@@ -54,9 +54,9 @@
|
|
|
54
54
|
|
|
55
55
|
【Android】
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
完成 厂商配置 后,下载并添加配置文件到工程。将下载的 `timpush-configs.json` 文件添加到项目的 `Assets/Plugins/Android` 目录下,如果该目录不存在,请手动创建。
|
|
58
58
|
|
|
59
|
-
### 步骤3
|
|
59
|
+
### 步骤3:客户端厂商配置
|
|
60
60
|
|
|
61
61
|
【iOS】
|
|
62
62
|
|
|
@@ -262,7 +262,7 @@ PushListener listener = new PushListener(onRecvPushMessage: (message) => {
|
|
|
262
262
|
PushManager.AddPushListener(listener);
|
|
263
263
|
```
|
|
264
264
|
|
|
265
|
-
### 步骤5
|
|
265
|
+
### 步骤5:注册推送插件
|
|
266
266
|
|
|
267
267
|
调用 `PushManager.RegisterPush` 方法成功后,就可以收到离线推送通知了。
|
|
268
268
|
|
|
@@ -278,7 +278,7 @@ PushManager.RegisterPush(sdkAppId: 您的sdkAppId, appKey: "客户端密钥", ne
|
|
|
278
278
|
}));
|
|
279
279
|
```
|
|
280
280
|
|
|
281
|
-
### 步骤6
|
|
281
|
+
### 步骤6:消息推送触达统计
|
|
282
282
|
|
|
283
283
|
如果你需要统计设备触达数据,请按照 华为/荣耀/vivo/魅族/iOS 完成配置。其余支持厂商不需要配置,FCM 暂不支持推送统计功能。
|
|
284
284
|
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
|
|
5
5
|
## 操作步骤
|
|
6
6
|
|
|
7
|
-
### 步骤1
|
|
7
|
+
### 步骤1:集成 TIMPush
|
|
8
8
|
|
|
9
9
|
各原生平台厂商配置后集成推送插件,下载 [TIMPush](https://github.com/TencentCloud/TIMSDK/tree/master/UE5/Push/pushdemo/Plugins/TIMPush) 并拷贝到项目的 `Plugins` 目录下,在项目主模块的 Build.cs 文件中,引入 TIMPush。
|
|
10
10
|
|
|
11
|
-
### 步骤2
|
|
11
|
+
### 步骤2:推送参数配置
|
|
12
12
|
|
|
13
13
|
【iOS】
|
|
14
14
|
|
|
@@ -20,21 +20,22 @@
|
|
|
20
20
|
|
|
21
21
|
3. 开启远程推送能力。完成证书 ID 配置之后,您需要开启应用的 Push Notifications 能力:
|
|
22
22
|
|
|
23
|
-
- 如果您的 UE 引擎是从源代码自行编译构建的,您可以通过 “项目设置 > iOS 中勾选 Enable Remote Notifications Support” 来开启对应能力;
|
|
23
|
+
- 如果您的 UE 引擎是从源代码自行编译构建的,您可以通过 “项目设置 > iOS 中勾选 Enable Remote Notifications Support” 来开启对应能力;
|
|
24
24
|
|
|
25
|
-
- 如果您的 UE 引擎是从 Epic Game 下载的,您可以通过打开 “`<proj_dir>/Config/DefaultEngine.ini`” ,在脚本的 `IOSRuntimeSettings` 中添加:
|
|
25
|
+
- 如果您的 UE 引擎是从 Epic Game 下载的,您可以通过打开 “`<proj_dir>/Config/DefaultEngine.ini`” ,在脚本的 `IOSRuntimeSettings` 中添加:
|
|
26
26
|
|
|
27
27
|
``` plaintext
|
|
28
28
|
// Some code
|
|
29
29
|
[/Script/IOSRuntimeSettings.IOSRuntimeSettings]
|
|
30
30
|
bEnableRemoteNotificationsSupport=True
|
|
31
31
|
```
|
|
32
|
-
- 或者,您也可以选择在项目根目录中使用 Xcode 打开 UE 生成的 YourProject.xcworkspace,在 Project > Target 中,点击 Signing & Capabilities 选项,点击左上角 Capability,搜索添加 Push Notifications 能力到您的项目中
|
|
32
|
+
- 或者,您也可以选择在项目根目录中使用 Xcode 打开 UE 生成的 YourProject.xcworkspace,在 Project > Target 中,点击 Signing & Capabilities 选项,点击左上角 Capability,搜索添加 Push Notifications 能力到您的项目中
|
|
33
33
|
|
|
34
34
|
【Android】
|
|
35
|
-
1. 完成厂商配置后,在 [腾讯云即时通信 IM 控制台](https://console.cloud.tencent.com/im/push-plugin-push-identifier) 下载并添加配置文件到工程。将下载的 `timpush-configs.json` 文件添加到 TIMPush 的 `Source/ThirdParty/TIMPushLibrary/Android/TIMPush/Assets` 目录下。
|
|
36
35
|
|
|
37
|
-
|
|
36
|
+
完成 厂商配置 后,在 [腾讯云即时通信 IM 控制台](https://console.cloud.tencent.com/im/push-plugin-push-identifier) 下载并添加配置文件到工程。将下载的 `timpush-configs.json` 文件添加到 TIMPush 的 `Source/ThirdParty/TIMPushLibrary/Android/TIMPush/Assets` 目录下。
|
|
37
|
+
|
|
38
|
+
### 步骤3:客户端厂商配置
|
|
38
39
|
|
|
39
40
|
【iOS】
|
|
40
41
|
|
|
@@ -89,9 +90,10 @@ APL 相关配置 TIMPush 已配置好,只需要替换成应用自己的配置
|
|
|
89
90
|
|
|
90
91
|
按照厂商方法,集成对应的 plugin 和 json 配置文件。
|
|
91
92
|
|
|
92
|
-
> **注意:**
|
|
93
|
-
>
|
|
94
|
-
>
|
|
93
|
+
> **注意:**
|
|
94
|
+
>
|
|
95
|
+
> 以下荣耀的适配仅 7.7.5283 及以上版本需要配置。
|
|
96
|
+
>
|
|
95
97
|
|
|
96
98
|
3.1 下载 json 配置文件,添加到插件 TIMPush 目录 `Source/ThirdParty/TIMPushLibrary/Android/TIMPush/` 目录下。
|
|
97
99
|
|
|
@@ -256,37 +258,37 @@ PushManager::GetInstance()->RegisterPush(您的 sdkAppId, "您的 appKey", callb
|
|
|
256
258
|
```
|
|
257
259
|
|
|
258
260
|
### 步骤6:消息推送触达统计
|
|
261
|
+
- 如果你需要统计 Android 设备触达数据,请按照 华为/荣耀/vivo/魅族 配置。
|
|
259
262
|
|
|
260
|
-
如果你需要统计
|
|
263
|
+
- 如果你需要统计 iOS 设备触达数据,
|
|
261
264
|
|
|
262
|
-
1. 在上文的推送参数配置章节中,将“YourGroupID”修改为自己的 App Group ID。
|
|
265
|
+
1. 在上文的推送参数配置章节中,将“YourGroupID”修改为自己的 App Group ID。
|
|
263
266
|
|
|
264
|
-
2. 参考 iOS 配置消息触达统计 完成 App Group ID、Notification Service Extension 和 mutable-content 配置。
|
|
267
|
+
2. 参考 iOS 配置消息触达统计 完成 App Group ID、Notification Service Extension 和 mutable-content 配置。
|
|
265
268
|
|
|
266
|
-
3. 将项目根目录的 Plugins-TIMPush-Source-ThirdParty-TIMPushLibrary-iOS 路径中的两个 framework 压缩包解压缩,并在 Xcode 项目中将内部的 .framework 文件夹添加到您的 pushservice target 之中。
|
|
269
|
+
3. 将项目根目录的 Plugins-TIMPush-Source-ThirdParty-TIMPushLibrary-iOS 路径中的两个 framework 压缩包解压缩,并在 Xcode 项目中将内部的 .framework 文件夹添加到您的 pushservice target 之中。
|
|
267
270
|
|
|
268
|
-
4. 在 Notification Service Extension 的 -didReceiveNotificationRequest:withContentHandler: 方法中调用推送抵达率统计函数:
|
|
271
|
+
4. 在 Notification Service Extension 的 -didReceiveNotificationRequest:withContentHandler: 方法中调用推送抵达率统计函数:
|
|
269
272
|
|
|
270
|
-
|
|
271
|
-
|
|
273
|
+
``` objectivec
|
|
274
|
+
@implementation NotificationService
|
|
272
275
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
@end
|
|
288
|
-
```
|
|
276
|
+
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
|
|
277
|
+
//appGroup 标识当前主 APP 和 Extension 之间共享的 APP Group,需要在主 APP 的 Capability 中配置 App Groups 能力。
|
|
278
|
+
//格式为group + [主bundleID]+ key
|
|
279
|
+
//如group.com.tencent.im.pushkey
|
|
280
|
+
NSString * appGroupID = kTIMPushAppGroupKey;
|
|
281
|
+
__weak typeof(self) weakSelf = self;
|
|
282
|
+
[TIMPushManager handleNotificationServiceRequest:request appGroupID:appGroupID callback:^(UNNotificationContent *content) {
|
|
283
|
+
weakSelf.bestAttemptContent = [content mutableCopy];
|
|
284
|
+
// Modify the notification content here...
|
|
285
|
+
// self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [modified]", self.bestAttemptContent.title];
|
|
286
|
+
weakSelf.contentHandler(weakSelf.bestAttemptContent);
|
|
287
|
+
}];
|
|
288
|
+
}
|
|
289
289
|
|
|
290
|
-
|
|
290
|
+
@end
|
|
291
|
+
```
|
|
292
|
+
- 其余支持厂商不需要配置,FCM 暂不支持推送统计功能。
|
|
291
293
|
|
|
292
|
-
|
|
294
|
+
如果接入完成却收不到推送,请使用 [排查工具](https://cloud.tencent.com/document/product/269/100629) 查看具体原因。
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: TUIRoomKit 异常退出后成员仍显示在列表的原因与清理
|
|
3
|
+
product: room
|
|
4
|
+
frameworks: [react, vue, web, android, ios, flutter]
|
|
5
|
+
scope: platform_common
|
|
6
|
+
tags: [TUIRoomKit, 异常退出, 幽灵成员, 心跳检测, 离线检测, 踢出房间, kick_user_out, disconnect回调, 成员列表, 房间清理]
|
|
7
|
+
version_range: ">=2.0.0"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# TUIRoomKit 异常退出后成员仍显示在列表的原因与清理
|
|
11
|
+
|
|
12
|
+
## 1. 核心结论
|
|
13
|
+
|
|
14
|
+
- 用户异常退出(杀进程、断网、关页未走 leave)后,成员仍显示在远端列表,是**视频会议 SDK 后台心跳离线检测**的预期行为。
|
|
15
|
+
- 现行规则:后台在**心跳丢失约 5~6 分钟**后才将异常退出的用户移出房间,远端此时才收到离开通知并更新成员列表。
|
|
16
|
+
- **不能默认把心跳设得很短**:网络抖动时容易被误踢出房,影响正常会议体验。
|
|
17
|
+
- 若业务需要更快清理幽灵成员:方案一(提工单调心跳至约 2 分钟)或方案二(用 IM 断线回调 + `kick_user_out` 立即踢出)。
|
|
18
|
+
|
|
19
|
+
## 2. 字段语义对照
|
|
20
|
+
|
|
21
|
+
| 字段/能力 | 作用 | 说明 |
|
|
22
|
+
|---|---|---|
|
|
23
|
+
| 心跳离线检测 | 检测用户在线状态 | 后台检测用户是否心跳丢失 |
|
|
24
|
+
| 心跳丢失 | 用户异常退出的信号 | 杀进程/断网/关页未走 leave 时心跳丢失 |
|
|
25
|
+
| 幽灵成员 | 异常退出但仍显示的用户 | 约 5~6 分钟后被移出房间 |
|
|
26
|
+
| `kick_user_out` | 踢出房间成员 | 业务后台主动调用立即清理 |
|
|
27
|
+
| `disconnect` 回调 | 断线回调 | IM 服务端感知用户离线 |
|
|
28
|
+
| 心跳时长调整 | 后台配置 | 提工单可调至约 2 分钟 |
|
|
29
|
+
|
|
30
|
+
## 3. 机制/时序
|
|
31
|
+
|
|
32
|
+
用户异常退出(杀进程、断网、关页未走 leave) -> 后台检测到心跳丢失 -> 约 5~6 分钟后将用户移出房间 -> 远端收到离开通知,更新成员列表。
|
|
33
|
+
|
|
34
|
+
心跳时长默认不能太短,避免网络抖动导致误踢。若业务需要更快清理:
|
|
35
|
+
|
|
36
|
+
- **方案一**:提工单调整后台心跳检测时长至约 2 分钟。
|
|
37
|
+
- **方案二**:业务后台根据 IM `disconnect` 回调感知离线后,主动调用 `kick_user_out` 立即清理幽灵成员。
|
|
38
|
+
|
|
39
|
+
## 4. 标准用法
|
|
40
|
+
|
|
41
|
+
1. **方案一(改心跳时长)**:提工单,联系后台将心跳检测时长调整为约 2 分钟。
|
|
42
|
+
2. **方案二(服务端主动清理)**:
|
|
43
|
+
- 业务后台监听 IM 服务端 `disconnect`(断线)回调。
|
|
44
|
+
- 收到离线信号后,调用 `kick_user_out` 踢出房间成员。
|
|
45
|
+
|
|
46
|
+
## 5. 结果判定
|
|
47
|
+
|
|
48
|
+
- 异常退出用户约 5~6 分钟后被移出房间,远端成员列表更新。
|
|
49
|
+
- 提工单调整心跳至约 2 分钟后,清理更快。
|
|
50
|
+
- 方案二通过 `disconnect` 回调 + `kick_user_out` 可立即清理幽灵成员。
|
|
51
|
+
- 心跳过短会增大网络抖动时的误踢风险。
|
|
52
|
+
|
|
53
|
+
## 6. 常见误区
|
|
54
|
+
|
|
55
|
+
- 误区 1:认为异常退出用户应立即从成员列表消失(心跳检测约需 5~6 分钟)。
|
|
56
|
+
- 误区 2:认为心跳时长可以随意设得很短(网络抖动会导致误踢,影响正常会议)。
|
|
57
|
+
- 误区 3:忽略业务侧可以主动踢出(`disconnect` 回调 + `kick_user_out`)。
|
|
58
|
+
|
|
59
|
+
## 7. 问题定义(检索辅助,极简)
|
|
60
|
+
|
|
61
|
+
TUIRoomKit 用户异常退出后远端成员列表仍显示该用户的原因,以及如何更快清理幽灵成员。
|
|
62
|
+
|
|
63
|
+
## 8. 同义问法覆盖(检索召回,极简)
|
|
64
|
+
|
|
65
|
+
- 用户异常退出还在成员列表里怎么办?
|
|
66
|
+
- TUIRoomKit 幽灵成员怎么清理?
|
|
67
|
+
- 断网用户多久被移出房间?
|
|
68
|
+
- 心跳检测时间能调短吗?
|
|
69
|
+
- 异常退出用户一直显示在列表?
|
|
70
|
+
- 怎么踢出离线用户?
|
|
71
|
+
|
|
72
|
+
## 9. 参考来源(可选)
|
|
73
|
+
|
|
74
|
+
- 状态变更回调:`https://cloud.tencent.com/document/product/269/2570`
|
|
75
|
+
- 踢出房间成员接口:`https://cloud.tencent.com/document/product/269/105393`
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: TUIRoomKit 并发房间上限与多房间支持说明
|
|
3
|
+
product: room
|
|
4
|
+
frameworks: [react, vue, web, android, ios, flutter]
|
|
5
|
+
scope: platform_common
|
|
6
|
+
tags: [TUIRoomKit, 并发房间, 房间上限, 同时进多个房间, 单房间人数, 峰值群组数, TUIRoomTypeConference, useRoomState, 多端登录, 互踢, 会议, 房间管理]
|
|
7
|
+
version_range: ">=2.0.0"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# TUIRoomKit 并发房间上限与多房间支持说明
|
|
11
|
+
|
|
12
|
+
## 1. 核心结论
|
|
13
|
+
|
|
14
|
+
- 并发房间数有上限,与开通的 **多人音视频(TUIRoomKit)套餐版本 + IM 能力**相关。
|
|
15
|
+
- **同一客户端 / 同一 SDK 实例不支持同时待在多个会议房间里**:会议类型房间单设备同时加入房间数上限为 1,超过会退出最早加入的房间。
|
|
16
|
+
- **同一 userId 多设备进同一房间默认互踢**(后进踢先进);多端同时进会需按套餐配置"多端登录"能力或为不同端分配不同 userId。
|
|
17
|
+
|
|
18
|
+
## 2. 字段语义对照
|
|
19
|
+
|
|
20
|
+
| 字段/能力 | 作用 | 说明 |
|
|
21
|
+
|---|---|---|
|
|
22
|
+
| `TUIRoomTypeConference` | 会议类型房间 | 单设备同时加入房间数上限为 1 |
|
|
23
|
+
| `useRoomState` | 房间状态(Atomicx 无 UI 路径) | 单例,同一用户同一时刻仅存在于一个房间内 |
|
|
24
|
+
| 房间数限制 | 房间/群组类资源峰值 | 按自然月最高峰值结算,非无限开房 |
|
|
25
|
+
| 单房间人数 | 一场会议最多多少人 | 套餐硬上限(20/50/200/300) |
|
|
26
|
+
| 多端登录 | 同 userId 多端进会 | 仅更高版本套餐支持 |
|
|
27
|
+
|
|
28
|
+
## 3. 机制/时序
|
|
29
|
+
|
|
30
|
+
### 并发房间上限
|
|
31
|
+
|
|
32
|
+
开通多人音视频(TUIRoomKit)套餐后,可同时开的会议数量受 **房间数限制 + 单房间人数** 约束:
|
|
33
|
+
|
|
34
|
+
| 能力维度 | 体验版 | 基础互动版 | 进阶互动版 | 超大房间互动版 |
|
|
35
|
+
|---|---|---|---|---|
|
|
36
|
+
| **房间数限制**(计费口径) | 随 IM 版本 | 100,000 个/月 | 100,000 个/月 | 100,000 个/月 |
|
|
37
|
+
| **单房间参会人数规模** | 20 | 50 | 200 | 300(扩容请提工单) |
|
|
38
|
+
|
|
39
|
+
- 单房间人数是"一场会议最多多少人"的硬上限。
|
|
40
|
+
- 房间数限制(峰值群组数)是套餐赠送的 IM 侧群组/房间类资源峰值(自然月最高峰值结算),不是"任意时刻可无限开房"。
|
|
41
|
+
- 实际可同时开多少场,还受 IM 套餐、TRTC 资源与业务架构影响;超大房间有扩容通道。
|
|
42
|
+
- 多端登录会议 / 同平台多端登录会议需要更高的套餐版本支持。
|
|
43
|
+
|
|
44
|
+
### 同一用户多房间
|
|
45
|
+
|
|
46
|
+
同一客户端 / 同一 SDK 实例调用 `joinRoom` 进入新房间时,若已存在会议类型房间,会退出最早加入的房间(单设备同时加入房间数上限为 1)。
|
|
47
|
+
|
|
48
|
+
## 4. 标准用法
|
|
49
|
+
|
|
50
|
+
业务需评估并发房间需求时,按以下步骤确认:
|
|
51
|
+
|
|
52
|
+
1. 确认开通的 TUIRoomKit 套餐版本,查阅 [功能与计费说明](https://cloud.tencent.com/document/product/269/104946) 中的房间数限制与单房间人数。
|
|
53
|
+
2. 评估单场会议人数是否超过套餐上限;超大房间需求可提工单扩容。
|
|
54
|
+
3. 业务需同时承载多场会议时,评估房间数限制(峰值群组数)是否足够,并结合 IM 套餐与 TRTC 资源。
|
|
55
|
+
4. 业务需同一用户多端同会时,确认套餐是否支持多端登录;否则为不同端分配不同 userId。
|
|
56
|
+
|
|
57
|
+
## 5. 结果判定
|
|
58
|
+
|
|
59
|
+
- 并发会议数量受套餐房间数限制与单房间人数约束。
|
|
60
|
+
- 同一 SDK 实例同时加入多个会议房间时,超过 1 个会退出最早加入的房间。
|
|
61
|
+
- 同一 userId 多设备进同一房间会互踢(后进踢先进)。
|
|
62
|
+
- 多端同会需套餐支持多端登录,或为不同端分配不同 userId。
|
|
63
|
+
|
|
64
|
+
## 6. 常见误区
|
|
65
|
+
|
|
66
|
+
- 误区 1:认为房间数限制(峰值群组数)意味着可以"任意时刻无限开房"(按自然月最高峰值结算,非并发无限)。
|
|
67
|
+
- 误区 2:认为同一 SDK 实例可以同时待多个会议房间(单设备上限 1)。
|
|
68
|
+
- 误区 3:认为同一 userId 多设备可以同时进同一房间(默认互踢)。
|
|
69
|
+
- 误区 4:忽略套餐版本差异(多端登录仅更高版本支持)。
|
|
70
|
+
|
|
71
|
+
## 7. 问题定义(检索辅助,极简)
|
|
72
|
+
|
|
73
|
+
TUIRoomKit 同时进行的会议室是否有上限,以及同一个用户是否可以同时进入不同房间。
|
|
74
|
+
|
|
75
|
+
## 8. 同义问法覆盖(检索召回,极简)
|
|
76
|
+
|
|
77
|
+
- TUIRoomKit 并发房间数上限是多少?
|
|
78
|
+
- 可以同时开多少场会议?
|
|
79
|
+
- 同一个用户能同时进两个房间吗?
|
|
80
|
+
- 单房间最多多少人?
|
|
81
|
+
- TUIRoomKit 多端登录支持吗?
|
|
82
|
+
- 同一 userId 多设备会互踢吗?
|
|
83
|
+
- 会议室人数上限怎么扩容?
|
|
84
|
+
|
|
85
|
+
## 9. 参考来源(可选)
|
|
86
|
+
|
|
87
|
+
- 开通服务 / 功能与计费说明:`https://cloud.tencent.com/document/product/269/104946`
|
|
88
|
+
- 单房间扩容提工单方式:`https://console.cloud.tencent.com/workorder/category`
|