@tencentcloud/sdk-mcp 1.4.1 → 1.4.3-beta.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.
Files changed (35) hide show
  1. package/package.json +1 -1
  2. package/resource/doc/callkit/core-sdk/android/answer-call.md +942 -0
  3. package/resource/doc/callkit/core-sdk/android/make-call.md +876 -0
  4. package/resource/doc/callkit/core-sdk/android/offline-push.md +368 -0
  5. package/resource/doc/callkit/core-sdk/flutter/answer-call.md +1132 -0
  6. package/resource/doc/callkit/core-sdk/flutter/make-call.md +1206 -0
  7. package/resource/doc/callkit/core-sdk/flutter/offline-push.md +357 -0
  8. package/resource/doc/callkit/core-sdk/ios/answer-call.md +1009 -0
  9. package/resource/doc/callkit/core-sdk/ios/make-call.md +1154 -0
  10. package/resource/doc/callkit/core-sdk/ios/offline-push.md +470 -0
  11. package/resource/doc/callkit/core-sdk/uni-app/answer-call.md +1146 -0
  12. package/resource/doc/callkit/core-sdk/uni-app/make-call.md +1267 -0
  13. package/resource/doc/callkit/preset/android/integration.md +1 -1
  14. package/resource/doc/callkit/preset/flutter/integration.md +1 -1
  15. package/resource/doc/callkit/preset/ios/integration.md +1 -1
  16. package/resource/doc/callkit/preset/react/api.md +1 -1
  17. package/resource/doc/callkit/preset/vue/api.md +1 -1
  18. package/tools/call/get_native_callkit_core_integration.js +67 -0
  19. package/tools/call/get_native_callkit_core_integration.js.map +1 -0
  20. package/tools/common/present_framework_choice.js +1 -1
  21. package/tools/common/present_framework_choice.js.map +1 -1
  22. package/tools/common/record_skill_session.js +17 -6
  23. package/tools/common/record_skill_session.js.map +1 -1
  24. package/tools/definitions/get_native_call_uikit_integration_def.js +9 -3
  25. package/tools/definitions/get_native_call_uikit_integration_def.js.map +1 -1
  26. package/tools/definitions/get_native_callkit_core_integration_def.js +63 -0
  27. package/tools/definitions/get_native_callkit_core_integration_def.js.map +1 -0
  28. package/tools/index.js +2 -0
  29. package/tools/index.js.map +1 -1
  30. package/utils/report-cls-client.js +1 -1
  31. package/utils/report-cls-client.js.map +1 -1
  32. package/utils/report-es-client.js +1 -1
  33. package/utils/report-es-client.js.map +1 -1
  34. package/utils/report-runtime-error-cls-client.js +91 -0
  35. package/utils/report-runtime-error-cls-client.js.map +1 -0
