@tencentcloud/sdk-mcp 1.7.3 → 1.7.5
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 +23 -0
- package/README.md +22 -23
- package/knowledge/path-meta.js +23 -1
- package/package.json +1 -1
- package/resource/index/manifest.json +1 -1
- package/resource/integration/callkit/preset/android/integration.md +4 -0
- package/resource/integration/callkit/preset/flutter/integration.md +8 -4
- package/resource/integration/callkit/preset/ios/integration.md +16 -15
- package/resource/integration/callkit/preset/react/integration.md +2 -2
- package/resource/integration/callkit/preset/vue/integration.md +9 -12
- package/resource/integration/chat/preset/android/integration.md +5 -147
- package/resource/integration/chat/preset/flutter/integration.md +22 -130
- package/resource/integration/chat/preset/ios/integration.md +12 -279
- package/resource/integration/chat/preset/react/integration.md +27 -1
- package/resource/integration/chat/preset/uni-app/integration.md +5 -1
- package/resource/integration/chat/preset/vue/integration.md +21 -31
- package/resource/integration/livekit/preset/live/android/live-host-integration.md +4 -0
- package/resource/integration/livekit/preset/live/ios/live-host-integration.md +4 -0
- package/resource/integration/livekit/preset/live/ios/prepare-integration.md +3 -3
- package/resource/integration/livekit/preset/live/vue/live-list-integration.md +3 -4
- package/resource/integration/livekit/preset/live/vue/live-player-desk-integration.md +0 -1
- package/resource/integration/livekit/preset/live/vue/live-player-h5-integration.md +0 -1
- package/resource/integration/livekit/preset/live/vue/live-pusher-integration.md +4 -9
- package/resource/integration/roomkit/preset/vue/integration.md +152 -652
- package/resource/knowledge/callkit/best-practice/android/video-chat-dating.md +490 -0
- package/resource/knowledge/callkit/best-practice/flutter/android-keep-call-alive-background.md +79 -0
- package/resource/knowledge/callkit/best-practice/flutter/background-incoming-call-no-notification.md +99 -0
- package/resource/knowledge/callkit/best-practice/flutter/ios-keep-call-alive-background.md +93 -0
- package/resource/knowledge/callkit/best-practice/flutter/ios-startup-crash-version-voip.md +68 -0
- 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/flutter/offline-push.md +1 -1
- package/resource/knowledge/callkit/core-sdk/ios/answer-call.md +18 -16
- package/resource/knowledge/callkit/core-sdk/ios/make-call.md +16 -14
- package/resource/knowledge/callkit/core-sdk/miniprogram/call-engine.md +19 -19
- package/resource/knowledge/callkit/core-sdk/miniprogram/call-event.md +16 -16
- package/resource/knowledge/callkit/core-sdk/uni-app/answer-call.md +2 -86
- package/resource/knowledge/callkit/core-sdk/uni-app/make-call.md +2 -104
- package/resource/knowledge/callkit/core-sdk/web/call-event.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/faq/error-code.md +62 -36
- package/resource/knowledge/callkit/faq/uniapp-miniprogram.md +1 -1
- package/resource/knowledge/callkit/preset/android/api.md +10 -10
- package/resource/knowledge/callkit/preset/harmonyos/api.md +362 -0
- package/resource/knowledge/callkit/preset/harmonyos/integration.md +322 -0
- package/resource/knowledge/callkit/preset/ios/api.md +9 -9
- package/resource/knowledge/callkit/preset/miniprogram/api-uniapp.md +293 -0
- package/resource/knowledge/callkit/preset/miniprogram/api.md +19 -19
- package/resource/knowledge/callkit/preset/miniprogram/integration.md +292 -0
- package/resource/knowledge/callkit/preset/miniprogram/uniapp-integration.md +521 -0
- package/resource/knowledge/callkit/preset/uni-app/api.md +49 -0
- package/resource/knowledge/callkit/preset/uni-app/integration.md +353 -0
- package/resource/knowledge/chat/preset/android-view/integration.md +54 -102
- package/resource/knowledge/chat/preset/ios/features/language.md +5 -5
- package/resource/knowledge/chat/preset/ios-uikit/integration.md +194 -926
- package/resource/knowledge/chat/preset/react/features/search.md +9 -214
- package/resource/knowledge/chat/preset/react/h5/integration.md +965 -0
- package/resource/knowledge/chat/preset/vue/features/chat-header.md +0 -36
- package/resource/knowledge/chat/preset/vue/features/contact-list.md +0 -34
- package/resource/knowledge/chat/preset/vue/features/conversation-list.md +0 -39
- package/resource/knowledge/chat/preset/vue/features/conversation-preview.md +0 -74
- package/resource/knowledge/chat/preset/vue/features/message-input.md +4 -4
- package/resource/knowledge/chat/preset/vue/features/search.md +9 -790
- package/resource/knowledge/chat/preset/vue/h5/integration.md +724 -0
- 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 -170
- package/resource/knowledge/livekit/core-sdk/live/android/co-guest-interaction.md +1 -1
- package/resource/knowledge/livekit/core-sdk/live/android/host-interaction.md +3 -3
- package/resource/knowledge/livekit/core-sdk/live/flutter/co-guest-interaction.md +1 -1
- package/resource/knowledge/livekit/core-sdk/live/flutter/host-interaction.md +3 -3
- package/resource/knowledge/livekit/core-sdk/live/flutter/integration.md +3 -3
- package/resource/knowledge/livekit/core-sdk/live/ios/co-guest-interaction.md +1 -1
- package/resource/knowledge/livekit/core-sdk/live/ios/host-interaction.md +3 -3
- package/resource/knowledge/livekit/core-sdk/live/ios/integration.md +2 -2
- package/resource/knowledge/livekit/core-sdk/live/uni-app/co-guest-interaction.md +13 -78
- package/resource/knowledge/livekit/core-sdk/live/uni-app/host-interaction.md +5 -70
- package/resource/knowledge/livekit/core-sdk/live/uni-app/integration.md +10 -10
- package/resource/knowledge/livekit/core-sdk/voice/android/co-guest-interaction.md +1 -1
- package/resource/knowledge/livekit/core-sdk/voice/android/host-interaction.md +4 -4
- package/resource/knowledge/livekit/core-sdk/voice/flutter/co-guest-interaction.md +1 -1
- package/resource/knowledge/livekit/core-sdk/voice/ios/co-guest-interaction.md +1 -1
- package/resource/knowledge/livekit/core-sdk/voice/ios/host-interaction.md +4 -4
- package/resource/knowledge/livekit/core-sdk/voice/uni-app/integration.md +7 -7
- package/resource/knowledge/livekit/preset/live/vue/features/barrage.md +1 -24
- package/resource/knowledge/livekit/preset/live/vue/features/live-audience-list.md +0 -3
- package/resource/knowledge/livekit/preset/live/vue/features/live-view.md +0 -5
- package/resource/knowledge/push/api-reference/harmonyos.md +9 -9
- package/resource/knowledge/push/api-reference/unity.md +10 -10
- package/resource/knowledge/push/api-reference/unreal-engine.md +11 -11
- 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 +90 -1067
- package/resource/knowledge/push/integration/donut.md +11 -11
- package/resource/knowledge/push/integration/flutter.md +38 -24
- package/resource/knowledge/push/integration/harmonyos.md +1 -11
- package/resource/knowledge/push/integration/ios.md +29 -40
- package/resource/knowledge/push/integration/react-native.md +1 -1
- package/resource/knowledge/push/integration/uni-app.md +1 -1
- package/resource/knowledge/push/integration/unity.md +4 -4
- package/resource/knowledge/push/integration/unreal-engine.md +9 -9
- package/resource/knowledge/roomkit/core-sdk/android/room-state.md +6 -6
- package/resource/knowledge/roomkit/core-sdk/android/schedule-room.md +13 -13
- package/resource/knowledge/roomkit/core-sdk/flutter/room-state.md +5 -5
- package/resource/knowledge/roomkit/core-sdk/flutter/schedule-room.md +4 -4
- package/resource/knowledge/roomkit/core-sdk/ios/room-state.md +6 -6
- package/resource/knowledge/roomkit/core-sdk/ios/schedule-room.md +4 -4
- package/resource/knowledge/roomkit/core-sdk/vue/device-detection.md +0 -9
- package/resource/knowledge/roomkit/core-sdk/vue/free-beauty-panel.md +0 -9
- package/resource/knowledge/roomkit/core-sdk/vue/recording.md +3 -3
- package/resource/knowledge/roomkit/core-sdk/vue/room-chat.md +0 -3
- package/resource/knowledge/roomkit/core-sdk/vue/room-view.md +0 -16
- package/resource/knowledge/roomkit/core-sdk/vue/schedule-room.md +0 -3
- package/resource/knowledge/roomkit/core-sdk/vue/virtual-background.md +3 -6
- package/resource/knowledge/roomkit/core-sdk/vue/whiteboard-annotation.md +0 -15
- package/resource/knowledge/roomkit/preset/android/integration.md +5 -202
- package/resource/knowledge/roomkit/preset/flutter/integration.md +17 -13
- package/resource/knowledge/roomkit/preset/harmonyos/integration.md +10 -2
- package/resource/knowledge/roomkit/preset/ios/integration.md +7 -204
- package/resource/knowledge/roomkit/preset/react/integration.md +0 -202
- package/resource/knowledge/roomkit/preset/uniapp-app/integration.md +244 -500
- package/resource/knowledge/rtcengine/web/plugin/42-advanced-realtime-transcriber.md +25 -6
- package/server.js +1 -1
- package/utils/preflight-route.js +203 -185
- package/utils/report-cls-client.js +1 -1
- package/utils/report-es-client.js +1 -1
|
@@ -118,7 +118,7 @@
|
|
|
118
118
|
|
|
119
119
|
### 运行效果
|
|
120
120
|
|
|
121
|
-
当您集成以上功能实现后,请分别使用主播 A 和主播 B 进行对应操作,运行效果如下,您可以参考下一章节 完善 UI 细节 来定制您想要的 UI 逻辑。
|
|
121
|
+
当您集成以上功能实现后,请分别使用主播 A 和主播 B 进行对应操作,运行效果如下,您可以参考下一章节 [完善 UI 细节](#6fe270da-d3b3-4785-bdc2-53b59d6d9cc0) 来定制您想要的 UI 逻辑。
|
|
122
122
|
|
|
123
123
|
## 完善 UI 细节
|
|
124
124
|
|
|
@@ -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>
|
|
@@ -187,52 +187,14 @@
|
|
|
187
187
|
};
|
|
188
188
|
</script>
|
|
189
189
|
|
|
190
|
-
<style scoped>
|
|
191
|
-
.overlay-container {
|
|
192
|
-
pointer-events: none;
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
.participant-ui-container {
|
|
196
|
-
overflow: hidden;
|
|
197
|
-
}
|
|
198
|
-
.avatar-placeholder {
|
|
199
|
-
display: flex;
|
|
200
|
-
flex-direction: column;
|
|
201
|
-
justify-content: center;
|
|
202
|
-
align-items: center;
|
|
203
|
-
background-color: #2E323A;
|
|
204
|
-
}
|
|
205
|
-
.avatar-image {
|
|
206
|
-
width: 160rpx;
|
|
207
|
-
height: 160rpx;
|
|
208
|
-
border-radius: 80rpx;
|
|
209
|
-
}
|
|
210
|
-
.avatar-name {
|
|
211
|
-
margin-top: 20rpx;
|
|
212
|
-
font-size: 28rpx;
|
|
213
|
-
color: #FFFFFF;
|
|
214
|
-
}
|
|
215
|
-
.nickname-bar {
|
|
216
|
-
position: absolute;
|
|
217
|
-
left: 10rpx;
|
|
218
|
-
bottom: 10rpx;
|
|
219
|
-
background-color: rgba(0, 0, 0, 0.5);
|
|
220
|
-
padding: 4rpx 16rpx;
|
|
221
|
-
border-radius: 20rpx;
|
|
222
|
-
}
|
|
223
|
-
.nickname-text {
|
|
224
|
-
color: #FFFFFF;
|
|
225
|
-
font-size: 24rpx;
|
|
226
|
-
}
|
|
227
|
-
</style>
|
|
228
190
|
```
|
|
229
191
|
- **步骤 2**:在直播间页面中组合所有组件
|
|
230
192
|
|
|
231
193
|
这是将视频层和 `UI` 层“叠”在一起的关键步骤,同时需要解决 `nvue` 的布局问题。
|
|
232
194
|
|
|
233
|
-
|
|
195
|
+
- 打开您的直播间页面文件
|
|
234
196
|
|
|
235
|
-
|
|
197
|
+
- 按照以下结构和样式进行修改。
|
|
236
198
|
|
|
237
199
|
``` typescript
|
|
238
200
|
<template>
|
|
@@ -275,33 +237,6 @@
|
|
|
275
237
|
});
|
|
276
238
|
</script>
|
|
277
239
|
|
|
278
|
-
<style scoped>
|
|
279
|
-
.page-container {
|
|
280
|
-
flex: 1;
|
|
281
|
-
background-color: #000;
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
.live-container {
|
|
285
|
-
flex: 1;
|
|
286
|
-
position: relative;
|
|
287
|
-
}
|
|
288
|
-
.video-layer,
|
|
289
|
-
.ui-layer {
|
|
290
|
-
position: absolute;
|
|
291
|
-
top: 0;
|
|
292
|
-
left: 0;
|
|
293
|
-
right: 0;
|
|
294
|
-
bottom: 0;
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
.video-layer {
|
|
298
|
-
z-index: 1;
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
.ui-layer {
|
|
302
|
-
z-index: 2;
|
|
303
|
-
}
|
|
304
|
-
</style>
|
|
305
240
|
```
|
|
306
241
|
|
|
307
242
|
## API 文档
|
|
@@ -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" : "应用需要访问您的相机以进行直播",
|
|
@@ -243,7 +243,7 @@ onMounted(() => {
|
|
|
243
243
|
|
|
244
244
|
### 运行效果
|
|
245
245
|
|
|
246
|
-
集成 **LiveCoreView** 后,您将得到一个纯净的视频渲染视图,它已具备完整的直播业务能力,但没有任何交互 UI。您可以参考下一章节 丰富直播场景 来完善直播场景。
|
|
246
|
+
集成 **LiveCoreView** 后,您将得到一个纯净的视频渲染视图,它已具备完整的直播业务能力,但没有任何交互 UI。您可以参考下一章节 [丰富直播场景](#82dbc44c-8a8e-40e2-89b9-66070f4beb72) 来完善直播场景。
|
|
247
247
|
|
|
248
248
|
## 丰富直播场景
|
|
249
249
|
|
|
@@ -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)` 查看设备的原生日志,通常能发现最直接的错误信息。
|
|
@@ -463,7 +463,7 @@ seatStore.unlockSeat(2, object : CompletionHandler {
|
|
|
463
463
|
主播和普通上麦用户可以调用 `moveUserToSeat` 移动麦位。
|
|
464
464
|
|
|
465
465
|
#### 实现方式:
|
|
466
|
-
1. **主播移动麦位**:主播可以调用此接口将任意用户移动到指定麦位。此时 `userID` 传入目标用户的 ID,`targetIndex` 是目标麦位索引,`policy`
|
|
466
|
+
1. **主播移动麦位**:主播可以调用此接口将任意用户移动到指定麦位。此时 `userID` 传入目标用户的 ID,`targetIndex` 是目标麦位索引,`policy` 参数来指定如果目标麦位有人时的移动策略,详见[接口参数](#227e92a5-7552-41ae-b57c-2dab5b7de234)说明。
|
|
467
467
|
|
|
468
468
|
2. **普通上麦用户移动自己麦位**:普通上麦用户也可以调用此接口来移动自己。此时 `userID` 必须传入用户自己的 ID,`targetIndex` 传入想去的新麦位索引,此时 `policy` 参数无效,如果目标麦位有人时会报错并停止移动。
|
|
469
469
|
|
|
@@ -302,7 +302,7 @@ battleStore.exitBattle(battleID, null)
|
|
|
302
302
|
|
|
303
303
|
### 场景二:主播发起带 PK 模式的连线
|
|
304
304
|
|
|
305
|
-
1. 主播在个人直播过程中,点击 PK 按钮,打开 UI
|
|
305
|
+
1. 主播在个人直播过程中,点击 PK 按钮,打开 UI 面板展示当前正在开播的主播列表(详见[《主播发起一场连线》的步骤 1](#1ce7ad55-e199-4098-a9bb-554c204fdd97))。
|
|
306
306
|
|
|
307
307
|
2. 主播选中其中一个主播,发起 PK 邀请。
|
|
308
308
|
|
|
@@ -410,7 +410,7 @@ override fun onCoHostRequestReceived(inviter: SeatUserInfo, extensionInfo: Strin
|
|
|
410
410
|
|
|
411
411
|
#### 步骤 4. 自动进入 PK 状态
|
|
412
412
|
|
|
413
|
-
|
|
413
|
+
此步骤同[《主播在连线后再发起 PK》的步骤 3](#b775b648-c9e2-480c-8678-f7e419e32bfa)相同,此处不再赘述。
|
|
414
414
|
|
|
415
415
|
## PK 分数更新与胜负判断
|
|
416
416
|
|
|
@@ -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
|
|
|
@@ -465,7 +465,7 @@ if (result2.isSuccess) {
|
|
|
465
465
|
主播和普通上麦用户可以调用 `moveUserToSeat` 移动麦位。
|
|
466
466
|
|
|
467
467
|
#### 实现方式:
|
|
468
|
-
1. **主播移动麦位**:主播可以调用此接口将任意用户移动到指定麦位。此时 `userID` 传入目标用户的 ID,`targetIndex` 是目标麦位索引,`policy` 参数来指定如果目标麦位有人时的移动策略,详细参见 接口参数 说明。
|
|
468
|
+
1. **主播移动麦位**:主播可以调用此接口将任意用户移动到指定麦位。此时 `userID` 传入目标用户的 ID,`targetIndex` 是目标麦位索引,`policy` 参数来指定如果目标麦位有人时的移动策略,详细参见 [接口参数](#moveusertoseat-.E6.8E.A5.E5.8F.A3.E5.8F.82.E6.95.B0.EF.BC.9A) 说明。
|
|
469
469
|
|
|
470
470
|
2. **普通上麦用户移动自己麦位**:普通上麦用户也可以调用此接口来移动自己。此时 `userID` 必须传入用户自己的 ID,`targetIndex` 传入想去的新麦位索引,此时 `policy` 参数无效,如果目标麦位有人时会报错并停止移动。
|
|
471
471
|
|
|
@@ -421,7 +421,7 @@ seatStore.unlockSeat(seatIndex: 2) { result in
|
|
|
421
421
|
主播和普通上麦用户可以调用 `moveUserToSeat(userID:targetIndex:policy:completion:)`移动麦位。
|
|
422
422
|
|
|
423
423
|
#### 实现方式:
|
|
424
|
-
1. **主播移动麦位**:主播可以调用此接口将任意用户移动到指定麦位。此时 `userID` 传入目标用户的 ID,`targetIndex` 是目标麦位索引,`policy` 参数来指定如果目标麦位有人时的移动策略,详细参见 接口参数 说明。
|
|
424
|
+
1. **主播移动麦位**:主播可以调用此接口将任意用户移动到指定麦位。此时 `userID` 传入目标用户的 ID,`targetIndex` 是目标麦位索引,`policy` 参数来指定如果目标麦位有人时的移动策略,详细参见 [接口参数](#227e92a5-7552-41ae-b57c-2dab5b7de234) 说明。
|
|
425
425
|
|
|
426
426
|
2. **普通上麦用户移动自己麦位**:普通上麦用户也可以调用此接口来移动自己。此时 `userID` 必须传入用户自己的 ID,`targetIndex` 传入想去的新麦位索引,此时 `policy` 参数无效,如果目标麦位有人时会报错并停止移动。
|
|
427
427
|
|
|
@@ -359,7 +359,7 @@ battleStore.exitBattle(battleID: battleID, completion: { [weak self] result in
|
|
|
359
359
|
|
|
360
360
|
### 场景二:主播发起带 PK 模式的连线
|
|
361
361
|
|
|
362
|
-
1. 主播在个人直播过程中,点击 PK 按钮,打开 UI
|
|
362
|
+
1. 主播在个人直播过程中,点击 PK 按钮,打开 UI 面板展示当前正在开播的主播列表(详见[《主播发起一场连线》的步骤 1](#1ce7ad55-e199-4098-a9bb-554c204fdd97))。
|
|
363
363
|
|
|
364
364
|
2. 主播选中其中一个主播,发起 PK 邀请。
|
|
365
365
|
|
|
@@ -506,7 +506,7 @@ coHostStore.coHostEventPublisher
|
|
|
506
506
|
|
|
507
507
|
#### 步骤 4. 自动进入 PK 状态
|
|
508
508
|
|
|
509
|
-
此步骤与 主播在连线后再发起 PK - 步骤 3 相同,此处不再赘述。
|
|
509
|
+
此步骤与 [主播在连线后再发起 PK - 步骤 3](#b775b648-c9e2-480c-8678-f7e419e32bfa) 相同,此处不再赘述。
|
|
510
510
|
|
|
511
511
|
## PK 分数更新与胜负判断
|
|
512
512
|
|
|
@@ -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
|
|
|
@@ -9,12 +9,12 @@
|
|
|
9
9
|
|
|
10
10
|
2. **配置工程权限:** 请在应用的 manifest.json 文件的 app-plus > distribute 节点下,确保添加了以下必要的权限:
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
- Android 平台(`android` 节点):在 `permissions` 数组中,请确保包含以下权限:
|
|
13
13
|
|
|
14
14
|
``` json
|
|
15
15
|
"<uses-permission android:name=\"android.permission.RECORD_AUDIO\" />"
|
|
16
16
|
```
|
|
17
|
-
|
|
17
|
+
- iOS 平台(ios 节点):在 `privacyDescription` 对象中,请确保包含以下描述:
|
|
18
18
|
|
|
19
19
|
``` json
|
|
20
20
|
"NSMicrophoneUsageDescription" : "应用需要访问您的麦克风以进行直播"
|
|
@@ -226,7 +226,7 @@ const handleJoinLive = () => {
|
|
|
226
226
|
|
|
227
227
|
#### **3. 构建麦位 UI 界面**
|
|
228
228
|
|
|
229
|
-
观众构建麦位 UI
|
|
229
|
+
观众构建麦位 UI 的流程与主播完全一致,请参考主播 [构建麦位 UI 界面](#**4.-.E6.9E.84.E5.BB.BA.E9.BA.A6.E4.BD.8D-ui-.E7.95.8C.E9.9D.A2**)。
|
|
230
230
|
|
|
231
231
|
#### **4. 退出语聊房**
|
|
232
232
|
|
|
@@ -255,7 +255,7 @@ const handleLeaveLive = () => {
|
|
|
255
255
|
|
|
256
256
|
### 运行效果
|
|
257
257
|
|
|
258
|
-
完成上述步骤后,即可完成一个最基础的语聊直播场景。您可以参考 丰富语聊场景 来完善语聊场景。
|
|
258
|
+
完成上述步骤后,即可完成一个最基础的语聊直播场景。您可以参考 [丰富语聊场景](#82dbc44c-8a8e-40e2-89b9-66070f4beb72) 来完善语聊场景。
|
|
259
259
|
|
|
260
260
|
## 功能进阶
|
|
261
261
|
|
|
@@ -319,8 +319,8 @@ watch(speakingUsers,(newSpeaker) => {
|
|
|
319
319
|
|
|
320
320
|
- 解决方案:
|
|
321
321
|
|
|
322
|
-
|
|
322
|
+
- 必须打包自定义基座:在开发调试原生插件时,不能使用标准基座,必须通过 `HBuilderX` > 运行 > 运行到手机或模拟器 > 制作自定义基座,然后选择这个自定义基座来运行。
|
|
323
323
|
|
|
324
|
-
|
|
324
|
+
- 检查权限:如本文档“准备工作”中所述,`manifest.json` 必须声明相机、麦克风等权限。
|
|
325
325
|
|
|
326
|
-
|
|
326
|
+
- 查看原生日志:这是终极调试手段。通过 `Android Studio (Logcat)` 或 `Xcode (Console)` 查看设备的原生日志,通常能发现最直接的错误信息。
|
|
@@ -77,7 +77,6 @@ onMounted(async () => {
|
|
|
77
77
|
});
|
|
78
78
|
</script>
|
|
79
79
|
|
|
80
|
-
<style scoped>.app{width:100vw;height:100vh;display:flex;justify-content:center;align-items:center;padding:20px;box-sizing:border-box}.chat-container{width:100%;max-width:500px;height:600px;border-radius:16px;display:flex;flex-direction:column;overflow:hidden}.chat-content{flex:1;overflow:hidden}.barrage-list{width:100%;height:100%}.chat-input{background-color:var(--bg-color-dialog);padding:16px}.barrage-input{width:100%}</style>
|
|
81
80
|
```
|
|
82
81
|
|
|
83
82
|
## 自定义组件
|
|
@@ -100,7 +99,7 @@ onMounted(async () => {
|
|
|
100
99
|
| | | | |
|
|
101
100
|
|
|
102
101
|
> **注意:**
|
|
103
|
-
> 使用 BarrageList 的默认消息组件时,表情消息会自动渲染为图片。但当您通过 `Message Props` 或 `message-item` Slot 接管自定义消息渲染时,message.textContent 中的表情编码(例如 [TUIEmoji_Flower])不会自动解析,需要您参考 如何处理自定义弹幕消息时的表情渲染 处理。
|
|
102
|
+
> 使用 BarrageList 的默认消息组件时,表情消息会自动渲染为图片。但当您通过 `Message Props` 或 `message-item` Slot 接管自定义消息渲染时,message.textContent 中的表情编码(例如 [TUIEmoji_Flower])不会自动解析,需要您参考 [如何处理自定义弹幕消息时的表情渲染](#3a3aa2ed-5af5-44f8-8e4f-d182393294b9) 处理。
|
|
104
103
|
>
|
|
105
104
|
|
|
106
105
|
#### **containerStyle + itemStyle** 调整样式
|
|
@@ -176,7 +175,6 @@ const getMessageText = (message: Barrage) => {
|
|
|
176
175
|
};
|
|
177
176
|
</script>
|
|
178
177
|
|
|
179
|
-
<style scoped>.custom-message{background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);color:white;padding:12px;border-radius:12px;margin:4px 0;box-shadow:0 2px 8px rgba(0,0,0,0.1);transition:transform 0.2s ease}.custom-message:hover{transform:translateY(-2px)}.message-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;font-size:12px;opacity:0.9}.user-name{font-weight:500;max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.message-time{font-size:11px;opacity:0.7}.message-content{font-size:14px;line-height:1.4;word-break:break-word}</style>
|
|
180
178
|
```
|
|
181
179
|
|
|
182
180
|
**步骤 2:在 BarrageList 中使用自定义组件**
|
|
@@ -268,7 +266,6 @@ function getGiftCount(message: { data?: string }): number {
|
|
|
268
266
|
}
|
|
269
267
|
</script>
|
|
270
268
|
|
|
271
|
-
<style scoped>.slot-text-item{font-size:12px;line-height:1.6;padding:6px 12px;border-radius:10px;background:rgba(255,255,255,0.05);word-break:break-word}.slot-owner-badge{display:inline-block;background:linear-gradient(135deg,#f59e0b,#ef4444);color:#fff;font-size:10px;font-weight:600;padding:1px 8px;border-radius:10px;margin-right:6px;vertical-align:middle;line-height:1.6}.slot-sender-name{color:rgba(167,139,250,0.85);font-weight:500;margin-right:4px}.slot-message-text{color:rgba(255,255,255,0.85)}.slot-gift-item{display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:14px;background:linear-gradient(135deg,rgba(255,0,128,0.15),rgba(255,140,0,0.12) 50%,rgba(168,85,247,0.1));border:1px solid rgba(255,0,128,0.25);box-shadow:0 0 12px rgba(255,0,128,0.1),inset 0 0 12px rgba(255,140,0,0.05)}.slot-gift-img{width:40px;height:40px;flex-shrink:0;object-fit:contain;filter:drop-shadow(0 0 6px rgba(255,140,0,0.5))}.slot-gift-info{display:flex;flex-direction:column;gap:2px;min-width:0}.slot-gift-sender{font-size:12px;color:rgba(255,255,255,0.8);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.slot-gift-detail{font-size:12px;color:rgba(255,255,255,0.5)}.slot-gift-name{color:#ffaa00;font-weight:700;text-shadow:0 0 8px rgba(255,170,0,0.4)}.slot-gift-count{color:#ff4081;font-weight:800;font-size:13px;margin-left:2px;text-shadow:0 0 8px rgba(255,64,129,0.4)}</style>
|
|
272
269
|
```
|
|
273
270
|
|
|
274
271
|
#### Props 速查表
|
|
@@ -316,7 +313,6 @@ function getGiftCount(message: { data?: string }): number {
|
|
|
316
313
|
<BarrageInput containerClass="cyberpunk-input" />
|
|
317
314
|
</template>
|
|
318
315
|
|
|
319
|
-
<style>.cyberpunk-input{background:linear-gradient(135deg,rgba(15,10,40,0.9),rgba(30,15,60,0.85))!important;border:1.5px solid transparent!important;border-radius:16px!important;padding:8px 18px!important;box-shadow:0 0 15px rgba(139,92,246,0.2),0 0 30px rgba(255,0,128,0.08),inset 0 1px 0 rgba(255,255,255,0.05)!important;transition:box-shadow .3s ease!important;border-image:linear-gradient(135deg,#ff0080,#7c3aed,#06b6d4) 1!important;border-image-slice:1!important}.cyberpunk-input:focus-within{box-shadow:0 0 24px rgba(139,92,246,0.35),0 0 48px rgba(255,0,128,0.12),inset 0 1px 0 rgba(255,255,255,0.08)!important}</style>
|
|
320
316
|
```
|
|
321
317
|
|
|
322
318
|
#### 调整尺寸
|
|
@@ -506,7 +502,6 @@ const drawLottery = async () => {
|
|
|
506
502
|
subscribeEvent(BarrageEvent.onBarrageReceived, handleLotteryBarrage);
|
|
507
503
|
</script>
|
|
508
504
|
|
|
509
|
-
<style scoped>.lottery-panel{padding:8px 0;border-top:1px solid rgba(255,255,255,0.1);display:flex;justify-content:center;gap:10px;align-items:center}.lottery-panel button{padding:6px 20px;border:none;border-radius:20px;font-size:13px;font-weight:600;cursor:pointer;color:#fff;background:linear-gradient(135deg,#ff0080,#7c3aed);box-shadow:0 0 12px rgba(255,0,128,0.2);transition:all .2s ease}.lottery-panel button:hover:not(:disabled){box-shadow:0 0 20px rgba(255,0,128,0.35);transform:translateY(-1px)}.lottery-panel button:disabled{opacity:.5;cursor:not-allowed}.lottery-panel span{font-size:12px;color:rgba(255,255,255,0.7)}</style>
|
|
510
505
|
```
|
|
511
506
|
|
|
512
507
|
#### 2. 观众端:参与抽奖
|
|
@@ -593,7 +588,6 @@ const handleLotteryBarrage = (barrage: any) => {
|
|
|
593
588
|
subscribeEvent(BarrageEvent.onBarrageReceived, handleLotteryBarrage);
|
|
594
589
|
</script>
|
|
595
590
|
|
|
596
|
-
<style scoped>.lottery-bar{display:flex;align-items:center;gap:10px;padding:8px 16px;border-top:1px solid rgba(255,255,255,0.1)}.lottery-bar button{padding:6px 16px;border:none;border-radius:20px;font-size:13px;font-weight:600;cursor:pointer;color:#fff;background:linear-gradient(135deg,#ff0080,#7c3aed);box-shadow:0 0 12px rgba(255,0,128,0.2);transition:all .2s ease}.lottery-bar button:hover:not(:disabled){box-shadow:0 0 20px rgba(255,0,128,0.35);transform:translateY(-1px)}.lottery-bar button:disabled{opacity:.6;cursor:not-allowed;background:rgba(139,92,246,0.3);box-shadow:none}.lottery-bar span{font-size:12px;color:rgba(255,255,255,0.5)}.lottery-winner-banner{padding:10px 14px;text-align:center;font-size:13px;font-weight:500;color:#fff;background:linear-gradient(135deg,rgba(245,158,11,0.15),rgba(239,68,68,0.1));border:1px solid rgba(245,158,11,0.25);border-radius:12px;margin:4px 0;animation:banner-pop .4s ease}.lottery-winner-banner .winner-name{color:#fbbf24;font-weight:700}@keyframes banner-pop{0%{opacity:0;transform:scale(.9)}100%{opacity:1;transform:scale(1)}}</style>
|
|
597
591
|
```
|
|
598
592
|
|
|
599
593
|
通过 [BarrageList](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#module-BarrageListComponent) 的 `message-item` 插槽对不同类型的抽奖消息进行差异化渲染。
|
|
@@ -636,7 +630,6 @@ function getWinnerName(message: { data?: string }): string {
|
|
|
636
630
|
}
|
|
637
631
|
</script>
|
|
638
632
|
|
|
639
|
-
<style scoped>.lottery-sys-msg{font-size:12px;padding:8px 14px;border-radius:12px;background:linear-gradient(135deg,rgba(255,0,128,0.12),rgba(168,85,247,0.1));border:1px solid rgba(255,0,128,0.2);color:rgba(255,200,50,0.95);font-weight:500;text-align:center}.lottery-join-msg{font-size:12px;padding:6px 12px;border-radius:10px;background:rgba(139,92,246,0.08);color:rgba(167,139,250,0.85)}.lottery-result-msg{font-size:13px;padding:10px 14px;border-radius:12px;background:linear-gradient(135deg,rgba(245,158,11,0.15),rgba(239,68,68,0.1));border:1px solid rgba(245,158,11,0.25);color:#fff;font-weight:500;text-align:center}.winner-name{color:#fbbf24;font-weight:700}.normal-msg{font-size:12px;line-height:1.6;padding:4px 0;word-break:break-word}.msg-sender{color:rgba(167,139,250,0.85);font-weight:500;margin-right:4px}</style>
|
|
640
633
|
```
|
|
641
634
|
|
|
642
635
|
## 常见问题
|
|
@@ -844,14 +837,6 @@ import { parseEmoji } from './utils/emojiParser';
|
|
|
844
837
|
defineProps<{ message: Barrage }>();
|
|
845
838
|
</script>
|
|
846
839
|
|
|
847
|
-
<style scoped>
|
|
848
|
-
.emoji {
|
|
849
|
-
width: 20px;
|
|
850
|
-
height: 20px;
|
|
851
|
-
vertical-align: middle;
|
|
852
|
-
margin: 0 1px;
|
|
853
|
-
}
|
|
854
|
-
</style>
|
|
855
840
|
```
|
|
856
841
|
|
|
857
842
|
**在 Slot 插槽中使用**
|
|
@@ -878,14 +863,6 @@ import { BarrageList } from 'tuikit-atomicx-vue3';
|
|
|
878
863
|
import { parseEmoji } from './utils/emojiParser';
|
|
879
864
|
</script>
|
|
880
865
|
|
|
881
|
-
<style scoped>
|
|
882
|
-
.emoji {
|
|
883
|
-
width: 20px;
|
|
884
|
-
height: 20px;
|
|
885
|
-
vertical-align: middle;
|
|
886
|
-
margin: 0 1px;
|
|
887
|
-
}
|
|
888
|
-
</style>
|
|
889
866
|
```
|
|
890
867
|
|
|
891
868
|
**解析原理**
|
|
@@ -71,7 +71,6 @@ onMounted(async () => {
|
|
|
71
71
|
});
|
|
72
72
|
</script>
|
|
73
73
|
|
|
74
|
-
<style>.live-audience-container{display:flex;height:100%;width:300px;padding:20px}.live-audience-list{width:100%;height:100%}</style>
|
|
75
74
|
```
|
|
76
75
|
|
|
77
76
|
## 自定义组件
|
|
@@ -119,7 +118,6 @@ const vipUserIds = ['user_vip_001', 'user_vip_002'];
|
|
|
119
118
|
const isVip = (userId: string) => vipUserIds.includes(userId);
|
|
120
119
|
</script>
|
|
121
120
|
|
|
122
|
-
<style scoped>.custom-mark{display:flex;align-items:center;gap:4px}.vip-badge{background:linear-gradient(135deg,#ffd700,#ffb347);color:#fff;font-size:10px;font-weight:600;padding:2px 6px;border-radius:4px}.muted-badge{font-size:14px;opacity:.7}</style>
|
|
123
121
|
```
|
|
124
122
|
|
|
125
123
|
### 完全接管列表项渲染(audience-item 插槽)
|
|
@@ -153,7 +151,6 @@ const isVip = (userId: string) => vipUserIds.includes(userId);
|
|
|
153
151
|
import { LiveAudienceList } from 'tuikit-atomicx-vue3';
|
|
154
152
|
</script>
|
|
155
153
|
|
|
156
|
-
<style scoped>.custom-audience-item{display:flex;align-items:center;gap:10px;padding:8px 12px;border-radius:10px;background:rgba(255,255,255,0.05)}.medal{font-size:20px}.rank-number{font-size:14px;font-weight:600;color:rgba(255,255,255,0.5);min-width:24px;text-align:center}.avatar{width:36px;height:36px;border-radius:50%;object-fit:cover}.name{font-size:14px;color:rgba(255,255,255,0.85);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}</style>
|
|
157
154
|
```
|
|
158
155
|
|
|
159
156
|
### props 速查表
|
|
@@ -46,7 +46,6 @@ LiveView 提供以下插槽,用于自定义视频流上层的 UI 内容。
|
|
|
46
46
|
</template>
|
|
47
47
|
</LiveView>
|
|
48
48
|
|
|
49
|
-
<style scoped>.watermark-container{position:absolute;inset:0;overflow:hidden;pointer-events:none;user-select:none}.watermark-grid{position:absolute;top:-50%;left:-50%;width:200%;height:200%;display:flex;flex-wrap:wrap;align-content:center;justify-content:center;gap:60px 80px;transform:rotate(-30deg)}.watermark-item{color:rgba(255,255,255,.15);font-size:18px;font-weight:700;letter-spacing:2px;white-space:nowrap}</style>
|
|
50
49
|
```
|
|
51
50
|
|
|
52
51
|
##### 自定义刷新 Loading 示例
|
|
@@ -81,7 +80,6 @@ async function handleRefresh() {
|
|
|
81
80
|
}
|
|
82
81
|
</script>
|
|
83
82
|
|
|
84
|
-
<style scoped>.refresh-overlay{display:flex;flex-direction:column;align-items:center;gap:12px;pointer-events:none}.refresh-logo{width:40px;height:40px;object-fit:contain}.refresh-spinner{width:32px;height:32px;border:3px solid rgba(255,255,255,.2);border-top-color:#fff;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.refresh-text{color:rgba(255,255,255,.8);font-size:14px}.watermark{color:rgba(255,255,255,.3);font-size:24px;font-weight:700;letter-spacing:2px;pointer-events:none;user-select:none;text-shadow:0 2px 8px rgba(0,0,0,.3)}</style>
|
|
85
83
|
```
|
|
86
84
|
|
|
87
85
|
#### streamViewUI 插槽
|
|
@@ -109,7 +107,6 @@ const handleApplyForSeat = (seatIndex: number) => {
|
|
|
109
107
|
};
|
|
110
108
|
</script>
|
|
111
109
|
|
|
112
|
-
<style scoped>.custom-stream-ui{position:absolute;bottom:0;left:0;right:0;padding:8px 12px;background:linear-gradient(transparent,rgba(0,0,0,.6));pointer-events:none}.custom-stream-ui .user-name{color:#fff;font-size:14px;font-weight:500}</style>
|
|
113
110
|
```
|
|
114
111
|
|
|
115
112
|
##### 自定义连麦 UI 示例
|
|
@@ -174,7 +171,6 @@ const isCameraOn = (userInfo: SeatUserInfo) => {
|
|
|
174
171
|
};
|
|
175
172
|
</script>
|
|
176
173
|
|
|
177
|
-
<style scoped>.stream-overlay{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;box-sizing:border-box;border-radius:6px;overflow:hidden}.top-bar{position:absolute;top:6px;left:6px;z-index:2}.role-badge{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:10px;font-size:10px;font-weight:500;line-height:16px;background:rgba(0,0,0,.45);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);color:rgba(255,255,255,.85)}.anchor-badge{background:linear-gradient(135deg,#ff6b35,#e8461e);color:#fff}.badge-dot{width:5px;height:5px;border-radius:50%;background:currentColor;flex-shrink:0}.anchor-badge .badge-dot{background:#fff;animation:pulse-dot 2s ease-in-out infinite}@keyframes pulse-dot{0%,100%{opacity:1}50%{opacity:.4}}.bottom-bar{position:absolute;bottom:0;left:0;right:0;z-index:2;display:flex;align-items:flex-end;justify-content:space-between;padding:28px 8px 6px;background:linear-gradient(to top,rgba(0,0,0,.6) 0%,rgba(0,0,0,.2) 50%,transparent 100%)}.user-info{flex:1;min-width:0}.user-name-text{display:block;color:#fff;font-size:11px;font-weight:500;line-height:16px;text-shadow:0 1px 3px rgba(0,0,0,.7);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.device-icons{display:flex;align-items:center;gap:3px;flex-shrink:0;margin-left:6px}.icon-wrapper{position:relative;width:16px;height:16px;color:rgba(255,255,255,.9);transition:color .2s ease}.icon-wrapper.off{color:rgba(255,255,255,.3)}.icon-wrapper svg{position:absolute;top:0;left:0;width:100%;height:100%}.icon-wrapper .slash-line{z-index:1}</style>
|
|
178
174
|
```
|
|
179
175
|
|
|
180
176
|
### 自定义控制栏操作按钮
|
|
@@ -367,7 +363,6 @@ function startAutoHide() {
|
|
|
367
363
|
}
|
|
368
364
|
</script>
|
|
369
365
|
|
|
370
|
-
<style scoped>.my-player{position:relative;width:100%;height:100%}.my-controls{position:absolute;bottom:0;left:0;right:0;z-index:20;pointer-events:auto;display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background:linear-gradient(to top,rgba(0,0,0,.75) 0%,rgba(0,0,0,.3) 70%,transparent 100%);transition:opacity .3s ease,transform .3s ease}.my-controls.hidden{opacity:0;transform:translateY(8px);pointer-events:none}.controls-left,.controls-right{display:flex;align-items:center;gap:4px}.ctrl-btn{display:flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:none;border-radius:6px;background:transparent;color:rgba(255,255,255,.85);cursor:pointer;transition:background .15s ease,color .15s ease}.ctrl-btn:hover{background:rgba(255,255,255,.12);color:#fff}.ctrl-btn:active{background:rgba(255,255,255,.2)}.ctrl-btn svg{width:18px;height:18px}.volume-group{display:flex;align-items:center;gap:2px}.volume-slider{width:70px;height:3px;-webkit-appearance:none;appearance:none;background:rgba(255,255,255,.25);border-radius:2px;outline:none;cursor:pointer}.volume-slider::-webkit-slider-thumb{-webkit-appearance:none;width:10px;height:10px;border-radius:50%;background:#fff;cursor:pointer;box-shadow:0 0 4px rgba(0,0,0,.3)}.resolution-select{height:28px;padding:0 8px;border:1px solid rgba(255,255,255,.15);border-radius:6px;background:rgba(0,0,0,.4);color:rgba(255,255,255,.85);font-size:11px;cursor:pointer;outline:none}.resolution-select:hover{border-color:rgba(255,255,255,.35)}.resolution-select option{background:#1a1a1a;color:#fff}</style>
|
|
371
366
|
```
|
|
372
367
|
|
|
373
368
|
### 播放控制 API 汇总
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
|API|描述|
|
|
4
4
|
|---------|---------|
|
|
5
|
-
|registerPush|注册推送服务, (必须在 App 用户同意了隐私政策后,再调用该接口使用推送服务)。|
|
|
6
|
-
|unRegisterPush|反注册关闭推送服务。|
|
|
7
|
-
|setRegistrationID|RegistrationID 是推送接收设备的唯一标识 ID。默认情况下,注册推送服务成功时自动生成该 ID,同时也支持您自定义设置。您可根据 RegistrationID 向指定设备推送消息。需要注意的是,卸载并重新安装设备会更改 RegistrationID,因此需要在注册推送服务之前调用 setRegistrationID 接口。|
|
|
8
|
-
|getRegistrationID|在成功注册推送服务后,调用此接口可获取推送接收设备的唯一标识 ID,即 RegistrationID。|
|
|
9
|
-
|addPushListener|添加 Push 监听器。|
|
|
10
|
-
|removePushListener|移除 Push 监听器。|
|
|
11
|
-
|disablePostNotificationInForeground|应用在前台时,开/关通知栏通知(默认开)。|
|
|
5
|
+
|[registerPush](#c624c0f8-1505-4d15-8a44-dcacbaaac784)|注册推送服务, (必须在 App 用户同意了隐私政策后,再调用该接口使用推送服务)。|
|
|
6
|
+
|[unRegisterPush](#a6df0ca4-f85e-4678-8db4-1498fb67606b)|反注册关闭推送服务。|
|
|
7
|
+
|[setRegistrationID](#e54d1228-3bc5-4053-bb2a-c72d3320c7db)|RegistrationID 是推送接收设备的唯一标识 ID。默认情况下,注册推送服务成功时自动生成该 ID,同时也支持您自定义设置。您可根据 RegistrationID 向指定设备推送消息。需要注意的是,卸载并重新安装设备会更改 RegistrationID,因此需要在注册推送服务之前调用 setRegistrationID 接口。|
|
|
8
|
+
|[getRegistrationID](#2557dabd-b043-4f66-bb82-34315459c8b7)|在成功注册推送服务后,调用此接口可获取推送接收设备的唯一标识 ID,即 RegistrationID。|
|
|
9
|
+
|[addPushListener](#8efda8f7-f11e-40d3-a9ee-9c2fbad7f63e)|添加 Push 监听器。|
|
|
10
|
+
|[removePushListener](#4ee794ce-67d1-4b96-b7a5-bffe18f6d521)|移除 Push 监听器。|
|
|
11
|
+
|[disablePostNotificationInForeground](#f8fe8ed3-ce77-4241-9eb1-3fe7e0ba16d2)|应用在前台时,开/关通知栏通知(默认开)。|
|
|
12
12
|
|
|
13
13
|
## 接口详情
|
|
14
14
|
|
|
@@ -78,7 +78,7 @@ addPushListener(listener: TIMPushListener): void;
|
|
|
78
78
|
|
|
79
79
|
|参数|类型|说明|
|
|
80
80
|
|---------|---------|---------|
|
|
81
|
-
|listener|TIMPushListener|推送事件处理方法。|
|
|
81
|
+
|listener|[TIMPushListener](#cff83260-e519-4071-b968-e427b2517ff1)|推送事件处理方法。|
|
|
82
82
|
|
|
83
83
|
### 移除 Push 监听器
|
|
84
84
|
|
|
@@ -91,7 +91,7 @@ removePushListener(listener: TIMPushListener): void;
|
|
|
91
91
|
|
|
92
92
|
|参数|类型|说明|
|
|
93
93
|
|---------|---------|---------|
|
|
94
|
-
|listener|TIMPushListener|推送事件处理方法。|
|
|
94
|
+
|listener|[TIMPushListener](#cff83260-e519-4071-b968-e427b2517ff1)|推送事件处理方法。|
|
|
95
95
|
|
|
96
96
|
### 应用在前台时,开/关通知栏通知
|
|
97
97
|
|
|
@@ -8,24 +8,24 @@ public class PushManager:推送插件接口类。
|
|
|
8
8
|
|
|
9
9
|
|API|描述|
|
|
10
10
|
|---------|---------|
|
|
11
|
-
|RegisterPush|注册推送服务(必须在 App 用户同意了隐私政策后,再调用该接口使用推送服务)。|
|
|
12
|
-
|UnRegisterPush|关闭推送服务。|
|
|
13
|
-
|SetRegistrationID|RegistrationID 是推送接收设备的唯一标识 ID。默认情况下,注册推送服务成功时自动生成该 ID,同时也支持您自定义设置。您可根据 RegistrationID 向指定设备推送消息。需要注意的是,卸载并重新安装设备会更改 RegistrationID,因此需要在注册推送服务之前调用 setRegistrationID 接口。|
|
|
14
|
-
|GetRegistrationID|在成功注册推送服务后,可通过调用 getRegistrationID 接口获取推送接收设备的唯一标识 ID,即RegistrationID。您可根据 RegistrationID 向指定设备推送消息。|
|
|
11
|
+
|[RegisterPush](#RegisterPush)|注册推送服务(必须在 App 用户同意了隐私政策后,再调用该接口使用推送服务)。|
|
|
12
|
+
|[UnRegisterPush](#UnRegisterPush)|关闭推送服务。|
|
|
13
|
+
|[SetRegistrationID](#SetRegistrationID)|RegistrationID 是推送接收设备的唯一标识 ID。默认情况下,注册推送服务成功时自动生成该 ID,同时也支持您自定义设置。您可根据 RegistrationID 向指定设备推送消息。需要注意的是,卸载并重新安装设备会更改 RegistrationID,因此需要在注册推送服务之前调用 setRegistrationID 接口。|
|
|
14
|
+
|[GetRegistrationID](#GetRegistrationID)|在成功注册推送服务后,可通过调用 getRegistrationID 接口获取推送接收设备的唯一标识 ID,即RegistrationID。您可根据 RegistrationID 向指定设备推送消息。|
|
|
15
15
|
|
|
16
16
|
#### Push 全局监听接口
|
|
17
17
|
|
|
18
18
|
|API|描述|
|
|
19
19
|
|---------|---------|
|
|
20
|
-
|AddPushListener|添加 Push 监听器。|
|
|
21
|
-
|RemovePushListener|移除 Push 监听器。|
|
|
20
|
+
|[AddPushListener](#AddPushListener)|添加 Push 监听器。|
|
|
21
|
+
|[RemovePushListener](#RemovePushListener)|移除 Push 监听器。|
|
|
22
22
|
|
|
23
23
|
#### 自定义配置接口
|
|
24
24
|
|
|
25
25
|
|API|描述|
|
|
26
26
|
|---------|---------|
|
|
27
|
-
|ForceUseFCMPushChannel|指定设备离线推送使用 FCM 通道,需要在注册推送服务之前调用。|
|
|
28
|
-
|DisablePostNotificationInForeground|关闭 App 在前台时弹出通知栏。|
|
|
27
|
+
|[ForceUseFCMPushChannel](#ForceUseFCMPushChannel)|指定设备离线推送使用 FCM 通道,需要在注册推送服务之前调用。|
|
|
28
|
+
|[DisablePostNotificationInForeground](#DisablePostNotificationInForeground)|关闭 App 在前台时弹出通知栏。|
|
|
29
29
|
|
|
30
30
|
### 接口详情
|
|
31
31
|
|
|
@@ -59,11 +59,11 @@ public class PushManager:推送插件接口类。
|
|
|
59
59
|
|
|
60
60
|
注册推送服务成功后,获取推送 ID 标识,即 RegistrationID。
|
|
61
61
|
|
|
62
|
-
##### abstract void AddPushListener(PushListener listener)
|
|
62
|
+
##### abstract void AddPushListener([PushListener](#PushListener) listener)
|
|
63
63
|
|
|
64
64
|
添加 Push 监听器
|
|
65
65
|
|
|
66
|
-
##### abstract void RemovePushListener(PushListener listener)
|
|
66
|
+
##### abstract void RemovePushListener([PushListener](#PushListener) listener)
|
|
67
67
|
|
|
68
68
|
移除 Push 监听器
|
|
69
69
|
|
|
@@ -8,24 +8,24 @@ class PushManager:推送插件接口类。
|
|
|
8
8
|
|
|
9
9
|
|API|描述|
|
|
10
10
|
|---------|---------|
|
|
11
|
-
|RegisterPush|注册推送服务(必须在 App 用户同意了隐私政策后,再调用该接口使用推送服务)。|
|
|
12
|
-
|UnRegisterPush|关闭推送服务。|
|
|
13
|
-
|SetRegistrationID|RegistrationID 是推送接收设备的唯一标识 ID。默认情况下,注册推送服务成功时自动生成该 ID,同时也支持您自定义设置。您可根据 RegistrationID 向指定设备推送消息。需要注意的是,卸载并重新安装设备会更改 RegistrationID,因此需要在注册推送服务之前调用 setRegistrationID 接口。|
|
|
14
|
-
|GetRegistrationID|在成功注册推送服务后,可通过调用 getRegistrationID 接口获取推送接收设备的唯一标识 ID,即RegistrationID。您可根据 RegistrationID 向指定设备推送消息。|
|
|
11
|
+
|[RegisterPush](#RegisterPush)|注册推送服务(必须在 App 用户同意了隐私政策后,再调用该接口使用推送服务)。|
|
|
12
|
+
|[UnRegisterPush](#UnRegisterPush)|关闭推送服务。|
|
|
13
|
+
|[SetRegistrationID](#SetRegistrationID)|RegistrationID 是推送接收设备的唯一标识 ID。默认情况下,注册推送服务成功时自动生成该 ID,同时也支持您自定义设置。您可根据 RegistrationID 向指定设备推送消息。需要注意的是,卸载并重新安装设备会更改 RegistrationID,因此需要在注册推送服务之前调用 setRegistrationID 接口。|
|
|
14
|
+
|[GetRegistrationID](#GetRegistrationID)|在成功注册推送服务后,可通过调用 getRegistrationID 接口获取推送接收设备的唯一标识 ID,即RegistrationID。您可根据 RegistrationID 向指定设备推送消息。|
|
|
15
15
|
|
|
16
16
|
#### Push 全局监听接口
|
|
17
17
|
|
|
18
18
|
|API|描述|
|
|
19
19
|
|---------|---------|
|
|
20
|
-
|AddPushListener|添加 Push 监听器。|
|
|
21
|
-
|RemovePushListener|移除 Push 监听器。|
|
|
20
|
+
|[AddPushListener](#addPushListener)|添加 Push 监听器。|
|
|
21
|
+
|[RemovePushListener](#RemovePushListener)|移除 Push 监听器。|
|
|
22
22
|
|
|
23
23
|
#### 自定义配置接口
|
|
24
24
|
|
|
25
25
|
|API|描述|
|
|
26
26
|
|---------|---------|
|
|
27
|
-
|ForceUseFCMPushChannel|指定设备离线推送使用 FCM 通道,需要在注册推送服务之前调用。|
|
|
28
|
-
|DisablePostNotificationInForeground|关闭 App 在前台时弹出通知栏。|
|
|
27
|
+
|[ForceUseFCMPushChannel](#ForceUseFCMPushChannel)|指定设备离线推送使用 FCM 通道,需要在注册推送服务之前调用。|
|
|
28
|
+
|[DisablePostNotificationInForeground](#DisablePostNotificationInForeground)|关闭 App 在前台时弹出通知栏。|
|
|
29
29
|
|
|
30
30
|
### 接口详情
|
|
31
31
|
|
|
@@ -97,9 +97,9 @@ class PushListener:Push 监听器类
|
|
|
97
97
|
|
|
98
98
|
|API|描述|
|
|
99
99
|
|---------|---------|
|
|
100
|
-
|OnRecvPushMessage|收到 Push 消息。|
|
|
101
|
-
|OnRevokePushMessage|收到 Push 消息撤回的通知。|
|
|
102
|
-
|OnNotificationClicked|点击通知栏消息回调。|
|
|
100
|
+
|[OnRecvPushMessage](#OnRecvPushMessage)|收到 Push 消息。|
|
|
101
|
+
|[OnRevokePushMessage](#OnRevokePushMessage)|收到 Push 消息撤回的通知。|
|
|
102
|
+
|[OnNotificationClicked](#OnNotificationClicked)|点击通知栏消息回调。|
|
|
103
103
|
|
|
104
104
|
### 接口详情
|
|
105
105
|
|
|
@@ -36,11 +36,11 @@
|
|
|
36
36
|
|
|
37
37
|
2. 为您的应用创建所需的通知类别:
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
1. 点击**选择分类**,详细的消息类型说明请参考[《小米推送消息分类新规》](https://dev.mi.com/xiaomihyperos/documentation/detail)。
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
2. 按以上新规要求完整填写相应信息。
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
3. 提交审核。
|
|
44
44
|
|
|
45
45
|
该环节您最多可同时创建8个不同分类的通知类别,我们会在3-5个工作日内完成审核。后续您可在**推送运营平台** > **消息分类管理**中维护应用的通知类别。
|
|
46
46
|
|