@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
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
本文将介绍如何快速接入 TUICallKit 组件。您可以在 10 分钟内完成以下关键步骤,最终获得一个功能完备的音视频通话界面。
|
|
2
|
+
|
|
3
|
+
> **说明:**
|
|
4
|
+
> 自 2025 年 5 月 1 日起,由于 uni-app 官方限制,CallKit 原生语言插件已终止迭代,为保障业务持续稳定运行,现提供 CallKit UTS 插件方案。
|
|
5
|
+
>
|
|
6
|
+
> CallKit UTS 插件核心优势:
|
|
7
|
+
>
|
|
8
|
+
> - 支持自定义 UI、深度界面定制。
|
|
9
|
+
> - 支持 uni-app 项目。
|
|
10
|
+
> - 提供插件版本锁定功能,避免因更新导致兼容性问题。
|
|
11
|
+
|
|
12
|
+
## 准备工作
|
|
13
|
+
|
|
14
|
+
### 环境要求
|
|
15
|
+
|
|
16
|
+
> **说明:**
|
|
17
|
+
> HBuilderX 4.64 和 4.65 版本对 UTS 插件打包存在已知兼容性问题,建议使用 4.66 或更高版本。
|
|
18
|
+
>
|
|
19
|
+
|
|
20
|
+
- [HBuilderX](https://www.dcloud.io/hbuilderx.html):HBuilderX 是 **uni-app 官方**的集成开发环境(IDE),我们需要用它来导入、配置和运行我们的 Demo。
|
|
21
|
+
|
|
22
|
+
- 2个移动设备: Android 5.0 以上的设备 / iOS 13.0 及以上设备。
|
|
23
|
+
|
|
24
|
+
### 开通服务
|
|
25
|
+
|
|
26
|
+
您需要开通腾讯云服务,以获取应用所需的唯一身份标识和密钥。 。
|
|
27
|
+
|
|
28
|
+
## 代码集成
|
|
29
|
+
|
|
30
|
+
### **步骤 1:下载 TUICallKit 源码**
|
|
31
|
+
|
|
32
|
+
【Vue3】
|
|
33
|
+
1. **克隆项目源码。**
|
|
34
|
+
|
|
35
|
+
``` bash
|
|
36
|
+
git clone https://github.com/Tencent-RTC/TUIKit_uni-app.git
|
|
37
|
+
```
|
|
38
|
+
2. **导入 atomic-x 组件。**
|
|
39
|
+
|
|
40
|
+
- 将源码中 `TUIKit_uni-app/App/uni_modules` 目录下的 `tuikit-atomic-x` 文件夹,完整拷贝到您项目根目录下的 `uni_modules` 文件夹中。
|
|
41
|
+
|
|
42
|
+
- 将源码中 `TUIKit_uni-app/App/components` 下的文件,完整地拷贝到您项目的 `components` 文件夹中。
|
|
43
|
+
|
|
44
|
+
- 将源码中 `TUIKit_uni-app/App/static` 目录下的文件,完整拷贝到您项目根目录下的同名文件夹下。
|
|
45
|
+
|
|
46
|
+
- 将源码中 `TUIKit_uni-app/App/debug` 文件夹拷贝到您项目的根目录下,这个目录提供可以方便您在客户端快速生成的 **UserSig** 的快捷函数。
|
|
47
|
+
|
|
48
|
+
3. **合并 App.vue 配置。**
|
|
49
|
+
|
|
50
|
+
**TUIKit_uni-app/App/App.vue** 文件中包含通话能力的初始化逻辑,因此您需要将 **TUIKit_uni-app/App/App.vue** 文件和您项目下的 **App.vue** 文件进行合并。
|
|
51
|
+
|
|
52
|
+
> **注意:**
|
|
53
|
+
>
|
|
54
|
+
> 不要直接覆盖 **App.vue** 文件! 打开源码中的 **TUIKit_uni-app/App/App.vue**, 将其 `<script>` 部分的 ts 内容追加到您自己项目的 **App.vue** 的 `<script>` 标签内。
|
|
55
|
+
>
|
|
56
|
+
|
|
57
|
+
【Vue2】
|
|
58
|
+
1. **安装 TUIKit 插件。**
|
|
59
|
+
|
|
60
|
+
进入[【官方】腾讯云聊天+通话+直播响应式 SDK](https://ext.dcloud.net.cn/plugin)。点击【下载插件并导入 HBuilderX】,将插件导入您的项目中。
|
|
61
|
+
|
|
62
|
+
2. **导入 atomic-x 组件。**
|
|
63
|
+
|
|
64
|
+
1. **转化兼容模式**:仅 Vue2 项目,Vue3 项目可忽略。
|
|
65
|
+
|
|
66
|
+
> **说明:**
|
|
67
|
+
>
|
|
68
|
+
> 该脚本用于将插件源码中 Vue3 的 Composition API 写法自动转换为 Vue2 的 Options API 写法,以确保在 Vue2 项目中正常运行。
|
|
69
|
+
>
|
|
70
|
+
|
|
71
|
+
``` bash
|
|
72
|
+
node ./uni_modules/tuikit-atomic-x/scripts/switch-to-compatible-mode.js
|
|
73
|
+
```
|
|
74
|
+
2. **拷贝静态资源**:将 `uni_modules/tuikit-atomic-x/quickstart/` 下的 `static/*` 拷贝到项目 `static` 目录下。
|
|
75
|
+
|
|
76
|
+
【Mac 端】
|
|
77
|
+
``` java
|
|
78
|
+
cp -r uni_modules/tuikit-atomic-x/quickstart/static/* static/
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
【Windows 端】
|
|
82
|
+
``` bash
|
|
83
|
+
xcopy /E /I /Y "uni_modules\tuikit-atomic-x\quickstart\static\*" "static\"
|
|
84
|
+
```
|
|
85
|
+
3. **合并 App.vue 配置。**
|
|
86
|
+
|
|
87
|
+
通话能力的初始化需要在应用唤醒的时候进行,因此需要您将以下代码和您项目中的 `App.vue` 中的逻辑进行合并处理。
|
|
88
|
+
``` typescript
|
|
89
|
+
import { initCallService } from '@/uni_modules/tuikit-atomic-x/server/callService';
|
|
90
|
+
export default {
|
|
91
|
+
onLaunch: function() {
|
|
92
|
+
initCallService()
|
|
93
|
+
console.log('App Launch')
|
|
94
|
+
},
|
|
95
|
+
onShow: function() {
|
|
96
|
+
console.log('App Show')
|
|
97
|
+
},
|
|
98
|
+
onHide: function() {
|
|
99
|
+
console.log('App Hide')
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### 步骤 2:工程配置
|
|
105
|
+
1. 配置 `manifest.json`。
|
|
106
|
+
|
|
107
|
+
打开您项目的 **manifest.json** 文件,在 **app-plus** > **distribute** 节点下,确保添加了以下必要的权限:
|
|
108
|
+
|
|
109
|
+
- Android 平台(`Android` 节点):在 `permissions` 数组中,请确保包含以下权限:
|
|
110
|
+
|
|
111
|
+
``` json
|
|
112
|
+
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
|
|
113
|
+
"<uses-permission android:name=\"android.permission.RECORD_AUDIO\" />",
|
|
114
|
+
"<uses-permission android:name=\"android.permission.INTERNET\"/>",
|
|
115
|
+
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
|
|
116
|
+
"<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
|
|
117
|
+
"<uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\"/>",
|
|
118
|
+
"<uses-permission android:name=\"android.permission.VIBRATE\"/>"
|
|
119
|
+
```
|
|
120
|
+
- iOS 平台(`iOS` 节点):在 `privacyDescription` 对象中,请确保包含以下描述:
|
|
121
|
+
|
|
122
|
+
``` json
|
|
123
|
+
"NSCameraUsageDescription" : "应用需要访问您的相机以进行通话",
|
|
124
|
+
"NSMicrophoneUsageDescription" : "应用需要访问您的麦克风以进行通话"
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
在 `UIBackgroundModes` 数组中,添加 `audio` 以支持后台播放音频。
|
|
128
|
+
|
|
129
|
+
``` json
|
|
130
|
+
"UIBackgroundModes" : [ "audio" ]
|
|
131
|
+
```
|
|
132
|
+
2. 制作自定义基座。
|
|
133
|
+
|
|
134
|
+
> **说明:**
|
|
135
|
+
>
|
|
136
|
+
> 由于 TUICallKit 包含原生代码(UTS 插件),您**必须**制作自定义调试基座才能在真机上运行。
|
|
137
|
+
>
|
|
138
|
+
|
|
139
|
+
1. 在 HBuilderX 顶部菜单选择**运行** > **运行到手机或模拟器** > **制作自定义调试基座**。
|
|
140
|
+
|
|
141
|
+
2. 制作成功后,再次选择**运行** > **运行到手机或模拟器**,在弹窗中勾选**使用自定义调试基座**后运行到您的手机。
|
|
142
|
+
|
|
143
|
+
具体操作指引参见 跑通 Demo 的步骤3。
|
|
144
|
+
|
|
145
|
+
### 步骤 3:完成登录
|
|
146
|
+
|
|
147
|
+
集成完成后,您需要完成登录。在您项目中需要使用到通话能力的地方进行登录,这是**使用 TUICallKit 的关键步骤**,因为只有在登录成功后才能正常使用 TUICallKit 的各项功能,故请您耐心检查相关参数是否配置正确:
|
|
148
|
+
|
|
149
|
+
【Vue3】
|
|
150
|
+
``` typescript
|
|
151
|
+
import { onMounted } from 'vue';
|
|
152
|
+
import { useLoginState } from "@/uni_modules/tuikit-atomic-x/state/LoginState";
|
|
153
|
+
|
|
154
|
+
const { login } = useLoginState();
|
|
155
|
+
onMounted(() => {
|
|
156
|
+
login({
|
|
157
|
+
sdkAppID: 1400000001, // 请替换为开通服务控制台的 SDKAppID
|
|
158
|
+
userID: "denny", // 请替换为您的 UserID
|
|
159
|
+
userSig: "xxxxxxxxxxx", // 您可以在控制台中计算一个 UserSig 并填在这个位置
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
【Vue2】
|
|
165
|
+
``` typescript
|
|
166
|
+
<script>
|
|
167
|
+
import { useLoginState } from '@/uni_modules/tuikit-atomic-x/state/LoginState'
|
|
168
|
+
|
|
169
|
+
export default {
|
|
170
|
+
data() {
|
|
171
|
+
var loginStore = useLoginState()
|
|
172
|
+
return {
|
|
173
|
+
loginStore: loginStore,
|
|
174
|
+
userId: '',
|
|
175
|
+
userSig: ''
|
|
176
|
+
}
|
|
177
|
+
},
|
|
178
|
+
methods: {
|
|
179
|
+
handleLogin: function () {
|
|
180
|
+
if (!this.userId || !this.userSig) return
|
|
181
|
+
var self = this
|
|
182
|
+
this.loginStore.login({
|
|
183
|
+
sdkAppID: 1400000001, // 你的 SDKAppID
|
|
184
|
+
userID: this.userId,
|
|
185
|
+
userSig: this.userSig,
|
|
186
|
+
})
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
</script>
|
|
191
|
+
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
**登录接口参数说明**
|
|
195
|
+
| 参数 | 类型 | 说明 |
|
|
196
|
+
| --- | --- | --- |
|
|
197
|
+
| SDKAppID | Number | 从 <a href="https://console.cloud.tencent.com/trtc">TRTC 控制台 > 应用管理</a> 获取。 |
|
|
198
|
+
| userID | String | 当前用户的唯一 ID,仅包含英文字母、数字、连字符和下划线。 |
|
|
199
|
+
| userSig | String | 用于腾讯云鉴权的票据。请注意:<br>- 开发环境:您可以采用本地 <code>GenerateTestUserSig.genTestSig</code> 函数生成 UserSig 或者通过 <a href="https://console.cloud.tencent.com/im/tool-usersig">UserSig 辅助工具</a> 生成临时的 UserSig。<br>- 生产环境:为了防止密钥泄露,请务必采用服务端生成 UserSig 的方式。详细信息请参见 <a href="https://cloud.tencent.com/document/product/647/17275#formal">服务端生成 UserSig</a>。<br>更多信息请参见 <a href="https://cloud.tencent.com/document/product/647/17275">如何计算及使用 UserSig</a>。 |
|
|
200
|
+
|
|
201
|
+
### 步骤 4:注册通话页面
|
|
202
|
+
|
|
203
|
+
现在,您需要在 `pages.json` 文件中告诉您的应用,这个新页面是存在的。
|
|
204
|
+
|
|
205
|
+
打开您项目根目录下的 `pages.json` 文件,在 `"pages"` 数组中,添加以下对象来注册通话页。
|
|
206
|
+
``` java
|
|
207
|
+
{
|
|
208
|
+
"pages": [
|
|
209
|
+
// ... 您项目已有的其他页面配置
|
|
210
|
+
{
|
|
211
|
+
"path": "uni_modules/tuikit-atomic-x/pages/call",
|
|
212
|
+
"style": {
|
|
213
|
+
"navigationBarTitleText": "",
|
|
214
|
+
"disableSwipeBack": true, // 禁止右滑返回,防止直播中误操作退出
|
|
215
|
+
"app-plus": {
|
|
216
|
+
"titleNView": false // 隐藏原生导航栏,使用页面内的自定义导航
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
]
|
|
221
|
+
// ... 其他配置
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### 步骤5:跳转通话页面
|
|
227
|
+
|
|
228
|
+
在您需要发起通话的地方(具体由您的业务决定,在其点击事件里执行),您需要先调用 calls 函数。在该函数成功执行的 success 回调中,再通过 uni.navigateTo 跳转到通话页面,以确保通话状态已正确建立。
|
|
229
|
+
|
|
230
|
+
【Vue3】
|
|
231
|
+
``` typescript
|
|
232
|
+
import { useCallState } from '@/uni_modules/tuikit-atomic-x/state/CallState';
|
|
233
|
+
import { useDeviceState } from "@/uni_modules/tuikit-atomic-x/state/DeviceState";
|
|
234
|
+
const { calls } = useCallState()
|
|
235
|
+
const { openLocalCamera, openLocalMicrophone } = useDeviceState();
|
|
236
|
+
|
|
237
|
+
// 示例:在一个按钮的点击事件中
|
|
238
|
+
function startCall() {
|
|
239
|
+
// 跳转到通话页
|
|
240
|
+
calls({
|
|
241
|
+
participantIds: ['xxx'],
|
|
242
|
+
mediaType: 1, // 1 是视频通话, 0 是语音通话
|
|
243
|
+
success: () => {
|
|
244
|
+
openLocalCamera({isFront: true})
|
|
245
|
+
openLocalMicrophone()
|
|
246
|
+
uni.navigateTo({
|
|
247
|
+
url: '/uni_modules/tuikit-atomic-x/pages/call?layoutTemplate=Float'
|
|
248
|
+
})
|
|
249
|
+
},
|
|
250
|
+
fail: (error) => {
|
|
251
|
+
console.log('calls fail:', error)
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
【Vue2】
|
|
259
|
+
``` typescript
|
|
260
|
+
<script>
|
|
261
|
+
import { useCallState, CallMediaType } from '@/uni_modules/tuikit-atomic-x/state/CallState'
|
|
262
|
+
import { useDeviceState } from '@/uni_modules/tuikit-atomic-x/state/DeviceState'
|
|
263
|
+
|
|
264
|
+
export default {
|
|
265
|
+
data() {
|
|
266
|
+
var callStore = useCallState()
|
|
267
|
+
var deviceStore = useDeviceState()
|
|
268
|
+
return {
|
|
269
|
+
callStore: callStore,
|
|
270
|
+
deviceStore: deviceStore,
|
|
271
|
+
// 要呼叫的用户 ID
|
|
272
|
+
participantId: 'xxx'
|
|
273
|
+
}
|
|
274
|
+
},
|
|
275
|
+
methods: {
|
|
276
|
+
startCall: function () {
|
|
277
|
+
var self = this
|
|
278
|
+
|
|
279
|
+
// 发起通话
|
|
280
|
+
this.callStore.calls({
|
|
281
|
+
participantIds: [this.participantId], // 被呼叫者用户 ID 数组
|
|
282
|
+
mediaType: CallMediaType.Video, // 1 是视频通话, 0 是语音通话
|
|
283
|
+
success: function () {
|
|
284
|
+
console.log('发起通话成功')
|
|
285
|
+
|
|
286
|
+
// 打开本地摄像头
|
|
287
|
+
self.deviceStore.openLocalCamera({
|
|
288
|
+
isFront: true, // 使用前置摄像头
|
|
289
|
+
success: function () {
|
|
290
|
+
console.log('摄像头打开成功')
|
|
291
|
+
},
|
|
292
|
+
fail: function (errCode, errMsg) {
|
|
293
|
+
console.log('摄像头打开失败:', errMsg)
|
|
294
|
+
}
|
|
295
|
+
})
|
|
296
|
+
|
|
297
|
+
// 打开本地麦克风
|
|
298
|
+
self.deviceStore.openLocalMicrophone({
|
|
299
|
+
success: function () {
|
|
300
|
+
console.log('麦克风打开成功')
|
|
301
|
+
},
|
|
302
|
+
fail: function (errCode, errMsg) {
|
|
303
|
+
console.log('麦克风打开失败:', errMsg)
|
|
304
|
+
}
|
|
305
|
+
})
|
|
306
|
+
|
|
307
|
+
// 跳转到通话页面
|
|
308
|
+
uni.navigateTo({
|
|
309
|
+
url: '/uni_modules/tuikit-atomic-x/pages/call?layoutTemplate=Float'
|
|
310
|
+
})
|
|
311
|
+
},
|
|
312
|
+
fail: function (error) {
|
|
313
|
+
console.log('发起通话失败:', error)
|
|
314
|
+
}
|
|
315
|
+
})
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
</script>
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
> **说明:**
|
|
323
|
+
> 在 `tuikit-atomic-x/server/callService` 文件中进行了默认处理被叫端收到呼叫的逻辑,若您需要自定义,可以修改该文件中的 `"onCallReceived"` 事件对应的处理逻辑。
|
|
324
|
+
>
|
|
325
|
+
|
|
326
|
+
## 常见问题
|
|
327
|
+
|
|
328
|
+
### 调用接口没有反应?
|
|
329
|
+
|
|
330
|
+
请检查您是否制作了自定义基座并且使用自定义基座运行项目。
|
|
331
|
+
|
|
332
|
+
### 如何禁止系统侧滑返回上一个页面的行为?
|
|
333
|
+
|
|
334
|
+
iOS 端可以通过设置页面上的 **disableSwipeBack** 属性进行禁止。详情参考 [uni-app 官方文档](https://uniapp.dcloud.net.cn/collocation/pages.html)。
|
|
335
|
+
|
|
336
|
+
Android 端可以通过 **onBackPress** 拦截系统侧滑和物理返回,示例代码如下
|
|
337
|
+
|
|
338
|
+
> **注意:**
|
|
339
|
+
> 使用该方式进行系统侧滑和物理返回的拦截的前提是该页面使用的是 [自定义导航栏](https://uniapp.dcloud.net.cn/collocation/pages.html#customnav)。
|
|
340
|
+
>
|
|
341
|
+
|
|
342
|
+
``` typescript
|
|
343
|
+
<script setup>
|
|
344
|
+
import { onBackPress } from '@dcloudio/uni-app'
|
|
345
|
+
|
|
346
|
+
// 拦截系统侧滑和物理返回键,防止通话中误退出
|
|
347
|
+
onBackPress((option) => {
|
|
348
|
+
if (option.from === 'backbutton') {
|
|
349
|
+
return true; // 返回 true 阻止默认回退行为
|
|
350
|
+
}
|
|
351
|
+
});
|
|
352
|
+
</script>
|
|
353
|
+
```
|
|
@@ -15,9 +15,9 @@ TUIKit 采用数据驱动的响应式架构与原生 Android View 体系(非 C
|
|
|
15
15
|
|
|
16
16
|
- 一个有效的腾讯云账号及 Chat 应用。可参考 开通服务 从控制台获取以下信息:
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
- SDKAppID:App 在控制台获取的 Chat 应用的 ID,为应用的唯一标识。
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
- SDKSecretKey:应用的密钥。
|
|
21
21
|
|
|
22
22
|
> **版本兼容性说明:**
|
|
23
23
|
>
|
|
@@ -42,16 +42,16 @@ git clone https://cnb.cool/tencent/cloud/trtc/TUIKit_Android
|
|
|
42
42
|
// 或者 git clone https://github.com/Tencent-RTC/TUIKit_Android.git
|
|
43
43
|
```
|
|
44
44
|
|
|
45
|
-
将仓库根目录下的 `chat`、`atomic_x
|
|
45
|
+
将仓库根目录下的 `chat`、`call` 和 `atomic_x` 文件夹整体复制到您的工程根目录下。复制完成后的目录结构如下:
|
|
46
46
|
``` text
|
|
47
47
|
YourApplication/
|
|
48
48
|
├── app/ # 您的应用模块
|
|
49
|
-
├── atomic_x/ # 基础 UI
|
|
50
|
-
├── call/ #
|
|
49
|
+
├── atomic_x/ # 基础 UI 组件库
|
|
50
|
+
├── call/ # 音视频通话组件
|
|
51
51
|
│ └── tuicallkit-kt/
|
|
52
52
|
├── chat/ # Chat 源码
|
|
53
|
-
│ ├── demo/ #
|
|
54
|
-
│ └── uikit/ # Chat UIKit
|
|
53
|
+
│ ├── demo/ # 示例工程
|
|
54
|
+
│ └── uikit/ # Chat UIKit 组件库
|
|
55
55
|
├── settings.gradle.kts
|
|
56
56
|
└── build.gradle.kts
|
|
57
57
|
```
|
|
@@ -67,15 +67,12 @@ YourApplication/
|
|
|
67
67
|
``` kotlin
|
|
68
68
|
// settings.gradle.kts
|
|
69
69
|
|
|
70
|
-
// 引入 Chat UIKit 组件库(必要)
|
|
71
|
-
include(":uikit")
|
|
72
|
-
project(":uikit").projectDir = file("${settingsDir.path}/chat/uikit")
|
|
73
|
-
|
|
74
|
-
// 引入 AtomicX 基础 UI 组件库(必要)
|
|
75
70
|
include(":atomic_x")
|
|
76
71
|
project(":atomic_x").projectDir = file("${settingsDir.path}/atomic_x")
|
|
77
72
|
|
|
78
|
-
|
|
73
|
+
include(":uikit")
|
|
74
|
+
project(":uikit").projectDir = file("${settingsDir.path}/chat/uikit")
|
|
75
|
+
|
|
79
76
|
include(":tuicallkit-kt")
|
|
80
77
|
project(":tuicallkit-kt").projectDir = file("${settingsDir.path}/call/tuicallkit-kt")
|
|
81
78
|
```
|
|
@@ -84,15 +81,12 @@ project(":tuicallkit-kt").projectDir = file("${settingsDir.path}/call/tuicallkit
|
|
|
84
81
|
``` groovy
|
|
85
82
|
// settings.gradle
|
|
86
83
|
|
|
87
|
-
// 引入 Chat UIKit 组件库(必要)
|
|
88
|
-
include ':uikit'
|
|
89
|
-
project(':uikit').projectDir = new File(settingsDir, 'chat/uikit')
|
|
90
|
-
|
|
91
|
-
// 引入 AtomicX 基础 UI 组件库(必要)
|
|
92
84
|
include ':atomic_x'
|
|
93
85
|
project(':atomic_x').projectDir = new File(settingsDir, 'atomic_x')
|
|
94
86
|
|
|
95
|
-
|
|
87
|
+
include ':uikit'
|
|
88
|
+
project(':uikit').projectDir = new File(settingsDir, 'chat/uikit')
|
|
89
|
+
|
|
96
90
|
include ':tuicallkit-kt'
|
|
97
91
|
project(':tuicallkit-kt').projectDir = new File(settingsDir, 'call/tuicallkit-kt')
|
|
98
92
|
```
|
|
@@ -103,10 +97,8 @@ project(':tuicallkit-kt').projectDir = new File(settingsDir, 'call/tuicallkit-kt
|
|
|
103
97
|
``` kotlin
|
|
104
98
|
// app/build.gradle.kts
|
|
105
99
|
dependencies {
|
|
106
|
-
// TUIKit 组件库(必要)
|
|
107
|
-
implementation(project(":uikit"))
|
|
108
100
|
implementation(project(":atomic_x"))
|
|
109
|
-
|
|
101
|
+
implementation(project(":uikit"))
|
|
110
102
|
implementation(project(":tuicallkit-kt"))
|
|
111
103
|
}
|
|
112
104
|
```
|
|
@@ -115,10 +107,8 @@ dependencies {
|
|
|
115
107
|
``` groovy
|
|
116
108
|
// app/build.gradle
|
|
117
109
|
dependencies {
|
|
118
|
-
// TUIKit 组件库(必要)
|
|
119
|
-
implementation project(':uikit')
|
|
120
110
|
implementation project(':atomic_x')
|
|
121
|
-
|
|
111
|
+
implementation project(':uikit')
|
|
122
112
|
implementation project(':tuicallkit-kt')
|
|
123
113
|
}
|
|
124
114
|
```
|
|
@@ -137,6 +127,8 @@ dependencies {
|
|
|
137
127
|
``` java
|
|
138
128
|
import io.trtc.tuikit.atomicxcore.api.CompletionHandler
|
|
139
129
|
import io.trtc.tuikit.atomicxcore.api.login.LoginStore
|
|
130
|
+
import com.tencent.cloud.tuikit.engine.call.TUICallEngine
|
|
131
|
+
import com.tencent.cloud.tuikit.engine.common.TUICommonDefine
|
|
140
132
|
|
|
141
133
|
LoginStore.shared.login(
|
|
142
134
|
context,
|
|
@@ -145,7 +137,19 @@ LoginStore.shared.login(
|
|
|
145
137
|
userSig, // String,控制台或服务端生成
|
|
146
138
|
object : CompletionHandler {
|
|
147
139
|
override fun onSuccess() {
|
|
148
|
-
//
|
|
140
|
+
// 登录成功
|
|
141
|
+
TUICallEngine.createInstance(context).init(
|
|
142
|
+
sdkAppID, userID, userSig,
|
|
143
|
+
object : TUICommonDefine.Callback {
|
|
144
|
+
override fun onSuccess() {
|
|
145
|
+
// 初始化成功,可使用音视频通话能力
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
override fun onError(errCode: Int, errMsg: String) {
|
|
149
|
+
// 初始化失败
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
)
|
|
149
153
|
}
|
|
150
154
|
override fun onFailure(code: Int, desc: String) {
|
|
151
155
|
// 登录失败,可弹框报错
|
|
@@ -158,37 +162,7 @@ LoginStore.shared.login(
|
|
|
158
162
|
> 在正式的生产环境中,建议在您的服务端生成 UserSig,在需要时由 App 向业务服务器发起请求获取动态 UserSig 进行鉴权。详见 [服务端生成 UserSig](https://cloud.tencent.com/document/product/269/32688)。
|
|
159
163
|
>
|
|
160
164
|
|
|
161
|
-
#### 步骤3
|
|
162
|
-
|
|
163
|
-
会话列表只需创建 `ConversationsPageView` 并加入到您的布局即可。它会自动从本地读取最近会话,点击某个会话时通过 `onConversationClick` 回调返回该会话的 `conversationID`,您可据此跳转聊天界面。
|
|
164
|
-
``` kotlin
|
|
165
|
-
import android.os.Bundle
|
|
166
|
-
import androidx.appcompat.app.AppCompatActivity
|
|
167
|
-
import io.trtc.tuikit.chat.uikit.pages.ConversationsPageView
|
|
168
|
-
|
|
169
|
-
class ConversationActivity : AppCompatActivity() {
|
|
170
|
-
override fun onCreate(savedInstanceState: Bundle?) {
|
|
171
|
-
super.onCreate(savedInstanceState)
|
|
172
|
-
|
|
173
|
-
val conversationsPage = ConversationsPageView(this)
|
|
174
|
-
conversationsPage.setHeaderTitle("消息")
|
|
175
|
-
|
|
176
|
-
// 点击会话回调,conversationID 已带 c2c_ / group_ 前缀
|
|
177
|
-
conversationsPage.onConversationClick = { conversationID ->
|
|
178
|
-
// 跳转到您的聊天界面,并将 conversationID 传入(可参考步骤4 的 ChatActivity)
|
|
179
|
-
}
|
|
180
|
-
// 可选:搜索、发起单聊、创建群聊等入口回调
|
|
181
|
-
conversationsPage.onSearchClick = { /* 跳转搜索页 */ }
|
|
182
|
-
conversationsPage.onStartChatClick = { /* 发起单聊 */ }
|
|
183
|
-
conversationsPage.onCreateGroupClick = { /* 创建群聊 */ }
|
|
184
|
-
|
|
185
|
-
// 将会话列表设置为页面内容
|
|
186
|
-
setContentView(conversationsPage)
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
#### 步骤4:构建聊天界面
|
|
165
|
+
#### 步骤3:构建聊天界面
|
|
192
166
|
|
|
193
167
|
聊天界面使用 `ChatPageView` 展示和收发消息,通过 `setup` 传入 `conversationID` 即可。`conversationID` 的格式为:单聊 `c2c_<对方 UserID>`,群聊 `group_<群 GroupID>`。
|
|
194
168
|
``` kotlin
|
|
@@ -225,55 +199,14 @@ class ChatActivity : AppCompatActivity() {
|
|
|
225
199
|
> 示例工程(demo)中提供了基于 `ChatPageView` 封装好的聊天页 `ChatActivity`(带标题栏、未读角标、群事件处理等),可直接复用或参考其实现进行自定义:`ChatActivity.start(context, conversationID)`。
|
|
226
200
|
>
|
|
227
201
|
|
|
228
|
-
#### 步骤
|
|
202
|
+
#### 步骤4:音视频通话
|
|
229
203
|
|
|
230
|
-
|
|
231
|
-
``` kotlin
|
|
232
|
-
import android.os.Bundle
|
|
233
|
-
import androidx.appcompat.app.AppCompatActivity
|
|
234
|
-
import io.trtc.tuikit.chat.uikit.pages.ContactsPageView
|
|
235
|
-
|
|
236
|
-
class ContactActivity : AppCompatActivity() {
|
|
237
|
-
override fun onCreate(savedInstanceState: Bundle?) {
|
|
238
|
-
super.onCreate(savedInstanceState)
|
|
239
|
-
|
|
240
|
-
val contactsPage = ContactsPageView(this)
|
|
241
|
-
contactsPage.setHeaderTitle("通讯录")
|
|
242
|
-
contactsPage.setup(
|
|
243
|
-
onContactClick = { contactInfo ->
|
|
244
|
-
// 跳转到您的聊天界面,单聊会话 ID 为 "c2c_" + contactInfo.userID(可参考步骤4 的 ChatActivity)
|
|
245
|
-
},
|
|
246
|
-
onGroupClick = { contactInfo ->
|
|
247
|
-
// 跳转到您的聊天界面,群聊会话 ID 为 "group_" + contactInfo.userID(可参考步骤4 的 ChatActivity)
|
|
248
|
-
}
|
|
249
|
-
)
|
|
250
|
-
setContentView(contactsPage)
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
```
|
|
254
|
-
|
|
255
|
-
#### 步骤6:主题设置(可选)
|
|
256
|
-
|
|
257
|
-
TUIKit 通过 `ThemeStore` 支持设置主题色与浅色 / 深色主题切换。
|
|
258
|
-
``` kotlin
|
|
259
|
-
import io.trtc.tuikit.atomicx.theme.Theme
|
|
260
|
-
import io.trtc.tuikit.atomicx.theme.ThemeStore
|
|
261
|
-
|
|
262
|
-
// 设置主题色
|
|
263
|
-
ThemeStore.shared(context).setPrimaryColor("#1C66E5")
|
|
264
|
-
|
|
265
|
-
// 切换浅色 / 深色主题
|
|
266
|
-
ThemeStore.shared(context).setTheme(Theme.lightTheme(context))
|
|
267
|
-
// ThemeStore.shared(context).setTheme(Theme.darkTheme(context))
|
|
268
|
-
```
|
|
269
|
-
|
|
270
|
-
#### 步骤7:音视频通话(可选)
|
|
271
|
-
|
|
272
|
-
若需在聊天中支持音视频通话,请先 [开通音视频服务](https://console.cloud.tencent.com/im),并在集成步骤中引入 `:tuicallkit-kt` 组件。**登录成功后**初始化 `TUICallEngine,`即可在 Chat 组件中正常使用该功能。
|
|
204
|
+
**登录成功后**初始化 `TUICallEngine,`即可在 Chat 组件中正常使用该功能。如需开通音视频通话服务,
|
|
273
205
|
``` kotlin
|
|
274
206
|
import com.tencent.cloud.tuikit.engine.call.TUICallEngine
|
|
275
207
|
import com.tencent.cloud.tuikit.engine.common.TUICommonDefine
|
|
276
208
|
|
|
209
|
+
// 在步骤 2 的 LoginStore 登录成功回调中初始化 TUICallEngine
|
|
277
210
|
TUICallEngine.createInstance(context).init(
|
|
278
211
|
sdkAppID, userID, userSig,
|
|
279
212
|
object : TUICommonDefine.Callback {
|
|
@@ -288,7 +221,7 @@ TUICallEngine.createInstance(context).init(
|
|
|
288
221
|
)
|
|
289
222
|
```
|
|
290
223
|
|
|
291
|
-
#### 步骤
|
|
224
|
+
#### 步骤5:接入智能客服 Desk 用户端
|
|
292
225
|
|
|
293
226
|
若需同时集成智能客服 Desk 用户端,请先 [开通智能客服 Desk 服务](https://cloud.tencent.com/document/product/269/96059),并根据 [Android 接入智能客服用户端](https://cloud.tencent.com/document/product/269/110809) 文档完成 `com.tencentcloud.desk:aideskcustomer` 包引入和配置,即可在您的应用中引入客服会话能力。
|
|
294
227
|
``` java
|
|
@@ -319,6 +252,10 @@ TencentAiDeskCustomer.getInstance().initWithProfile(context, SDKAppID, userID, u
|
|
|
319
252
|
});
|
|
320
253
|
```
|
|
321
254
|
|
|
255
|
+
## AI 助手:知识咨询与代码集成
|
|
256
|
+
|
|
257
|
+
在接入 IM SDK 过程中,您可以通过 MCP 使用 AI 助手,快速完成知识咨询、报错排查和 UIKit 集成代码生成。支持 Web/Android/iOS/Flutter/uni-app 等平台,答案基于官方文档。适用于查询 SDK API、UI 组件用法、服务端 API 与 IM 产品配置等场景,[立即体验,提出您的第一个问题](https://cloud.tencent.com/document/product/269/126983)。
|
|
258
|
+
|
|
322
259
|
## 常见问题
|
|
323
260
|
|
|
324
261
|
### 音视频常见问题
|
|
@@ -332,6 +269,21 @@ TencentAiDeskCustomer.getInstance().initWithProfile(context, SDKAppID, userID, u
|
|
|
332
269
|
|
|
333
270
|
- 如果是群聊通话邀请,被邀请者离线再上线后会自动拉取最近 30 秒内的邀请,TUIKit 会自动唤起群通话界面。
|
|
334
271
|
|
|
272
|
+
##### **如何移除音视频通话功能?**
|
|
273
|
+
|
|
274
|
+
如果您不需要集成音视频通话功能,请在 `settings.gradle.kts`(或 `settings.gradle`) 和 `app` 模块的 `build.gradle.kts`(或 `build.gradle`) 文件中移除 `tuicallkit-kt` 依赖,并在步骤 3 创建聊天界面中关闭音视频通话开关,代码如下所示:
|
|
275
|
+
``` java
|
|
276
|
+
val messageInputConfig = ChatMessageInputConfig(
|
|
277
|
+
isShowAudioCall = false, // 关闭语音通话
|
|
278
|
+
isShowVideoCall = false // 关闭视频通话
|
|
279
|
+
)
|
|
280
|
+
val chatPageView = ChatPageView(this)
|
|
281
|
+
chatPageView.setup(
|
|
282
|
+
conversationID = conversationID,
|
|
283
|
+
messageInputConfig = messageInputConfig
|
|
284
|
+
)
|
|
285
|
+
```
|
|
286
|
+
|
|
335
287
|
### 其他常见问题
|
|
336
288
|
|
|
337
289
|
##### 表情包的使用
|
|
@@ -26,7 +26,7 @@ iOS 端 `TUIKit`默认自带 **简体中文、英语** 和 **阿拉伯语** 语
|
|
|
26
26
|
|
|
27
27
|
> **说明**
|
|
28
28
|
>
|
|
29
|
-
> 语言代码清单见
|
|
29
|
+
> 语言代码清单见 [附录](#code)。
|
|
30
30
|
>
|
|
31
31
|
|
|
32
32
|
## 使用更多语言/自定义翻译表述
|
|
@@ -37,7 +37,7 @@ iOS 端 `TUIKit`默认自带 **简体中文、英语** 和 **阿拉伯语** 语
|
|
|
37
37
|
|
|
38
38
|
我们自带的所有语言包,以String文件模板的形式,存储于您项目里Pods中`TUICore`组件的`TUIKitLocalizable/Localizable/` 路径。
|
|
39
39
|
|
|
40
|
-
请新建目录并命名为`{语言编码}.lproj`,在此目录下新增 `Localizable.strings`文件,其中,`${语言编码}` 需要替换为 ISO 639-1
|
|
40
|
+
请新建目录并命名为`{语言编码}.lproj`,在此目录下新增 `Localizable.strings`文件,其中,`${语言编码}` 需要替换为 [ISO 639-1 语言代码](#code)。(可以直接复制您熟悉的语言文件,如zh-Hans.lproj,并直接修改目录名称)
|
|
41
41
|
如果您需要兼容支持多个新语言,复制多份,并准确指定每一份的语言编码即可。
|
|
42
42
|
|
|
43
43
|
以韩语为例,新增`ko.lproj/Localizable.strings`的语言资源文件:
|
|
@@ -52,17 +52,17 @@ iOS 端 `TUIKit`默认自带 **简体中文、英语** 和 **阿拉伯语** 语
|
|
|
52
52
|
|
|
53
53
|
如果是其他语种,则需要在 `TUIGlobalization.m`中的`+ (NSString *)tk_localizableLanguageKey`
|
|
54
54
|
|
|
55
|
-
新增的语言词条包命名需要
|
|
55
|
+
新增的语言词条包命名需要 [符合标准](#code),组件内部会跟随系统语言自适应。
|
|
56
56
|
|
|
57
57
|
> **说明**
|
|
58
58
|
>
|
|
59
|
-
> 语言代码清单见 ISO 639-1
|
|
59
|
+
> 语言代码清单见 [ISO 639-1 语言代码](#code)。
|
|
60
60
|
>
|
|
61
61
|
|
|
62
62
|
### 指定显示的语言
|
|
63
63
|
|
|
64
64
|
如果您需要指定`TUIKit`界面语言,请在`[TUIGlobalization setPreferredLanguage:@""]`中传入需要的语言,指定语言后,组件内部不再跟随系统语言。
|
|
65
|
-
语言可选项,取值为 ISO 639-1 语言代码
|
|
65
|
+
语言可选项,取值为 [ISO 639-1 语言代码](#code)
|
|
66
66
|
以韩语为例,传入`[TUIGlobalization setPreferredLanguage:@"ko"];`
|
|
67
67
|
|
|
68
68
|
## 附录:语言代码表
|