@@ -0,0 +1,357 @@
1
+
2
+ 本文档将指导您如何基于 `tencent_cloud_chat_push` 插件实现离线推送功能,适用于使用 AtomicX Core 进行无 UI 集成的场景。
3
+
4
+ ### 效果展示
5
+
6
+ | Android(FCM) | iOS(APNs) |
7
+ | --- | --- |
8
+ | | |
9
+
10
+ ## 开通服务
11
+
12
+ 进入 IM 控制台的插件市场,单击立即购买或免费试用(每个应用可免费试用一次,有效期 7 天)。
13
+
14
+ > **注意:**
15
+ > 推送插件试用或购买到期后,将自动停止提供推送服务(包括普通消息离线推送、全员/标签推送等服务)。为避免影响您业务的正常使用,请提前购买/续费。
16
+
17
+ ## 集成建议 \[必看\]
18
+
19
+ ### 如何选择推送渠道?
20
+
21
+ 由于 FCM 依赖于 Google 服务,请根据您的业务运营区域选择合适的集成策略:
22
+
23
+ **跨国全球业务(涉及国内外):**为确保全球范围内消息的触达率,建议同时集成国内各厂商推送服务以及 FCM 推送服务。
24
+
25
+ **仅限海外市场(不涉及中国大陆):**无需集成国内厂商服务。请直接参考本文档集成 FCM Data Message 即可。
26
+
27
+ **仅限中国大陆境内:**无需集成 FCM。请参考集成 Notification,按需集成 Notification(小米、华为、OPPO、vivo 等国内厂商)推送即可。
28
+
29
+ ### 如何提高推送触达率?
30
+
31
+ 根据我们的经验,超过 90% 的用户接不到通话通知的原因是手动关闭了应用的通知权限。为确保通话可达率,我们强烈建议:
32
+
33
+ 1. **审慎发送通知:**避免向用户推送低质量或无关联的通知,减少用户因骚扰而关闭通知权限的可能性。
34
+
35
+ 2. **提供精细控制:**借鉴微信等优秀应用的做法,在应用设置内为用户提供独立的开关,分别控制 Notification 和 FCM Data Message,而非引导用户去系统设置中一刀切地关闭所有通知。
36
+
37
+ ## 通用配置
38
+
39
+ **安装组件**:在工程的根目录下,通过命令行执行以下命令安装 `tencent_cloud_chat_push` 插件。
40
+
41
+ ```bash
42
+ flutter pub add tencent_cloud_chat_push
43
+ ```
44
+
45
+ ## Android 平台配置
46
+
47
+ ### 步骤1:厂商配置
48
+
49
+ #### 准备条件
50
+
51
+ 1. 将您自己的应用注册到 FCM 推送平台,得到 AppID 和 AppKey 等参数以及 `google-services.json` 文件,来实现离线推送功能。
52
+
53
+ 2. 登录即时通信 IM 控制台,在推送管理下的接入设置功能栏,选择 FCM,添加 FCM 的证书,其中消息类型选择透传(数据)消息。
54
+
55
+ | 厂商推送平台 | IM 控制台配置 |
56
+ | --- | --- |
57
+ | | |
58
+
59
+ #### 下载并添加配置文件
60
+
61
+ 完成控制台厂商推送信息填写后,下载并添加配置文件到工程。将下载的 `timpush-configs.json` 文件添加到应用模块的 `assets` 目录下,将 `google-services.json` 添加到工程 app 目录下。
62
+
63
+ | 选择下载配置文件 timpush-configs.json | 下载文件 google-services.json | 添加到工程 |
64
+ | --- | --- | --- |
65
+ | | | |
66
+
67
+ ### 步骤2:集成 Android 推送插件
68
+
69
+ 在项目的 `android/app/build.gradle` 文件中添加如下依赖:
70
+
71
+ **build.gradle.kts:**
72
+
73
+ ```kotlin
74
+ implementation("com.tencent.timpush:fcm:8.8.7375")
75
+ ```
76
+
77
+ **build.gradle:**
78
+
79
+ ```groovy
80
+ implementation "com.tencent.timpush:fcm:latest.release"
81
+ ```
82
+
83
+ **说明:**
84
+
85
+ > TIMPush 需要集成 IM SDK 在 7.9.5666 版本及以上。TIMPush 的版本号及更新信息,可以在更新日志中进行查询。
86
+ >
87
+ > 在 `build.gradle` 中添加的依赖的版本需要与 `tencent_cloud_chat_push` 版本对应。
88
+
89
+ ### 步骤3:工程配置
90
+
91
+ 在您项目 `android/app/src/main` 路径下 `MainActivity` 同级目录中,新建一个 Application 文件类,例如可命名为 `MyApplication`。如果您已经自定义了一个 Application 类,则可直接复用,不需要再次创建。
92
+
93
+ ```java
94
+ import com.tencent.chat.flutter.push.tencent_cloud_chat_push.application.TencentCloudChatPushApplication;
95
+
96
+ public class MyApplication extends TencentCloudChatPushApplication {
97
+
98
+ @Override
99
+ public void onCreate() {
100
+ super.onCreate();
101
+ }
102
+ }
103
+ ```
104
+
105
+ **说明:**
106
+
107
+ > 如果您已经创建了自己的 Application 为了其他用途,请直接 extends `TencentCloudChatPushApplication`,并保证 `onCreate()` 函数中调用 `super.onCreate();` 即可。
108
+
109
+ 同时您还需要修改 `MainActivity` 相关配置:打开 `android/app/src/main/AndroidManifest.xml`,为 `<application>` 标签新增指定一个 `android:name` 参数,指向刚制作的自定义 Application 类。
110
+
111
+ ### 步骤4:完成工程配置
112
+
113
+ 在项目级 `build.gradle` 文件的 `buildscript` > `dependencies` 下添加以下配置:
114
+
115
+ ```groovy
116
+ buildscript {
117
+ dependencies {
118
+ classpath 'com.google.gms:google-services:4.3.15'
119
+ }
120
+ }
121
+ ```
122
+
123
+ 在项目的 app 目录下的 `build.gradle` 文件中添加下方配置:
124
+
125
+ ```groovy
126
+ apply plugin: 'com.google.gms.google-services'
127
+ ```
128
+
129
+ 在项目的 app 目录下找到并打开 `build.gradle`,将应用包名修改为您的实际应用包名,例如:`applicationId 'com.****.callkit'`。
130
+
131
+ ## iOS 平台配置(APNs)
132
+
133
+ ### 步骤1:厂商配置
134
+
135
+ #### 申请 APNs 证书
136
+
137
+ ##### 开启 App 远程推送
138
+
139
+ 1. 登录苹果开发者网站的 Certificates, Identifiers & Profiles(Certificates, IDS & Profiles)页面。
140
+ 2. 单击 Identifiers 右侧的 **+**。您可以新建一个 AppID,或者在您原有的 AppID 上增加 Push Notification Service。
141
+
142
+ > **说明:**
143
+ > 您 App 的 Bundle ID 不能使用通配符 `*`,否则将无法使用远程推送服务。
144
+
145
+ 配置步骤:勾选 App IDs,单击 Continue;选择 App,单击 Continue;配置 Bundle ID 等其他信息并 Continue;勾选 Push Notifications,开启远程推送服务。
146
+
147
+ #### 生成证书
148
+
149
+ 1. 选中您的 AppID,选择 Configure。在 Apple Push Notification service SSL Certificates 窗口中有两个 SSL Certificate,分别用于开发环境(Development)和生产环境(Production)。
150
+ 2. 先选择开发环境(Development)的 Create Certificate;按提示在 Mac 钥匙串访问中生成 Certificate Signing Request(CSR)并上传。
151
+ 3. 生成后下载开发环境的 Development SSL Certificate;再按相同流程生成并下载生产环境的 Production SSL Certificate。
152
+
153
+ > **说明:**
154
+ > 生产环境的证书实际是开发(Sandbox)+ 生产(Production)的合并证书,可以同时作为开发环境和生产环境的证书使用。
155
+
156
+ 4. 双击打开下载的 SSL Certificate 导入钥匙串;在登录 > 我的证书中,右键分别导出开发与生产环境的 `.p12` 文件。**保存 p12 时请务必设置密码**。
157
+
158
+ #### 上传证书到控制台
159
+
160
+ 1. 登录即时通信 IM 控制台。
161
+ 2. 单击目标应用卡片,进入应用的基础配置页面。
162
+ 3. 单击 iOS 原生离线推送设置右侧的添加证书。
163
+ 4. 选择证书类型,上传 iOS 证书(.p12),设置证书密码,单击确认。
164
+
165
+ > **注意:**
166
+ > 上传证书名最好使用全英文(尤其不能使用括号等特殊字符)。上传证书需要设置密码,无密码收不到推送。发布 App Store 的证书需要设置为生产环境,否则无法收到推送。上传的 p12 证书必须是自己申请的真实有效的证书。
167
+
168
+ 5. 待推送证书信息生成后,记录证书的 ID。
169
+
170
+ ### 步骤2:推送参数配置
171
+
172
+ 请将您在厂商配置步骤中获取到的 iOS APNs 推送证书上传至 IM 控制台。IM 控制台会为您分配证书 ID。
173
+
174
+ 注册推送需要将此证书 ID(`apnsCertificateID`)传入:
175
+
176
+ ```dart
177
+ TencentCloudChatPush().registerPush(apnsCertificateID: 您配置的证书 ID);
178
+ ```
179
+
180
+ ### 步骤3:工程配置
181
+
182
+ 您可使用 Xcode,也可直接在 Visual Studio Code 或 Android Studio 中编辑。打开 `ios/Runner/AppDelegate.swift`,按需添加以下内容:
183
+
184
+ ```swift
185
+ import UIKit
186
+ import Flutter
187
+ // Add these two import lines
188
+ import TIMPush
189
+ import tencent_cloud_chat_push
190
+
191
+ // Add `, TIMPushDelegate` to the following line
192
+ @UIApplicationMain
193
+ @objc class AppDelegate: FlutterAppDelegate, TIMPushDelegate {
194
+
195
+ override func application(
196
+ _ application: UIApplication,
197
+ didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
198
+ ) -> Bool {
199
+ GeneratedPluginRegistrant.register(with: self)
200
+ return super.application(application, didFinishLaunchingWithOptions: launchOptions)
201
+ }
202
+
203
+ // To be deprecated,please use the new field businessID below.
204
+ @objc func offlinePushCertificateID() -> Int32 {
205
+ return TencentCloudChatPushFlutterModal.shared.offlinePushCertificateID();
206
+ }
207
+
208
+ // Add this function
209
+ @objc func businessID() -> Int32 {
210
+ return TencentCloudChatPushFlutterModal.shared.businessID();
211
+ }
212
+
213
+ // Add this function
214
+ @objc func applicationGroupID() -> String {
215
+ return TencentCloudChatPushFlutterModal.shared.applicationGroupID()
216
+ }
217
+
218
+ // Add this function
219
+ @objc func onRemoteNotificationReceived(_ notice: String?) -> Bool {
220
+ TencentCloudChatPushPlugin.shared.tryNotifyDartOnNotificationClickEvent(notice)
221
+ return true
222
+ }
223
+ }
224
+ ```
225
+
226
+ ## 自定义来电推送
227
+
228
+ ### 步骤1:注册推送插件
229
+
230
+ 1. **请在登录完成后立即注册推送插件。**
231
+
232
+ 调用 `TencentCloudChatPush().registerPush` 方法,需传入上一步定义的点击回调函数。此外您还可选传入 `apnsCertificateID`(iOS 推送证书 ID)及 `androidPushOEMConfig`(Android 推送厂商配置)。此二项若已在前序步骤指定且无修改必要,可不再传入。
233
+
234
+ ```dart
235
+ TencentCloudChatPush().registerPush(
236
+ onNotificationClicked: _onNotificationClicked,
237
+ sdkAppId: 您的sdkAppId,
238
+ appKey: "客户端密钥",
239
+ apnsCertificateID: 您配置的证书 ID);
240
+ ```
241
+
242
+ 2. **实现 Android 自动登录。** FCM 的 data 模式只能将离线 App 唤醒,所以还需要您在 `onAppWakeUpEvent` 中实现登录以及拉起 App 等操作。
243
+
244
+ ```dart
245
+ TencentCloudChatPush().registerOnAppWakeUpEvent(onAppWakeUpEvent: () {
246
+ // TODO: 登录操作
247
+ });
248
+ ```
249
+
250
+ ### 步骤2:自定义来电通知样式(FCM)
251
+
252
+ 您可以使用第三方插件(如 `flutter_local_notifications`)弹出通知,或在原生层创建 `NotificationView` 实现更高级样式。以下为 `flutter_local_notifications` 示例。
253
+
254
+ **集成插件**
255
+
256
+ ```bash
257
+ flutter pub add flutter_local_notifications
258
+ ```
259
+
260
+ **弹出通知**
261
+
262
+ ```dart
263
+ final plugin = FlutterLocalNotificationsPlugin();
264
+
265
+ const androidSettings = AndroidInitializationSettings('@mipmap/ic_launcher');
266
+ await plugin.initialize(const InitializationSettings(android: androidSettings));
267
+
268
+ await plugin.show(
269
+ 0,
270
+ '来电通话',
271
+ 'XX邀请您进行视频通话',
272
+ const NotificationDetails(
273
+ android: AndroidNotificationDetails(
274
+ 'call_channel',
275
+ '通话通知',
276
+ importance: Importance.high,
277
+ priority: Priority.high,
278
+ ),
279
+ ),
280
+ );
281
+ ```
282
+
283
+ ### 步骤3:展示来电推送(FCM)
284
+
285
+ 您需要监听来电事件:登录成功后(步骤 1),如果有离线来电事件,**CallStore** 会自动补发。您可以:
286
+
287
+ 1. **监听来电事件:**订阅 `onCallReceived`,该事件在收到来电时触发,并包含通话所需关键信息。
288
+ 2. **展示来电通知:**在该回调中根据事件携带信息调用自定义通知(参考步骤 2)。
289
+
290
+ ```dart
291
+ import 'package:atomic_x_core/atomicxcore.dart';
292
+ import 'package:flutter_local_notifications/flutter_local_notifications.dart';
293
+
294
+ bool isNotificationShowing = false;
295
+
296
+ void showNotification() async {
297
+ final plugin = FlutterLocalNotificationsPlugin();
298
+ const androidSettings = AndroidInitializationSettings('@mipmap/ic_launcher');
299
+ await plugin.initialize(settings: const InitializationSettings(android: androidSettings));
300
+ await plugin.show(
301
+ id: 0,
302
+ title: '来电通话',
303
+ body: '张三正在呼叫你',
304
+ notificationDetails: const NotificationDetails(
305
+ android: AndroidNotificationDetails(
306
+ 'call_channel',
307
+ '通话通知',
308
+ importance: Importance.high,
309
+ priority: Priority.high,
310
+ ),
311
+ ),
312
+ );
313
+ isNotificationShowing = true;
314
+ }
315
+
316
+ void closeNotification() {
317
+ final plugin = FlutterLocalNotificationsPlugin();
318
+ plugin.cancel(id: 0);
319
+ isNotificationShowing = false;
320
+ }
321
+
322
+ void _addNotificationListener() {
323
+ _listener = CallEventListener(
324
+ onCallReceived: (callId, mediaType, userData) {
325
+ showNotification();
326
+ },
327
+ onCallEnded: (callId, mediaType, reason, userId) {
328
+ closeNotification();
329
+ },
330
+ );
331
+ CallStore.shared.addListener(_listener!);
332
+ CallStore.shared.state.selfInfo.addListener(() {
333
+ if (isNotificationShowing) {
334
+ closeNotification();
335
+ }
336
+ });
337
+ }
338
+ ```
339
+
340
+ ## 常见问题
341
+
342
+ 若在集成过程中遇到问题,请务必先查阅插件推送的常见问题进行自助排查。
343
+
344
+ ### 应用被杀死后无法弹出来电界面?
345
+
346
+ 1. 确认收到了推送,收不到推送需要确认 IM 控制台是否正确上传证书。参见文档厂商配置的第一步,看下是否添加正确。
347
+ 2. 确认控制台选择了 FCM 数据消息。
348
+ 3. 确认收到数据消息;过滤日志(关键字:TIMPush)检查是否有相关打印(如果收不到消息,可以使用 IM 控制台的排查工具查看原因)。
349
+ 4. 确认实现了自动登录。自动登录后才会去拉取通话请求,才能显示来电界面。
350
+
351
+ ### 怎样强制使用 FCM 通道?
352
+
353
+ 若您的业务想要强制使用 FCM 通道,可调用:
354
+
355
+ ```java
356
+ TIMPushManager.getInstance().forceUseFCMPushChannel(true);
357
+ ```