@tencentcloud/sdk-mcp 1.7.2 → 1.7.3

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 (43) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +13 -5
  3. package/knowledge/bm25.js +20 -11
  4. package/knowledge/search/generic-rerank.js +123 -0
  5. package/knowledge/search/search-pass.js +8 -1
  6. package/package.json +1 -1
  7. package/resource/_schema/query-normalization.yaml +6 -0
  8. package/resource/index/manifest.json +1 -1
  9. package/resource/integration/chat/preset/android/integration.md +33 -29
  10. package/resource/integration/chat/preset/flutter/integration.md +93 -92
  11. package/resource/knowledge/callkit/core-sdk/ios/offline-push.md +1 -1
  12. package/resource/knowledge/chat/best-practice/common/web-sdk-log-level.md +76 -0
  13. package/resource/knowledge/chat/best-practice/miniprogram/desktop-wechat-miniprogram-error.md +79 -0
  14. package/resource/knowledge/chat/best-practice/miniprogram/login-timeout-2801-diagnosis.md +1 -1
  15. package/resource/knowledge/chat/preset/android-view/integration.md +37 -29
  16. package/resource/knowledge/push/config/android/fcm.md +2 -6
  17. package/resource/knowledge/push/integration/android.md +777 -425
  18. package/resource/knowledge/push/integration/donut.md +54 -71
  19. package/resource/knowledge/push/integration/flutter.md +194 -63
  20. package/resource/knowledge/push/integration/harmonyos.md +7 -2
  21. package/resource/knowledge/push/integration/ios.md +23 -93
  22. package/resource/knowledge/push/integration/react-native.md +2 -1
  23. package/resource/knowledge/push/integration/uni-app.md +28 -106
  24. package/resource/knowledge/push/integration/unity.md +2 -1
  25. package/resource/knowledge/push/integration/unreal-engine.md +2 -1
  26. package/resource/knowledge/roomkit/best-practice/vue/screen-share-auto-stop-on-leave.md +62 -0
  27. package/resource/knowledge/roomkit/core-sdk/react/network-proxy.md +84 -0
  28. package/resource/knowledge/roomkit/core-sdk/vue/network-proxy.md +84 -0
  29. package/resource/knowledge/roomkit/core-sdk/vue/recording.md +245 -0
  30. package/resource/knowledge/roomkit/core-sdk/vue/whiteboard-annotation.md +196 -0
  31. package/resource/knowledge/roomkit/faq/error-code.md +103 -0
  32. package/resource/knowledge/roomkit/preset/harmonyos/integration.md +461 -0
  33. package/resource/knowledge/roomkit/preset/react/features/network-proxy.md +80 -0
  34. package/resource/knowledge/roomkit/preset/uniapp-app/integration.md +581 -0
  35. package/resource/knowledge/roomkit/preset/vue/features/ai-caption-translation.md +69 -0
  36. package/resource/knowledge/roomkit/preset/vue/features/ai-denoiser.md +67 -0
  37. package/resource/knowledge/roomkit/preset/vue/features/network-proxy.md +80 -0
  38. package/resource/knowledge/roomkit/preset/vue/features/recording.md +85 -0
  39. package/resource/knowledge/roomkit/preset/vue/features/whiteboard-annotation.md +86 -0
  40. package/server.js +1 -1
  41. package/utils/preflight-route.js +18 -6
  42. package/utils/report-cls-client.js +1 -1
  43. package/utils/report-es-client.js +1 -1
@@ -11,7 +11,7 @@
11
11
  |`timpush-configs.json`|腾讯云控制台下载|放入 Android 应用模块的 `assets` 目录,TIMPush 注册时会读取该配置文件。|
12
12
  |Android 工程包名|Android 工程 `applicationId`|需要与厂商平台应用包名保持一致。|
13
13
  |目标厂商配置|对应厂商配置文档|确认厂商侧已开通推送服务,并已在腾讯云控制台添加厂商证书。|
14
- |厂商配置文件|厂商开放平台|华为、荣耀、Google FCM 等厂商需要将对应 JSON 配置文件添加到工程中。|
14
+ |厂商配置文件|厂商开放平台|华为、荣耀、Google FCM 需要将对应 JSON 配置文件添加到工程中。|
15
15
  |测试真机|目标厂商设备|厂商通道建议使用对应厂商真机验证。设备厂商与配置厂商不一致时,验证结果可能误导。|
16
16
  |TIMPush 版本号 `VERSION`|更新日志|Gradle 依赖版本。本文使用 `VERSION` 占位,请替换为实际版本号。建议使用最新版本;如使用 7.7.5283 以下版本,荣耀通道配置可能有差异。|
17
17
 
@@ -19,17 +19,13 @@
19
19
 
20
20
  ## AI 集成
21
21
 
22
- 通过 npx 安装 [@tencent-rtc/trtc-push-skill](https://www.npmjs.com/package/@tencent-rtc/trtc-push-skill/v/1.0.1#%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) 到本地 AI IDE 中,辅助完成 TIMPush 离线推送集成。安装后,您可以直接向 AI 输入“集成 Android 离线推送”“帮我集成 Android TIMPush”等需求,AI 将根据项目类型引导您完成环境检测、厂商通道配置、凭据填写、代码接入和验证等步骤。
22
+ 通过 npx 安装 [@tencent-rtc/trtc-push-skill](https://www.npmjs.com/package/@tencent-rtc/trtc-push-skill/v/1.0.1#%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) 到本地 AI IDE 中,辅助完成 TIMPush 离线推送集成。安装后,您可以直接向 AI 输入“集成 Android 离线推送”等需求,AI 将根据项目类型引导您完成环境检测、厂商通道配置、凭据填写、代码接入和验证等步骤。详情可参考 AI Coding。
23
23
 
24
- > **注意:**
25
- > 使用 Push Skill AI 集成不是全自动流程,依然需要开发者在厂商配置控制台、腾讯云控制台等配置 Push 相关信息。具体的配置方法请参考下文相关章节。
26
- >
24
+ ## 手动集成
27
25
 
28
- ## 集成 TIMPush
26
+ ### 步骤1:集成 TIMPush SDK
29
27
 
30
- 如果您想手动集成,请按下述操作步骤依次完成放置配置文件、配置 Gradle、补充 Manifest 与混淆。
31
-
32
- ### 下载并添加 TIMPush 配置文件
28
+ #### 下载并添加 TIMPush 配置文件
33
29
 
34
30
  下载后,将该文件添加到应用模块的 `assets` 目录。推荐存储路径:`app/src/main/assets/timpush-configs.json`,其中 app 是您项目的应用模块,可替换成实际名称。如果工程中没有 `assets` 目录,请在 `src/main/` 下手动创建。
35
31
 
@@ -37,28 +33,9 @@
37
33
  > TIMPush 注册推送时会读取该文件中的厂商证书配置,不要放在 MainActivity 同级目录、工程根目录或 res 目录。如果文件缺失或放错目录,SDK 无法获得对应厂商通道配置,可能导致注册或收消息失败。
38
34
  >
39
35
 
40
- ### 添加厂商配置文件
41
-
42
- 部分厂商还需要把平台生成的配置文件添加到 Android 工程中。配置文件通常包含厂商项目、应用包名、证书指纹或服务账号等信息,厂商插件会在后续 Gradle 构建时读取这些文件。请在厂商配置阶段下载最新配置文件,并按厂商要求放置。
43
-
44
- |**厂商**|**配置文件**|**说明**|
45
- |---------|---------|---------|
46
- |荣耀|`mcs-services.json`|在荣耀开发者服务平台下载。修改项目、应用信息或开发服务设置后,需要重新下载。|
47
- |Google FCM|`google-services.json`|在 Firebase 控制台下载。|
48
-
49
- 推荐放置路径如下(与应用模块的 `build.gradle` / `build.gradle.kts` 同级),其中 app 是您项目的应用模块,可替换成实际名称:
50
- ``` text
51
- app/mcs-services.json # 荣耀
52
- app/google-services.json # Google FCM
53
- ```
54
-
55
- > **注意:**
56
- > 修改厂商平台项目、应用信息、证书指纹或开发服务设置后,厂商配置文件需要重新下载并替换。
57
- >
58
-
59
- ### 配置 Gradle 仓库
36
+ #### 配置 Gradle 仓库
60
37
 
61
- 配置仓库的目的是让 Gradle 能下载 TIMPush、厂商通道 SDK 和厂商插件。腾讯云 Maven 仓库用于解析腾讯云相关依赖;华为、荣耀 SDK 依赖厂商 Maven 仓库。如果仓库缺失,常见表现是 Gradle Sync 报依赖找不到。
38
+ 配置仓库的目的是让 Gradle 能下载 TIMPush 及相关依赖。本节只配置与厂商无关的公共仓库:`google()`、`mavenCentral()` 用于解析 Android 官方组件,腾讯云 Maven 仓库用于解析 TIMPush 等腾讯云依赖。华为、荣耀的厂商 Maven 仓库请在「厂商通道集成」对应厂商 Tab 中追加。
62
39
 
63
40
  Android 工程可能使用 Groovy DSL 或 Kotlin DSL,请先根据文件后缀判断当前工程使用的 DSL 类型:
64
41
 
@@ -85,8 +62,6 @@ pluginManagement {
85
62
  google()
86
63
  mavenCentral()
87
64
  maven { url "https://mirrors.tencent.com/nexus/repository/maven-public/" }
88
- maven { url "https://developer.huawei.com/repo/" }
89
- maven { url "https://developer.hihonor.com/repo" }
90
65
  }
91
66
  }
92
67
 
@@ -96,8 +71,6 @@ dependencyResolutionManagement {
96
71
  google()
97
72
  mavenCentral()
98
73
  maven { url "https://mirrors.tencent.com/nexus/repository/maven-public/" }
99
- maven { url "https://developer.huawei.com/repo/" }
100
- maven { url "https://developer.hihonor.com/repo" }
101
74
  }
102
75
  }
103
76
  ```
@@ -110,8 +83,6 @@ pluginManagement {
110
83
  google()
111
84
  mavenCentral()
112
85
  maven { url = uri("https://mirrors.tencent.com/nexus/repository/maven-public/") }
113
- maven { url = uri("https://developer.huawei.com/repo/") }
114
- maven { url = uri("https://developer.hihonor.com/repo") }
115
86
  }
116
87
  }
117
88
 
@@ -121,8 +92,6 @@ dependencyResolutionManagement {
121
92
  google()
122
93
  mavenCentral()
123
94
  maven { url = uri("https://mirrors.tencent.com/nexus/repository/maven-public/") }
124
- maven { url = uri("https://developer.huawei.com/repo/") }
125
- maven { url = uri("https://developer.hihonor.com/repo") }
126
95
  }
127
96
  }
128
97
  ```
@@ -130,7 +99,7 @@ dependencyResolutionManagement {
130
99
  【Gradle 7.0 版本】
131
100
 
132
101
  Gradle 7.0 版本通常使用 Groovy DSL。如您的工程使用 Kotlin DSL,请将单引号改为双引号,`url "..."` 改为 `url = uri("...")`。
133
- 1. 在项目级 `build.gradle` 的 `buildscript > repositories` 中添加插件仓库。
102
+ 1. 在项目级 `build.gradle` 的 `buildscript > repositories` 中添加插件仓库。华为、荣耀、Google FCM 的插件 classpath 请在「厂商通道集成」对应厂商 Tab 中追加。
134
103
 
135
104
  ``` groovy
136
105
  buildscript {
@@ -138,13 +107,6 @@ buildscript {
138
107
  google()
139
108
  mavenCentral()
140
109
  maven { url "https://mirrors.tencent.com/nexus/repository/maven-public/" }
141
- maven { url "https://developer.huawei.com/repo/" }
142
- maven { url "https://developer.hihonor.com/repo" }
143
- }
144
- dependencies {
145
- classpath 'com.google.gms:google-services:4.3.15'
146
- classpath 'com.huawei.agconnect:agcp:1.6.0.300'
147
- classpath 'com.hihonor.mcs:asplugin:2.0.1.300'
148
110
  }
149
111
  }
150
112
  ```
@@ -157,65 +119,748 @@ dependencyResolutionManagement {
157
119
  google()
158
120
  mavenCentral()
159
121
  maven { url "https://mirrors.tencent.com/nexus/repository/maven-public/" }
122
+ }
123
+ }
124
+ ```
125
+
126
+ 【Gradle 7.0 以下版本】
127
+
128
+ Gradle 7.0 以下版本通常使用 Groovy DSL。如您的工程使用 Kotlin DSL,请将单引号改为双引号,`url "..."` 改为 `url = uri("...")`。
129
+
130
+ 在项目级 `build.gradle` 的 `buildscript > repositories` 和 `allprojects > repositories` 中添加仓库。华为、荣耀、Google FCM 的插件 classpath 请在「厂商通道集成」对应厂商 Tab 中追加。
131
+ ``` groovy
132
+ buildscript {
133
+ repositories {
134
+ google()
135
+ mavenCentral()
136
+ maven { url "https://mirrors.tencent.com/nexus/repository/maven-public/" }
137
+ }
138
+ }
139
+
140
+ allprojects {
141
+ repositories {
142
+ google()
143
+ mavenCentral()
144
+ maven { url "https://mirrors.tencent.com/nexus/repository/maven-public/" }
145
+ }
146
+ }
147
+ ```
148
+
149
+ #### 集成 TIMPush 基础依赖
150
+
151
+ 在应用模块的 `build.gradle` 或 `build.gradle.kts` 中添加 TIMPush 基础依赖。基础包提供 TIMPush 注册、监听和通用能力。
152
+
153
+ 下方示例中的 `VERSION` 均指 TIMPush SDK 的版本号(如 `8.9.7537`),不是 Android 系统版本或厂商 SDK 版本。获取最新版本号请查看更新日志。
154
+
155
+ 【Groovy DSL】
156
+ ``` groovy
157
+ dependencies {
158
+ implementation 'com.tencent.timpush:timpush:VERSION'
159
+ implementation 'com.tencent.liteav.tuikit:tuicore:VERSION'
160
+ }
161
+ ```
162
+
163
+ 【Kotlin DSL】
164
+ ``` kotlin
165
+ dependencies {
166
+ implementation("com.tencent.timpush:timpush:VERSION")
167
+ implementation("com.tencent.liteav.tuikit:tuicore:VERSION")
168
+ }
169
+ ```
170
+
171
+ 添加依赖后,请在 Android Studio 中单击 **Sync Now**,或选择 **File > Sync Project with Gradle Files** 触发 Gradle 同步。
172
+
173
+ > **注意:**
174
+ > `TIMPush`、`TUICore` 和各厂商通道包建议使用相同 `VERSION`,避免依赖冲突。项目已接入 IM SDK 或 TUIKit 时,也需要确认相关 SDK 版本兼容。
175
+ >
176
+
177
+ **验证**:Gradle Sync 成功完成,无报错。如果报依赖找不到,请检查 `VERSION` 是否正确、腾讯云 Maven 仓库是否缺失。
178
+
179
+ #### 设置混淆规则
180
+
181
+ 如果应用开启了代码混淆,请在 `proguard-rules.pro` 中加入 TIMPush 相关类不混淆规则。该配置用于避免 Release 包中 TIMPush 相关类、回调或厂商适配逻辑被混淆后无法正常调用:
182
+ ``` proguard
183
+ -keep class com.tencent.qcloud.** { *; }
184
+ -keep class com.tencent.timpush.** { *; }
185
+ ```
186
+
187
+ 完成后,请重新构建 Release 包,并在真机上验证注册和收消息链路。
188
+
189
+ **验证**:App 可在目标厂商真机上正常安装和启动,无崩溃。如果启动崩溃,请检查 `Application` 声明、配置文件位置和 Manifest 合并错误。同时确认测试真机厂商与目标厂商通道一致(如不要在华为设备上验证荣耀通道)。
190
+
191
+ ### 步骤2:集成厂商通道 SDK
192
+
193
+ 请按目标厂商页签配置对应通道。只集成某个厂商时,只添加该厂商需要的配置文件、插件和依赖即可。
194
+
195
+ 【小米】
196
+
197
+ #### **前置**
198
+
199
+ 请先完成 小米厂商配置,并确认:
200
+ - 已在腾讯云控制台添加小米厂商证书;
201
+
202
+ - 已重新下载包含小米证书的 `timpush-configs.json`,并放入应用模块 `assets` 目录;
203
+
204
+ - 使用小米真机验证。
205
+
206
+ #### **1. 集成 TIMPush 厂商依赖**
207
+
208
+ 在应用模块 `build.gradle` 或 `build.gradle.kts` 的 `dependencies` 中追加小米通道包,`VERSION` 与基础包保持一致:
209
+
210
+ 【Groovy DSL】
211
+ ``` groovy
212
+ implementation 'com.tencent.timpush:xiaomi:VERSION'
213
+ ```
214
+
215
+ 【Kotlin DSL】
216
+ ``` kotlin
217
+ implementation("com.tencent.timpush:xiaomi:VERSION")
218
+ ```
219
+
220
+ 集成结果判断:Gradle Sync 成功完成,无报错。
221
+
222
+ #### **2. 配置消息触达统计(可选)**
223
+
224
+ 小米通道当前无需在客户端额外配置回执地址。如需统计,请按 小米厂商配置 完成控制台侧配置。
225
+
226
+ #### **3. 配置消息分类(可选)**
227
+
228
+ 发送离线推送时可通过 SDK API 设置小米渠道 ID,API 设置优先级通常高于控制台证书默认配置。调用 [`setAndroidXiaoMiChannelID(String channelID)`](https://im.sdk.qcloud.com/doc/zh-cn/classcom_1_1tencent_1_1imsdk_1_1v2_1_1V2TIMOfflinePushInfo.html#ac769aec48cdbc9a57416c5a79504617a) 设置小米渠道 `channelID`:
229
+ ``` java
230
+ V2TIMOfflinePushInfo pushInfo = new V2TIMOfflinePushInfo();
231
+ pushInfo.setAndroidXiaoMiChannelID("your_xiaomi_channel_id");
232
+ ```
233
+
234
+ 【华为】
235
+
236
+ #### **前置**
237
+
238
+ 请先完成 华为厂商配置,并确认:
239
+ - 已在腾讯云控制台添加华为厂商证书;
240
+
241
+ - 已重新下载包含华为证书的 `timpush-configs.json`,并放入应用模块 `assets` 目录;
242
+
243
+ - 测试包当前签名(debug 或 release)的 SHA-256 已在华为控制台「项目设置 > 常规 > SHA 证书指纹」中添加,指纹不一致会报 `6003: certificate fingerprint error`;
244
+
245
+ - 使用华为真机验证。
246
+
247
+ #### **1. 添加厂商配置文件**
248
+
249
+ ``` text
250
+
251
+ ```
252
+
253
+ 修改项目、应用信息、证书指纹或服务配置后,建议重新下载并替换。后续构建时,华为 AGConnect 插件会读取该文件并将厂商要求的资源、Manifest 信息合并进应用包。
254
+
255
+ #### **2. 配置 Gradle 插件**
256
+
257
+ ##### **追加厂商 Maven 仓库**
258
+
259
+ 请在「配置 Gradle 仓库」已添加的公共仓库基础上,追加华为仓库。
260
+
261
+ 【Gradle 7.1 及以上】
262
+
263
+ 在 `settings.gradle` 或 `settings.gradle.kts` 的 `pluginManagement > repositories` 和 `dependencyResolutionManagement > repositories` 中追加:
264
+
265
+ 【Groovy DSL】
266
+ ``` java
267
+ maven { url "https://developer.huawei.com/repo/" }
268
+ ```
269
+
270
+ 【Kotlin DSL】
271
+ ``` java
272
+ maven { url = uri("https://developer.huawei.com/repo/") }
273
+ ```
274
+
275
+ 【Gradle 7.0 及以下】
276
+
277
+ 在项目级 `build.gradle` 的 `buildscript > repositories`,以及 `settings.gradle` 的 `dependencyResolutionManagement > repositories`(Gradle 7.0)或 `allprojects > repositories`(Gradle 7.0 以下)中追加:
278
+ ``` groovy
279
+ maven { url "https://developer.huawei.com/repo/" }
280
+ ```
281
+
282
+ ##### **配置项目级插件依赖**
283
+
284
+ 【Gradle 7.1 及以上】
285
+
286
+ Gradle 7.1 及以上项目通常在 `settings.gradle` 中配置依赖仓库。由于华为插件通过 `buildscript > dependencies > classpath` 声明,还需要在项目级 `build.gradle` 或 `build.gradle.kts` 的 `buildscript > repositories` 中包含 `google()` 和华为仓库,否则可能出现插件 classpath 依赖解析失败。
287
+
288
+ 如果项目级 `build.gradle.kts` 已通过 `plugins {}` 块声明 AGP,原有 `plugins {}` 块保留不动,在 `dependencies` 中声明 `com.android.tools.build:gradle` 即可。如果项目同时使用 Kotlin Android 插件,也请声明 `org.jetbrains.kotlin:kotlin-gradle-plugin`。
289
+
290
+ 【Groovy DSL(build.gradle)】
291
+ ``` java
292
+ buildscript {
293
+ repositories {
294
+ google()
295
+ mavenCentral()
296
+ gradlePluginPortal()
297
+ maven { url "https://mirrors.tencent.com/nexus/repository/maven-public/" }
160
298
  maven { url "https://developer.huawei.com/repo/" }
161
- maven { url "https://developer.hihonor.com/repo" }
162
299
  }
300
+ dependencies {
301
+ // 请与项目当前 Android Gradle Plugin 版本保持一致。
302
+ classpath 'com.android.tools.build:gradle:<AGP_VERSION>'
303
+ // 如果项目使用 Kotlin Android 插件,请与项目当前 Kotlin Gradle Plugin 版本保持一致。
304
+ classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:<KOTLIN_VERSION>'
305
+ // 华为 AGConnect。Gradle 8 / AGP 8 项目不要继续使用 1.6.0.300。
306
+ classpath 'com.huawei.agconnect:agcp:1.9.1.301'
307
+ }
308
+ }
309
+ ```
310
+
311
+ 【Kotlin DSL(build.gradle.kts)】
312
+ ``` java
313
+ buildscript {
314
+ repositories {
315
+ google()
316
+ mavenCentral()
317
+ gradlePluginPortal()
318
+ maven { url = uri("https://mirrors.tencent.com/nexus/repository/maven-public/") }
319
+ maven { url = uri("https://developer.huawei.com/repo/") }
320
+ }
321
+ dependencies {
322
+ // 请与项目当前 Android Gradle Plugin 版本保持一致。
323
+ classpath("com.android.tools.build:gradle:<AGP_VERSION>")
324
+ // 如果项目使用 Kotlin Android 插件,请与项目当前 Kotlin Gradle Plugin 版本保持一致。
325
+ classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:<KOTLIN_VERSION>")
326
+ // 华为 AGConnect。Gradle 8 / AGP 8 项目不要继续使用 1.6.0.300。
327
+ classpath("com.huawei.agconnect:agcp:1.9.1.301")
328
+ }
329
+ }
330
+ ```
331
+ 1. 请将`<AGP_VERSION>`替换为项目当前使用的 Android Gradle Plugin 版本,例如 `8.9.1`。如果项目级 `plugins {}` 块中已经声明了 `com.android.application` 版本,两个位置的 AGP 版本需要保持一致。
332
+
333
+ 2. 请将`<KOTLIN_VERSION>` 替换为项目当前使用的 Kotlin Gradle Plugin 版本;如果项目未使用 Kotlin Android 插件,可删除该行。
334
+
335
+ > **注意:**
336
+ > 对于 Gradle 8 / AGP 8 项目,请不要继续使用 `com.huawei.agconnect:agcp:1.6.0.300`。AGP 8.0 已移除 Transform API,旧版 AGC 插件存在兼容风险,建议使用 `com.huawei.agconnect:agcp:1.9.1.301` 或更高已验证版本。
337
+ >
338
+
339
+ 【Gradle 7.0 及以下】
340
+
341
+ 在项目级 `build.gradle` 的 `buildscript > dependencies` 中追加:
342
+ ``` groovy
343
+ classpath 'com.huawei.agconnect:agcp:1.6.0.300'
344
+ ```
345
+
346
+ 如果旧工程已升级到 Gradle 8 / AGP 8,请不要继续使用 `1.6.0.300`,建议改为 `com.huawei.agconnect:agcp:1.9.1.301` 或更高已验证版本。
347
+
348
+ ##### **在应用模块启用插件**
349
+
350
+ 完成项目级插件依赖配置后,还需要在应用模块的 `build.gradle` 或 `build.gradle.kts` 中启用华为插件。应用模块通常为 `app`。
351
+
352
+ 如果应用模块中已经存在 `plugins` 块,请在现有 `plugins` 块中追加,不要重复添加已有的 `com.android.application` 插件。
353
+
354
+ 【Groovy DSL(app/build.gradle)】
355
+ ``` groovy
356
+ plugins {
357
+ // 华为 AGConnect。
358
+ id 'com.huawei.agconnect'
359
+ }
360
+ // 或:apply plugin: 'com.huawei.agconnect'
361
+ ```
362
+
363
+ 【Kotlin DSL(app/build.gradle.kts)】
364
+ ``` kotlin
365
+ plugins {
366
+ // 华为 AGConnect。
367
+ id("com.huawei.agconnect")
163
368
  }
369
+ // 或:apply(plugin = "com.huawei.agconnect")
370
+ ```
371
+
372
+ 完成配置后,请在 Android Studio 中单击 **Sync Now**,或选择 **File > Sync Project with Gradle Files** 触发 Gradle 同步。同步成功后,再执行构建验证。
373
+
374
+ #### **3. 集成 TIMPush 厂商依赖**
375
+
376
+ 在应用模块 `build.gradle` 或 `build.gradle.kts` 的 `dependencies` 中追加华为通道包,`VERSION` 与基础包保持一致:
377
+
378
+ 【Groovy DSL】
379
+ ``` groovy
380
+ implementation 'com.tencent.timpush:huawei:VERSION'
381
+ ```
382
+
383
+ 【Kotlin DSL】
384
+ ``` kotlin
385
+ implementation("com.tencent.timpush:huawei:VERSION")
386
+ ```
387
+
388
+ #### **4. 配置消息触达统计(可选)**
389
+
390
+ 如需统计触达或点击数据,请配置回执地址 `https://api.im.qcloud.com/v3/offline_push_report/huawei`。华为推送证书 ID `<= 11344` 时使用华为推送 v2 接口,不支持触达和点击回执;如需支持统计,请重新生成并更新证书 ID。回执地址不配置或配置错误,都会影响触达统计。
391
+
392
+ #### **5. 配置消息分类(可选)**
393
+
394
+ 发送离线推送时可通过 SDK API 设置华为消息分类,API 设置优先级通常高于控制台证书默认配置。调用 [`setAndroidHuaWeiCategory(String category)`](https://im.sdk.qcloud.com/doc/zh-cn/classcom_1_1tencent_1_1imsdk_1_1v2_1_1V2TIMOfflinePushInfo.html#ad9dea3cb382c0c1a3c1a63738697fc1f) 设置华为推送消息分类:
395
+ ``` java
396
+ V2TIMOfflinePushInfo pushInfo = new V2TIMOfflinePushInfo();
397
+ pushInfo.setAndroidHuaWeiCategory("IM");
398
+ ```
399
+
400
+ 【OPPO】
401
+
402
+ #### **前置**
403
+
404
+ 请先完成 OPPO 厂商配置,并确认:
405
+ - 已在腾讯云控制台添加 OPPO 厂商证书;
406
+
407
+ - 已重新下载包含 OPPO 证书的 `timpush-configs.json`,并放入应用模块 `assets` 目录;
408
+
409
+ - 使用 OPPO 真机验证。
410
+
411
+ #### **1. 集成 TIMPush 厂商依赖**
412
+
413
+ 在应用模块 `build.gradle` 或 `build.gradle.kts` 的 `dependencies` 中追加 OPPO 通道包,`VERSION` 与基础包保持一致:
414
+
415
+ 【Groovy DSL】
416
+ ``` groovy
417
+ implementation 'com.tencent.timpush:oppo:VERSION'
418
+ ```
419
+
420
+ 【Kotlin DSL】
421
+ ``` kotlin
422
+ implementation("com.tencent.timpush:oppo:VERSION")
164
423
  ```
165
424
 
166
- 【Gradle 7.0 以下版本】
425
+ 集成结果判断:Gradle Sync 成功完成,无报错。
426
+
427
+ #### **2. 配置消息触达统计(可选)**
428
+
429
+ OPPO 通道当前无需在客户端额外配置回执地址。如需统计,请按 OPPO 厂商配置 完成控制台侧配置。
430
+
431
+ #### **3. 配置消息分类(可选)**
432
+
433
+ OPPO 同时存在新规则和旧规则,不要混用。
434
+ - 新规则:适用于新接入应用,或按 OPPO 新消息分类改造的应用。使用 `category`、私信模板参数,以及可选的 `notify_level`。
435
+
436
+ - 旧规则:仅适用于此前已开通 OPPO 私信通道权限的存量应用,使用已创建并在 OPPO 推送运营后台登记的私信通道 `ChannelID`。
437
+
438
+ 只有 IM 聊天、订单、交易、账号变更等用户预期强、需要及时触达的消息,才建议申请或使用高优先级分类。营销、广告、活动、资讯类消息不应滥用高优分类,否则可能被厂商降级、限频或冻结权限。
439
+
440
+ 发送离线推送时可通过 SDK API 设置,API 设置优先级通常高于控制台证书默认配置。
441
+
442
+ ##### **OPPO 新规则配置**
443
+
444
+ OPPO 新接入应用建议使用新消息分类规则。IM 聊天、音视频通话等需要及时触达的消息,通常使用 `category=IM`,并按 OPPO 要求申请通讯与服务不限量权益或私信模板。
445
+ ``` java
446
+ V2TIMOfflinePushInfo pushInfo = new V2TIMOfflinePushInfo();
447
+
448
+ // New OPPO message classification rule. Use IM for chat and call messages.
449
+ pushInfo.setAndroidOPPOCategory("IM");
450
+
451
+ // Optional. 1 = notification bar, 2 = notification bar + lock screen + sound + vibration.
452
+ // Use 16 only after OPPO strong reminder capability is approved.
453
+ pushInfo.setAndroidOPPONotifyLevel(2);
454
+ ```
455
+
456
+ 对应 API:
457
+ - [`setAndroidOPPOCategory(String category)`](https://im.sdk.qcloud.com/doc/zh-cn/classcom_1_1tencent_1_1imsdk_1_1v2_1_1V2TIMOfflinePushInfo.html#a6a62542254c53626b81ce24380b0a2fb):设置 OPPO 新消息分类,例如 IM 消息使用 `IM`。
458
+
459
+ - [`setAndroidOPPONotifyLevel(int level)`](https://im.sdk.qcloud.com/doc/zh-cn/classcom_1_1tencent_1_1imsdk_1_1v2_1_1V2TIMOfflinePushInfo.html#a1fd2e7d168b5412fc263274842855c57):设置 OPPO 通知栏消息提醒等级。使用前需要先设置 `category`;如需 `16`,需先向 OPPO 申请强提醒能力。
460
+
461
+ 如需使用 OPPO 私信模板,可通过 [`V2TIMOfflinePushInfo.setVendorParams(String vendorParams)`](https://im.sdk.qcloud.com/doc/zh-cn/classcom_1_1tencent_1_1imsdk_1_1v2_1_1V2TIMOfflinePushInfo.html#aedaa6ba7f49f3abfc04a8efaaf45e0c7) 携带厂商扩展参数。根据腾讯云离线推送消息属性设置文档,`vendorParams` 是 JSON 字符串,且 `oppoTitleParam`、`oppoContentParam` 等字段本身也需要序列化为 JSON 字符串。
462
+ ``` java
463
+ Map<String, Object> vendorParams = new HashMap<>();
464
+ vendorParams.put("oppoTemplateId", "OPPO 私信模板 ID");
465
+
466
+ Map<String, Object> titleParams = new HashMap<>();
467
+ titleParams.put("title", "推送标题");
468
+ vendorParams.put("oppoTitleParam", new Gson().toJson(titleParams));
469
+
470
+ Map<String, Object> contentParams = new HashMap<>();
471
+ contentParams.put("desc", "推送内容");
472
+ vendorParams.put("oppoContentParam", new Gson().toJson(contentParams));
473
+
474
+ pushInfo.setVendorParams(new Gson().toJson(vendorParams));
475
+ ```
476
+
477
+ `vendorParams` 扩展参数能力要求 IMSDK 8.7 及以上版本。`oppoTemplateId` 必须是 OPPO 私信申请得到的模板 ID,不支持开发者自拟。`oppoTitleParam` 和 `oppoContentParam` 中的 key 需要与 OPPO 模板中的占位符一致。
478
+
479
+ ##### **OPPO 旧规则配置**
480
+
481
+ 旧规则仅适用于此前已开通 OPPO 私信通道权限的存量应用。如果应用仍按旧规则使用私信通道,请确保客户端创建的通道 ID 已在 OPPO 推送运营后台登记,并与发送离线推送时设置的 `channelID` 保持一致。
482
+ ``` java
483
+ V2TIMOfflinePushInfo pushInfo = new V2TIMOfflinePushInfo();
484
+
485
+ // Old OPPO private channel rule for existing apps only.
486
+ pushInfo.setAndroidOPPOChannelID("your_oppo_private_channel_id");
487
+ ```
488
+
489
+ 新接入应用不要把 [`setAndroidOPPOChannelID`](https://im.sdk.qcloud.com/doc/zh-cn/classcom_1_1tencent_1_1imsdk_1_1v2_1_1V2TIMOfflinePushInfo.html#a32d340e95395bb64cc3e8f62321aafe1) 当作 OPPO 新消息分类的必配项。新规则优先使用 [`setAndroidOPPOCategory`](https://im.sdk.qcloud.com/doc/zh-cn/classcom_1_1tencent_1_1imsdk_1_1v2_1_1V2TIMOfflinePushInfo.html#a6a62542254c53626b81ce24380b0a2fb),并按需配置 [`setVendorParams`](https://im.sdk.qcloud.com/doc/zh-cn/classcom_1_1tencent_1_1imsdk_1_1v2_1_1V2TIMOfflinePushInfo.html#aedaa6ba7f49f3abfc04a8efaaf45e0c7) 和 [`setAndroidOPPONotifyLevel`](https://im.sdk.qcloud.com/doc/zh-cn/classcom_1_1tencent_1_1imsdk_1_1v2_1_1V2TIMOfflinePushInfo.html#a1fd2e7d168b5412fc263274842855c57)。
490
+
491
+ 【vivo】
492
+
493
+ #### **前置**
494
+
495
+ 请先完成 vivo 厂商配置,并确认:
496
+ - 已在腾讯云控制台添加 vivo 厂商证书;
497
+
498
+ - 已重新下载包含 vivo 证书的 `timpush-configs.json`,并放入应用模块 `assets` 目录;
499
+
500
+ - 使用 vivo 真机验证。
501
+
502
+ #### **1. 集成 TIMPush 厂商依赖**
503
+
504
+ 在应用模块 `build.gradle` 或 `build.gradle.kts` 的 `dependencies` 中追加 vivo 通道包,`VERSION` 与基础包保持一致:
505
+
506
+ 【Groovy DSL】
507
+ ``` groovy
508
+ implementation 'com.tencent.timpush:vivo:VERSION'
509
+ ```
510
+
511
+ 【Kotlin DSL】
512
+ ``` kotlin
513
+ implementation("com.tencent.timpush:vivo:VERSION")
514
+ ```
515
+
516
+ #### **2. 配置 manifestPlaceholders 和 AndroidManifest.xml**
517
+
518
+ vivo 需要将厂商分配的 AppID / AppKey 配置到清单文件中。厂商 SDK 会从 Manifest 中读取这些值来识别当前应用;缺失或填写错误可能导致编译失败或厂商注册失败。您可以选择 `manifestPlaceholders` 或直接在 `AndroidManifest.xml` 中配置 `meta-data`。
519
+
520
+ 【方法 1:配置 manifestPlaceholders】
521
+
522
+ 在 `manifestPlaceholders` 里添加条目:
523
+
524
+ 【Groovy DSL】
525
+ ``` groovy
526
+ android {
527
+ defaultConfig {
528
+ manifestPlaceholders = [
529
+ "VIVO_APPKEY": "您应用分配的证书 APPKEY",
530
+ "VIVO_APPID" : "您应用分配的证书 APPID"
531
+ ]
532
+ }
533
+ }
534
+ ```
535
+
536
+ 【Kotlin DSL】
537
+ ``` kotlin
538
+ android {
539
+ defaultConfig {
540
+ manifestPlaceholders["VIVO_APPKEY"] = "您应用分配的证书 APPKEY"
541
+ manifestPlaceholders["VIVO_APPID"] = "您应用分配的证书 APPID"
542
+ }
543
+ }
544
+ ```
545
+
546
+ 【方法 2:配置 AndroidManifest.xml】
547
+
548
+ 在 `AndroidManifest.xml` 中配置 `meta-data`:
549
+ ``` xml
550
+ <application>
551
+ <!-- vivo begin -->
552
+ <meta-data
553
+ tools:replace="android:value"
554
+ android:name="com.vivo.push.api_key"
555
+ android:value="您应用分配的证书 APPKEY" />
556
+
557
+ <meta-data
558
+ tools:replace="android:value"
559
+ android:name="com.vivo.push.app_id"
560
+ android:value="您应用分配的证书 APPID" />
561
+ <!-- vivo end -->
562
+ </application>
563
+ ```
564
+
565
+ 如果使用 `tools:replace`,请确认 `manifest` 根节点包含 `tools` 命名空间:
566
+ ``` xml
567
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android"
568
+ xmlns:tools="http://schemas.android.com/tools">
569
+ </manifest>
570
+ ```
571
+
572
+ 集成结果判断:Gradle Sync 成功完成,无报错。
573
+
574
+ #### **3. 配置消息触达统计(可选)**
575
+
576
+ 如需统计触达或点击数据,请配置回执地址 `https://api.im.qcloud.com/v3/offline_push_report/vivo`,并按控制台要求配置回执 ID。回执地址不配置或配置错误,都会影响触达统计。
577
+
578
+ #### **4. 配置消息分类(可选)**
579
+
580
+ 发送离线推送时可通过 SDK API 设置 vivo 消息类别,API 设置优先级通常高于控制台证书默认配置。调用 [`setAndroidVIVOCategory(String category)`](https://im.sdk.qcloud.com/doc/zh-cn/classcom_1_1tencent_1_1imsdk_1_1v2_1_1V2TIMOfflinePushInfo.html#ae7341caa3c58aec949cf186cb25af591) 设置 vivo 推送消息类别:
581
+ ``` java
582
+ V2TIMOfflinePushInfo pushInfo = new V2TIMOfflinePushInfo();
583
+ pushInfo.setAndroidVIVOCategory("IM");
584
+ ```
585
+
586
+ 【荣耀】
587
+
588
+ #### **前置**
589
+
590
+ 请先完成 荣耀厂商配置,并确认:
591
+ - 已在腾讯云控制台添加荣耀厂商证书;
592
+
593
+ - 已重新下载包含荣耀证书的 `timpush-configs.json`,并放入应用模块 `assets` 目录;
594
+
595
+ - 测试包当前签名(debug 或 release)的 SHA-256 已在荣耀控制台「项目设置 > 常规 > SHA 证书指纹」中添加,指纹不一致会报 `6003: certificate fingerprint error`;
596
+
597
+ - 使用荣耀真机验证。不要在华为设备上验证荣耀通道。
598
+
599
+ #### **1. 添加厂商配置文件**
600
+
601
+ 在荣耀开发者服务平台下载 `mcs-services.json`,添加到应用模块根目录(与应用模块的 `build.gradle` / `build.gradle.kts` 同级):
602
+ ``` text
603
+ app/mcs-services.json
604
+ ```
605
+
606
+ 修改项目、应用信息或开发服务设置后,需要重新下载并替换。后续构建时,荣耀插件会读取该文件并将厂商要求的资源、Manifest 信息合并进应用包。
607
+
608
+ #### **2. 配置 Gradle 插件**
609
+
610
+ 荣耀需要通过 `com.hihonor.mcs:asplugin` 在构建期读取 `mcs-services.json`,并依赖荣耀 Maven 仓库解析插件与 SDK。荣耀官方示例统一使用 `buildscript > dependencies > classpath` 形式,未提供 `plugins {}` 块写法。
611
+
612
+ ##### **追加厂商 Maven 仓库**
613
+
614
+ 请在「配置 Gradle 仓库」已添加的公共仓库基础上,追加荣耀仓库。
615
+
616
+ 【Gradle 7.1 及以上】
617
+
618
+ 在 `settings.gradle` 或 `settings.gradle.kts` 的 `pluginManagement > repositories` 和 `dependencyResolutionManagement > repositories` 中追加:
619
+
620
+ 【Groovy DSL】
621
+ ``` java
622
+ maven { url "https://developer.hihonor.com/repo" }
623
+ ```
624
+
625
+ 【Kotlin DSL】
626
+ ``` java
627
+ maven { url = uri("https://developer.hihonor.com/repo") }
628
+ ```
629
+
630
+ 【Gradle 7.0 及以下】
631
+
632
+ 在项目级 `build.gradle` 的 `buildscript > repositories`,以及 `settings.gradle` 的 `dependencyResolutionManagement > repositories`(Gradle 7.0)或 `allprojects > repositories`(Gradle 7.0 以下)中追加:
633
+ ``` groovy
634
+ maven { url "https://developer.hihonor.com/repo" }
635
+ ```
636
+
637
+ ##### **配置项目级插件依赖**
638
+
639
+ 【Gradle 7.1 及以上】
640
+
641
+ 如果项目级 `build.gradle.kts` 已通过 `plugins {}` 块声明 AGP(新建 Kotlin DSL 项目的默认方式),原有 `plugins {}` 块保留不动,不需要整体迁移到 `buildscript` 写法。由于荣耀官方示例统一使用 `buildscript > dependencies > classpath` 声明 `asplugin`,请在项目级 Gradle 文件中额外补充 `buildscript` 配置,并在 `dependencies` 中声明 `com.android.tools.build:gradle`。如果项目同时使用 Kotlin Android 插件,也请声明 `org.jetbrains.kotlin:kotlin-gradle-plugin`。
642
+
643
+ 【Groovy DSL(build.gradle)】
644
+ ``` java
645
+ buildscript {
646
+ repositories {
647
+ google()
648
+ mavenCentral()
649
+ gradlePluginPortal()
650
+ maven { url "https://mirrors.tencent.com/nexus/repository/maven-public/" }
651
+ maven { url "https://developer.hihonor.com/repo" }
652
+ }
653
+ dependencies {
654
+ // 请与项目当前 Android Gradle Plugin 版本保持一致。
655
+ classpath 'com.android.tools.build:gradle:<AGP_VERSION>'
656
+ // 如果项目使用 Kotlin Android 插件,请与项目当前 Kotlin Gradle Plugin 版本保持一致。
657
+ classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:<KOTLIN_VERSION>'
658
+ // 荣耀 Push。
659
+ classpath 'com.hihonor.mcs:asplugin:2.0.1.300'
660
+ }
661
+ }
662
+ ```
663
+
664
+ 【Kotlin DSL(build.gradle.kts)】
665
+ ``` java
666
+ buildscript {
667
+ repositories {
668
+ google()
669
+ mavenCentral()
670
+ gradlePluginPortal()
671
+ maven { url = uri("https://mirrors.tencent.com/nexus/repository/maven-public/") }
672
+ maven { url = uri("https://developer.hihonor.com/repo") }
673
+ }
674
+ dependencies {
675
+ // 请与项目当前 Android Gradle Plugin 版本保持一致。
676
+ classpath("com.android.tools.build:gradle:<AGP_VERSION>")
677
+ // 如果项目使用 Kotlin Android 插件,请与项目当前 Kotlin Gradle Plugin 版本保持一致。
678
+ classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:<KOTLIN_VERSION>")
679
+ // 荣耀 Push。
680
+ classpath("com.hihonor.mcs:asplugin:2.0.1.300")
681
+ }
682
+ }
683
+ ```
684
+ 1. 请将`<AGP_VERSION>`替换为项目当前使用的 Android Gradle Plugin 版本,例如 `8.9.1`。如果项目级 `plugins {}` 块中已经声明了 `com.android.application` 版本,两个位置的 AGP 版本需要保持一致。
685
+
686
+ 2. 请将`<KOTLIN_VERSION>` 替换为项目当前使用的 Kotlin Gradle Plugin 版本;如果项目未使用 Kotlin Android 插件,可删除该行。
687
+
688
+ 【Gradle 7.0 及以下】
689
+
690
+ 在项目级 `build.gradle` 的 `buildscript > dependencies` 中追加:
691
+ ``` groovy
692
+ classpath 'com.hihonor.mcs:asplugin:2.0.1.300'
693
+ ```
694
+
695
+ ##### **在应用模块启用插件**
696
+
697
+ 完成项目级插件依赖配置后,还需要在应用模块的 `build.gradle` 或 `build.gradle.kts` 中启用荣耀插件。应用模块通常为 `app`。
698
+
699
+ 如果应用模块中已经存在 `plugins` 块,请在现有 `plugins` 块中追加,不要重复添加已有的 `com.android.application` 插件。应用级 `plugins { id("com.hihonor.mcs.asplugin") }` 可省略版本号(由项目级 classpath 提供),或改写为 `apply plugin`。
700
+
701
+ 【Groovy DSL(app/build.gradle)】
702
+ ``` groovy
703
+ plugins {
704
+ // 荣耀 Push。
705
+ id 'com.hihonor.mcs.asplugin'
706
+ }
707
+ // 或:apply plugin: 'com.hihonor.mcs.asplugin'
708
+ ```
709
+
710
+ 【Kotlin DSL(app/build.gradle.kts)】
711
+ ``` kotlin
712
+ plugins {
713
+ // 荣耀 Push。
714
+ id("com.hihonor.mcs.asplugin")
715
+ }
716
+ // 或:apply(plugin = "com.hihonor.mcs.asplugin")
717
+ ```
718
+
719
+ 完成配置后,请在 Android Studio 中单击 **Sync Now**,或选择 **File > Sync Project with Gradle Files** 触发 Gradle 同步。
720
+
721
+ #### **3. 集成 TIMPush 厂商依赖**
722
+
723
+ 在应用模块 `build.gradle` 或 `build.gradle.kts` 的 `dependencies` 中追加荣耀通道包,`VERSION` 与基础包保持一致:
724
+
725
+ 【Groovy DSL】
726
+ ``` groovy
727
+ implementation 'com.tencent.timpush:honor:VERSION'
728
+ ```
729
+
730
+ 【Kotlin DSL】
731
+ ``` kotlin
732
+ implementation("com.tencent.timpush:honor:VERSION")
733
+ ```
734
+
735
+ #### **4. 配置 manifestPlaceholders 和 AndroidManifest.xml**
736
+
737
+ 荣耀需要将厂商分配的 AppID 配置到清单文件中。厂商 SDK 会从 Manifest 中读取该值来识别当前应用;缺失或填写错误可能导致编译失败或厂商注册失败。您可以选择 `manifestPlaceholders` 或直接在 `AndroidManifest.xml` 中配置 `meta-data`。
738
+
739
+ 【方法 1:配置 manifestPlaceholders】
740
+
741
+ 【Groovy DSL】
742
+ ``` groovy
743
+ android {
744
+ defaultConfig {
745
+ manifestPlaceholders = [
746
+ "HONOR_APPID": "您应用分配的证书 APPID"
747
+ ]
748
+ }
749
+ }
750
+ ```
751
+
752
+ 【Kotlin DSL】
753
+ ``` kotlin
754
+ android {
755
+ defaultConfig {
756
+ manifestPlaceholders["HONOR_APPID"] = "您应用分配的证书 APPID"
757
+ }
758
+ }
759
+ ```
760
+
761
+ 【方法 2:配置 AndroidManifest.xml】
762
+ ``` xml
763
+ <application>
764
+ <!-- honor begin -->
765
+ <meta-data
766
+ tools:replace="android:value"
767
+ android:name="com.hihonor.push.app_id"
768
+ android:value="您应用分配的证书 APPID" />
769
+ <!-- honor end -->
770
+ </application>
771
+ ```
772
+
773
+ 如果使用 `tools:replace`,请确认 `manifest` 根节点包含 `tools` 命名空间:
774
+ ``` xml
775
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android"
776
+ xmlns:tools="http://schemas.android.com/tools">
777
+ </manifest>
778
+ ```
779
+
780
+ 集成结果判断:Gradle Sync 成功完成,无报错;确认 `mcs-services.json` 已放在应用模块根目录。
781
+
782
+ #### **5. 配置消息触达统计(可选)**
783
+
784
+ 如需统计触达或点击数据,请配置回执地址 `https://api.im.qcloud.com/v3/offline_push_report/honor`。回执地址不配置或配置错误,都会影响触达统计。
785
+
786
+ #### **6. 配置消息分类(可选)**
787
+
788
+ 发送离线推送时可通过 SDK API 设置荣耀消息分类,API 设置优先级通常高于控制台证书默认配置。调用 [`setAndroidHonorImportance(String importance)`](https://im.sdk.qcloud.com/doc/zh-cn/classcom_1_1tencent_1_1imsdk_1_1v2_1_1V2TIMOfflinePushInfo.html#a3167229118ad659378b2066821935c79) 设置荣耀消息分类,`NORMAL` 表示服务通讯类消息,`LOW` 表示资讯营销类消息:
789
+ ``` java
790
+ V2TIMOfflinePushInfo pushInfo = new V2TIMOfflinePushInfo();
791
+ pushInfo.setAndroidHonorImportance("NORMAL");
792
+ ```
793
+
794
+ 【魅族】
795
+
796
+ #### **前置**
797
+
798
+ 请先完成 魅族厂商配置,并确认:
799
+ - 已在腾讯云控制台添加魅族厂商证书;
800
+
801
+ - 已重新下载包含魅族证书的 `timpush-configs.json`,并放入应用模块 `assets` 目录;
802
+
803
+ - 使用魅族真机验证。
804
+
805
+ #### **1. 集成 TIMPush 厂商依赖**
806
+
807
+ 在应用模块 `build.gradle` 或 `build.gradle.kts` 的 `dependencies` 中追加魅族通道包,`VERSION` 与基础包保持一致:
808
+
809
+ 【Groovy DSL】
810
+ ``` groovy
811
+ implementation 'com.tencent.timpush:meizu:VERSION'
812
+ ```
813
+
814
+ 【Kotlin DSL】
815
+ ``` kotlin
816
+ implementation("com.tencent.timpush:meizu:VERSION")
817
+ ```
818
+
819
+ 集成结果判断:Gradle Sync 成功完成,无报错。
820
+
821
+ #### **2. 配置消息触达统计(可选)**
167
822
 
168
- Gradle 7.0 以下版本通常使用 Groovy DSL。如您的工程使用 Kotlin DSL,请将单引号改为双引号,`url "..."` 改为 `url = uri("...")`。
823
+ 如需统计触达或点击数据,请打开回执开关并配置回执地址 `https://api.im.qcloud.com/v3/offline_push_report/meizu`。回执地址不配置或配置错误,都会影响触达统计。
169
824
 
170
- 在项目级 `build.gradle` 的 `buildscript > repositories` 和 `allprojects > repositories` 中添加仓库。
171
- ``` groovy
172
- buildscript {
173
- repositories {
174
- google()
175
- mavenCentral()
176
- maven { url "https://mirrors.tencent.com/nexus/repository/maven-public/" }
177
- maven { url "https://developer.huawei.com/repo/" }
178
- maven { url "https://developer.hihonor.com/repo" }
179
- }
180
- dependencies {
181
- classpath 'com.google.gms:google-services:4.3.15'
182
- classpath 'com.huawei.agconnect:agcp:1.6.0.300'
183
- classpath 'com.hihonor.mcs:asplugin:2.0.1.300'
184
- }
185
- }
825
+ #### **3. 配置消息分类(可选)**
186
826
 
187
- allprojects {
188
- repositories {
189
- google()
190
- mavenCentral()
191
- maven { url "https://mirrors.tencent.com/nexus/repository/maven-public/" }
192
- maven { url "https://developer.huawei.com/repo/" }
193
- maven { url "https://developer.hihonor.com/repo" }
194
- }
195
- }
827
+ 发送离线推送时可通过 SDK API 设置魅族消息分类,API 设置优先级通常高于控制台证书默认配置。调用 [`setAndroidMeizuNotifyType(int type)`](https://im.sdk.qcloud.com/doc/zh-cn/classcom_1_1tencent_1_1imsdk_1_1v2_1_1V2TIMOfflinePushInfo.html#a7e26dd03042cad06c4e7352845079be0) 设置魅族消息分类,`0` 表示公信消息,`1` 表示私信消息:
828
+ ``` java
829
+ V2TIMOfflinePushInfo pushInfo = new V2TIMOfflinePushInfo();
830
+ pushInfo.setAndroidMeizuNotifyType(1);
196
831
  ```
197
832
 
198
- > **说明:**
199
- > - 如果旧工程已升级到 Gradle 8 / AGP 8,请不要继续使用 `com.huawei.agconnect:agcp:1.6.0.300`,建议改为 `com.huawei.agconnect:agcp:1.9.1.301` 或更高已验证版本。
200
- > - 若使用 Google FCM,`com.google.gms:google-services:4.4.2` 要求 AGP 7.3.0 及以上;如果项目的 AGP 低于 7.3.0,请改用与当前 AGP 兼容的 Google Services Gradle Plugin 版本,例如 `4.3.15`。
833
+ 【Google FCM】
201
834
 
202
- ### 配置厂商插件
835
+ #### **前置**
203
836
 
204
- 华为、荣耀和 Google FCM 需要按厂商要求集成对应 Gradle 插件。插件会在构建期读取上一步放置的厂商配置文件,并将厂商要求的资源、Manifest 信息或初始化配置合并进应用包。
837
+ 请先完成 Google FCM 厂商配置,并确认:
838
+ - 已在腾讯云控制台添加 FCM 厂商证书;
205
839
 
206
- 如果只集成某个厂商,只添加该厂商需要的插件和配置文件即可。例如未接入 FCM 时,不需要添加 `com.google.gms.google-services` 插件和 `google-services.json`。
840
+ - 已重新下载包含 FCM 证书的 `timpush-configs.json`,并放入应用模块 `assets` 目录;
207
841
 
208
- #### 配置项目级插件依赖
842
+ - 测试设备具备可用的 Google Play 服务(国内无 GMS 的设备无法验证 FCM 通道)。
209
843
 
210
- 项目级插件依赖用于让 Gradle 在构建期找到并加载华为、荣耀、Google FCM 等厂商插件。请先根据项目使用的 Gradle 版本选择对应配置。
844
+ #### **1. 添加厂商配置文件**
211
845
 
212
- 【Gradle 7.1 及以上】
846
+ 在 Firebase 控制台下载 `google-services.json`,添加到应用模块根目录(与应用模块的 `build.gradle` / `build.gradle.kts` 同级):
847
+ ``` text
848
+ app/google-services.json
849
+ ```
213
850
 
214
- Gradle 7.1 及以上项目通常会在 `settings.gradle` 或 `settings.gradle.kts` 中配置依赖仓库。但如果厂商插件通过 `buildscript > dependencies > classpath` 声明,还需要在项目级 `build.gradle` 或 `build.gradle.kts` 的 `buildscript > repositories` 中同步配置插件仓库,否则可能出现厂商插件 classpath 依赖解析失败。
851
+ 后续构建时,Google Services 插件会读取该文件并将 FCM 要求的资源、Manifest 信息合并进应用包。
215
852
 
216
- 如果项目级 `build.gradle.kts` 已通过 `plugins {}` 块声明 AGP(新建 Kotlin DSL 项目的默认方式),原有 `plugins {}` 块保留不动,不需要整体迁移到 `buildscript` 写法。由于荣耀官方示例统一使用 `buildscript > dependencies > classpath` 声明 `asplugin`,请在项目级 Gradle 文件中额外补充 `buildscript` 配置,并在 `dependencies` 中声明 `com.android.tools.build:gradle`。如果项目同时使用 Kotlin Android 插件,也请声明 `org.jetbrains.kotlin:kotlin-gradle-plugin`。
853
+ #### **2. 配置 Gradle 插件**
217
854
 
218
- 请在 Android 工程的项目级 `build.gradle` 或 `build.gradle.kts` 中添加以下配置。
855
+ Google FCM 需要通过 Google Services Gradle 插件在构建期读取 `google-services.json`。请按工程 Gradle 版本选择配置方式。FCM 无需额外的厂商 Maven 仓库,相关依赖通过 `google()` 仓库解析。
856
+
857
+ ##### **配置项目级插件依赖**
858
+
859
+ 【Gradle 7.1 及以上】
860
+
861
+ Gradle 7.1 及以上项目通常在 `settings.gradle` 或 `settings.gradle.kts` 中配置依赖仓库。由于 Google Services 插件通过 `buildscript > dependencies > classpath` 声明,还需要在项目级 `build.gradle` 或 `build.gradle.kts` 的 `buildscript > repositories` 中包含 `google()` 等仓库,否则可能出现插件 classpath 依赖解析失败。
862
+
863
+ 如果项目级 `build.gradle.kts` 已通过 `plugins {}` 块声明 AGP(新建 Kotlin DSL 项目的默认方式),原有 `plugins {}` 块保留不动,不需要整体迁移到 `buildscript` 写法,在 `dependencies` 中声明 `com.android.tools.build:gradle` 即可。如果项目同时使用 Kotlin Android 插件,也请声明 `org.jetbrains.kotlin:kotlin-gradle-plugin`。
219
864
 
220
865
  【Groovy DSL(build.gradle)】
221
866
  ``` java
@@ -225,20 +870,14 @@ buildscript {
225
870
  mavenCentral()
226
871
  gradlePluginPortal()
227
872
  maven { url "https://mirrors.tencent.com/nexus/repository/maven-public/" }
228
- maven { url "https://developer.huawei.com/repo/" }
229
- maven { url "https://developer.hihonor.com/repo" }
230
873
  }
231
874
  dependencies {
232
875
  // 请与项目当前 Android Gradle Plugin 版本保持一致。
233
876
  classpath 'com.android.tools.build:gradle:<AGP_VERSION>'
234
877
  // 如果项目使用 Kotlin Android 插件,请与项目当前 Kotlin Gradle Plugin 版本保持一致。
235
878
  classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:<KOTLIN_VERSION>'
236
- // Google FCM。
879
+ // Google FCM。4.4.2 要求 AGP 7.3.0 及以上,更低的 AGP 请改用 4.3.15。
237
880
  classpath 'com.google.gms:google-services:4.4.2'
238
- // 华为 AGConnect。Gradle 8 / AGP 8 项目不要继续使用 1.6.0.300。
239
- classpath 'com.huawei.agconnect:agcp:1.9.1.301'
240
- // 荣耀 Push。
241
- classpath 'com.hihonor.mcs:asplugin:2.0.1.300'
242
881
  }
243
882
  }
244
883
  ```
@@ -251,20 +890,14 @@ buildscript {
251
890
  mavenCentral()
252
891
  gradlePluginPortal()
253
892
  maven { url = uri("https://mirrors.tencent.com/nexus/repository/maven-public/") }
254
- maven { url = uri("https://developer.huawei.com/repo/") }
255
- maven { url = uri("https://developer.hihonor.com/repo") }
256
893
  }
257
894
  dependencies {
258
895
  // 请与项目当前 Android Gradle Plugin 版本保持一致。
259
896
  classpath("com.android.tools.build:gradle:<AGP_VERSION>")
260
897
  // 如果项目使用 Kotlin Android 插件,请与项目当前 Kotlin Gradle Plugin 版本保持一致。
261
898
  classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:<KOTLIN_VERSION>")
262
- // Google FCM。
899
+ // Google FCM。4.4.2 要求 AGP 7.3.0 及以上,更低的 AGP 请改用 4.3.15。
263
900
  classpath("com.google.gms:google-services:4.4.2")
264
- // 华为 AGConnect。Gradle 8 / AGP 8 项目不要继续使用 1.6.0.300。
265
- classpath("com.huawei.agconnect:agcp:1.9.1.301")
266
- // 荣耀 Push。
267
- classpath("com.hihonor.mcs:asplugin:2.0.1.300")
268
901
  }
269
902
  }
270
903
  ```
@@ -272,39 +905,30 @@ buildscript {
272
905
 
273
906
  2. 请将`<KOTLIN_VERSION>` 替换为项目当前使用的 Kotlin Gradle Plugin 版本;如果项目未使用 Kotlin Android 插件,可删除该行。
274
907
 
275
- > **注意:**
276
- > 对于 Gradle 8 / AGP 8 项目,请不要继续使用 `com.huawei.agconnect:agcp:1.6.0.300`。AGP 8.0 已移除 Transform API,旧版 AGC 插件存在兼容风险,建议使用 `com.huawei.agconnect:agcp:1.9.1.301` 或更高已验证版本。若使用 Google FCM,`com.google.gms:google-services:4.4.2` 要求 AGP 7.3.0 及以上。
908
+ > **说明:**
909
+ > `com.google.gms:google-services:4.4.2` 要求 AGP 7.3.0 及以上;如果项目的 AGP 低于 7.3.0,请改用与当前 AGP 兼容的 Google Services Gradle Plugin 版本,例如 `4.3.15`。
277
910
  >
278
911
 
279
912
  【Gradle 7.0 及以下】
280
913
 
281
- 如果您已在上一节「配置 Gradle 仓库」中按照 Gradle 7.0 或 Gradle 7.0 以下示例配置了 `buildscript > repositories` 和 `buildscript > dependencies`,可以跳过本节的项目级插件依赖配置。
282
-
283
- 如果尚未配置,请回到上一节,根据当前 Gradle 版本补充 `buildscript` 中的仓库和插件 classpath。
914
+ 在项目级 `build.gradle` 的 `buildscript > dependencies` 中追加:
915
+ ``` groovy
916
+ classpath 'com.google.gms:google-services:4.3.15'
917
+ ```
284
918
 
285
- #### 在应用模块启用厂商插件
919
+ ##### **在应用模块启用插件**
286
920
 
287
- 完成项目级插件依赖配置后,还需要在应用模块的 `build.gradle` 或 `build.gradle.kts` 中启用厂商插件。应用模块通常为 `app`。
921
+ 完成项目级插件依赖配置后,还需要在应用模块的 `build.gradle` 或 `build.gradle.kts` 中启用 Google Services 插件。应用模块通常为 `app`。
288
922
 
289
- 如果应用模块中已经存在 `plugins` 块,请在现有 `plugins` 块中追加厂商插件,不要重复添加已有的 `com.android.application` 插件。
923
+ 如果应用模块中已经存在 `plugins` 块,请在现有 `plugins` 块中追加,不要重复添加已有的 `com.android.application` 插件。
290
924
 
291
925
  【Groovy DSL(app/build.gradle)】
292
926
  ``` groovy
293
927
  plugins {
294
928
  // Google FCM。
295
929
  id 'com.google.gms.google-services'
296
- // 华为 AGConnect。
297
- id 'com.huawei.agconnect'
298
- // 荣耀 Push。
299
- id 'com.hihonor.mcs.asplugin'
300
930
  }
301
- ```
302
-
303
- 如果您的应用级 `build.gradle` 使用 `apply plugin` 写法,也可以写成:
304
- ``` groovy
305
- apply plugin: 'com.google.gms.google-services'
306
- apply plugin: 'com.huawei.agconnect'
307
- apply plugin: 'com.hihonor.mcs.asplugin'
931
+ // 或:apply plugin: 'com.google.gms.google-services'
308
932
  ```
309
933
 
310
934
  【Kotlin DSL(app/build.gradle.kts)】
@@ -312,162 +936,52 @@ apply plugin: 'com.hihonor.mcs.asplugin'
312
936
  plugins {
313
937
  // Google FCM。
314
938
  id("com.google.gms.google-services")
315
- // 华为 AGConnect。
316
- id("com.huawei.agconnect")
317
- // 荣耀 Push。
318
- id("com.hihonor.mcs.asplugin")
319
939
  }
320
- ```
321
-
322
- 如果您的应用级 `build.gradle.kts` 使用 `apply` 写法,也可以写成:
323
- ``` kotlin
324
- apply(plugin = "com.google.gms.google-services")
325
- apply(plugin = "com.huawei.agconnect")
326
- apply(plugin = "com.hihonor.mcs.asplugin")
940
+ // 或:apply(plugin = "com.google.gms.google-services")
327
941
  ```
328
942
 
329
943
  完成配置后,请在 Android Studio 中单击 **Sync Now**,或选择 **File > Sync Project with Gradle Files** 触发 Gradle 同步。同步成功后,再执行构建验证。
330
944
 
331
- ### 集成 TIMPush 依赖
332
-
333
- 在应用模块的 `build.gradle` 或 `build.gradle.kts` 中添加 TIMPush 依赖。基础包提供 TIMPush 注册、监听和通用能力;厂商包用于对接对应厂商离线推送通道。只集成基础包而不集成目标厂商包时,设备可能无法通过该厂商通道收到离线推送。
334
-
335
- 下方示例中的 `VERSION` 均指 TIMPush SDK 的版本号(如 `8.9.7537`),不是 Android 系统版本或厂商 SDK 版本。获取最新版本号请查看更新日志。
336
-
337
- 【Groovy DSL】
338
- ``` groovy
339
- dependencies {
340
- implementation 'com.tencent.timpush:timpush:VERSION'
341
- implementation 'com.tencent.liteav.tuikit:tuicore:VERSION'
342
-
343
- implementation 'com.tencent.timpush:huawei:VERSION'
344
- implementation 'com.tencent.timpush:xiaomi:VERSION'
345
- implementation 'com.tencent.timpush:oppo:VERSION'
346
- implementation 'com.tencent.timpush:vivo:VERSION'
347
- implementation 'com.tencent.timpush:honor:VERSION'
348
- implementation 'com.tencent.timpush:meizu:VERSION'
349
- implementation 'com.tencent.timpush:fcm:VERSION'
350
- }
351
- ```
352
-
353
- 【Kotlin DSL】
354
- ``` kotlin
355
- dependencies {
356
- implementation("com.tencent.timpush:timpush:VERSION")
357
- implementation("com.tencent.liteav.tuikit:tuicore:VERSION")
358
-
359
- implementation("com.tencent.timpush:huawei:VERSION")
360
- implementation("com.tencent.timpush:xiaomi:VERSION")
361
- implementation("com.tencent.timpush:oppo:VERSION")
362
- implementation("com.tencent.timpush:vivo:VERSION")
363
- implementation("com.tencent.timpush:honor:VERSION")
364
- implementation("com.tencent.timpush:meizu:VERSION")
365
- implementation("com.tencent.timpush:fcm:VERSION")
366
- }
367
- ```
368
-
369
- 请按实际目标厂商添加依赖。
370
-
371
- |**目标厂商**|**依赖**|
372
- |---------|---------|
373
- |华为|`com.tencent.timpush:huawei:VERSION`|
374
- |小米|`com.tencent.timpush:xiaomi:VERSION`|
375
- |OPPO|`com.tencent.timpush:oppo:VERSION`|
376
- |vivo|`com.tencent.timpush:vivo:VERSION`|
377
- |荣耀|`com.tencent.timpush:honor:VERSION`|
378
- |魅族|`com.tencent.timpush:meizu:VERSION`|
379
- |Google FCM|`com.tencent.timpush:fcm:VERSION`|
380
-
381
- 添加依赖后,请在 Android Studio 中单击 **Sync Now**,或选择 **File > Sync Project with Gradle Files** 触发 Gradle 同步。
382
-
383
- > **注意:**
384
- > `TIMPush`、`TUICore` 和各厂商通道包建议使用相同 `VERSION`,避免依赖冲突。项目已接入 IM SDK 或 TUIKit 时,也需要确认相关 SDK 版本兼容。
385
- >
386
-
387
- **验证**:Gradle Sync 成功完成,无报错。如果报依赖找不到,请检查 `VERSION` 是否正确、厂商 Maven 仓库是否缺失、插件 classpath 是否配置到正确文件。
388
-
389
- ### 配置 `manifestPlaceholders` 和 `AndroidManifest.xml`
945
+ #### **3. 集成 TIMPush 厂商依赖**
390
946
 
391
- vivo 和荣耀需要将厂商分配的 AppID / AppKey 配置到清单文件中。厂商 SDK 会从 Manifest 中读取这些值来识别当前应用;缺失或填写错误可能导致编译失败或厂商注册失败。您可以选择 `manifestPlaceholders` 或直接在 `AndroidManifest.xml` 中配置 `meta-data`。
392
-
393
- 【方法 1:配置 manifestPlaceholders】
394
-
395
- 在 `manifestPlaceholders` 里添加条目:
947
+ 在应用模块 `build.gradle` 或 `build.gradle.kts` 的 `dependencies` 中追加 FCM 通道包,`VERSION` 与基础包保持一致:
396
948
 
397
949
  【Groovy DSL】
398
950
  ``` groovy
399
- android {
400
- defaultConfig {
401
- manifestPlaceholders = [
402
- "VIVO_APPKEY": "您应用分配的证书 APPKEY",
403
- "VIVO_APPID" : "您应用分配的证书 APPID",
404
- "HONOR_APPID": "您应用分配的证书 APPID"
405
- ]
406
- }
407
- }
951
+ implementation 'com.tencent.timpush:fcm:VERSION'
408
952
  ```
409
953
 
410
954
  【Kotlin DSL】
411
955
  ``` kotlin
412
- android {
413
- defaultConfig {
414
- manifestPlaceholders["VIVO_APPKEY"] = "您应用分配的证书 APPKEY"
415
- manifestPlaceholders["VIVO_APPID"] = "您应用分配的证书 APPID"
416
- manifestPlaceholders["HONOR_APPID"] = "您应用分配的证书 APPID"
417
- }
418
- }
956
+ implementation("com.tencent.timpush:fcm:VERSION")
419
957
  ```
420
958
 
421
- 【方法 2:配置 AndroidManifest.xml】
422
-
423
- 在 `AndroidManifest.xml` 中配置 `meta-data`:
424
- ``` xml
425
- <application>
426
- <!-- vivo begin -->
427
- <meta-data
428
- tools:replace="android:value"
429
- android:name="com.vivo.push.api_key"
430
- android:value="您应用分配的证书 APPKEY" />
431
-
432
- <meta-data
433
- tools:replace="android:value"
434
- android:name="com.vivo.push.app_id"
435
- android:value="您应用分配的证书 APPID" />
436
- <!-- vivo end -->
959
+ 集成结果判断:Gradle Sync 成功完成,无报错;确认 `google-services.json` 已放在应用模块根目录。
437
960
 
438
- <!-- honor begin -->
439
- <meta-data
440
- tools:replace="android:value"
441
- android:name="com.hihonor.push.app_id"
442
- android:value="您应用分配的证书 APPID" />
443
- <!-- honor end -->
444
- </application>
445
- ```
961
+ #### **4. 配置消息触达统计(可选)**
446
962
 
447
- 如果使用 `tools:replace`,请确认 `manifest` 根节点包含 `tools` 命名空间:
448
- ``` xml
449
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
450
- xmlns:tools="http://schemas.android.com/tools">
451
- </manifest>
452
- ```
963
+ FCM 暂不支持推送统计功能。
453
964
 
454
- ### 设置混淆规则
965
+ #### **5. 配置消息分类(可选)**
455
966
 
456
- 如果应用开启了代码混淆,请在 `proguard-rules.pro` 中加入 TIMPush 相关类不混淆规则。该配置用于避免 Release 包中 TIMPush 相关类、回调或厂商适配逻辑被混淆后无法正常调用:
457
- ``` proguard
458
- -keep class com.tencent.qcloud.** { *; }
459
- -keep class com.tencent.timpush.** { *; }
967
+ Android 8.0 及以上可通过通知渠道 ID 控制 FCM 通知展示策略。渠道创建与配置见 Google FCM 厂商配置。发送离线推送时可通过 SDK API 设置,API 设置优先级通常高于控制台证书默认配置。调用 [`setAndroidFCMChannelID(String channelID)`](https://im.sdk.qcloud.com/doc/zh-cn/classcom_1_1tencent_1_1imsdk_1_1v2_1_1V2TIMOfflinePushInfo.html#a1e63514ec664a5f7bc8c6a5b09f0689e) 设置 FCM 通道通知渠道 ID:
968
+ ``` java
969
+ V2TIMOfflinePushInfo pushInfo = new V2TIMOfflinePushInfo();
970
+ pushInfo.setAndroidFCMChannelID("your_fcm_channel_id");
460
971
  ```
461
972
 
462
- 完成后,请重新构建 Release 包,并在真机上验证注册和收消息链路。
463
-
464
- **验证**:App 可在目标厂商真机上正常安装和启动,无崩溃。如果启动崩溃,请检查 `Application` 声明、配置文件位置和 Manifest 合并错误。同时确认测试真机厂商与目标厂商通道一致(如不要在华为设备上验证荣耀通道)。
973
+ > **警告:**
974
+ > 请关注各厂商通道消息分类规则:
975
+ >
976
+ > 1. 厂商离线通道的消息分类机制会影响推送及时性、单设备每日接收数量、夜间展示、声音、横幅和厂商通道权限。
977
+ > 2. 只有 IM 聊天、订单、交易、账号变更等用户预期强、需要及时触达的消息,才建议申请或使用高优先级分类。营销、广告、活动、资讯类消息不应滥用高优分类,**否则可能被厂商降级、限频或冻结权限。**
978
+ > 3. 发送离线推送时,API 设置优先级高于腾讯云控制台证书默认配置。
465
979
 
466
- ## 注册推送
980
+ ### 步骤3:注册推送服务
467
981
 
468
- ### registerPush
982
+ #### 调用 registerPush
469
983
 
470
- registerPush 用于向 TIMPush 注册当前设备的推送 token。推送 token 是厂商通道返回的设备凭证,通常由 SDK 自动处理。注册成功后,TIMPush 会为当前设备建立一个推送目标标识 `registrationID`;服务端、控制台接入测试和排查工具可以使用该标识向这台设备下发离线推送。若 App 同时接入 IM 并完成登录,也可以使用 `userID` 向该用户已建立推送关系的设备下发离线推送。
984
+ registerPush 用于向 TIMPush 注册当前设备的推送 token。注册成功后,TIMPush 会为当前设备建立一个推送目标标识 `registrationID`;服务端、控制台接入测试和排查工具可以使用该标识向这台设备下发离线推送。若 App 同时接入 IM 并完成登录,也可以使用 `userID` 向该用户已建立推送关系的设备下发离线推送。
471
985
 
472
986
  `appKey` 的取值会影响注册方式和可用的推送标识:
473
987
  - `appKey = Push Key`:注册 TIMPush 独立推送能力。Push Key 客户端密钥。
@@ -670,7 +1184,7 @@ fun loginIMAndRegisterPush(context: Context) {
670
1184
 
671
1185
  3. 如触发 `onError`,可按 错误码 查询 `code` 含义。
672
1186
 
673
- ### 自定义 registrationID(可选)
1187
+ #### 自定义 registrationID(可选)
674
1188
 
675
1189
  如需自定义推送标识(如使用业务侧用户 ID),可在 `registerPush` 前调用 setRegistrationID。
676
1190
 
@@ -678,30 +1192,14 @@ fun loginIMAndRegisterPush(context: Context) {
678
1192
  > 混用场景下,自定义 `registrationID` 必须与 IM 登录使用的 `userID` 完全一致,否则会产生账号互踢导致推送丢失。
679
1193
  >
680
1194
 
681
- ## 配置消息触达统计(可选)
682
-
683
- 如果业务需要统计消息触达或点击数据,请在厂商配置阶段完成回执和点击统计相关配置。该配置用于让厂商通道把触达或点击结果回传给腾讯云侧,便于在控制台查看推送效果。不同厂商支持情况不同:
684
-
685
- |**厂商**|**配置说明**|
686
- |---------|---------|
687
- |华为|如需统计触达或点击数据,请配置回执地址 `https://api.im.qcloud.com/v3/offline_push_report/huawei`。华为推送证书 ID `<= 11344` 时使用华为推送 v2 接口,不支持触达和点击回执;如需支持统计,请重新生成并更新证书 ID。|
688
- |荣耀|如需统计触达或点击数据,请配置回执地址 `https://api.im.qcloud.com/v3/offline_push_report/honor`。|
689
- |vivo|如需统计触达或点击数据,请配置回执地址 `https://api.im.qcloud.com/v3/offline_push_report/vivo`,并按控制台要求配置回执 ID。|
690
- |魅族|如需统计触达或点击数据,请打开回执开关并配置回执地址 `https://api.im.qcloud.com/v3/offline_push_report/meizu`。|
691
- |FCM|当前腾讯云快速接入文档说明 FCM 暂不支持推送统计功能。|
692
-
693
- > **注意:**
694
- > 回执地址不配置或配置错误,都会影响触达统计。
695
- >
696
-
697
- ## 测试推送
1195
+ ### 步骤4:测试推送链路
698
1196
 
699
1197
  完成上述集成步骤后,需要通过发送测试消息验证链路是否打通。发送消息前请确认:
700
1198
  1. Android 13 及以上已允许通知权限;
701
1199
 
702
1200
  2. Android 8.0 及以上目标通知渠道已开启(包括横幅、锁屏、声音开关);
703
1201
 
704
- 3. App 已置于后台。
1202
+ 3. **App 已置于后台**。
705
1203
 
706
1204
  发送测试消息可以采用下面几种方法:
707
1205
 
@@ -713,11 +1211,11 @@ fun loginIMAndRegisterPush(context: Context) {
713
1211
 
714
1212
  【REST API 发送】
715
1213
 
716
- 如果需要通过服务端发送推送,可参考 [全员/标签推送](https://cloud.tencent.com/document/product/269/100634)。
1214
+ 如果需要通过服务端发送推送,可参考 全员/标签推送。
717
1215
 
718
1216
  【SDK API 发送】
719
1217
 
720
- 如果您的项目已接入 IM SDK,可在调用 [sendMessage](https://cloud.tencent.com/document/product/269/75315) 发送消息时,通过 `V2TIMOfflinePushInfo` 设置离线推送参数。示例:
1218
+ 如果您的项目已接入 IM SDK,可在调用 sendMessage 发送消息时,通过 `V2TIMOfflinePushInfo` 设置离线推送参数。示例:
721
1219
  ``` java
722
1220
  V2TIMOfflinePushInfo pushInfo = new V2TIMOfflinePushInfo();
723
1221
  pushInfo.setTitle("推送标题");
@@ -751,19 +1249,17 @@ V2TIMManager.getMessageManager().sendMessage(
751
1249
 
752
1250
  `sendMessage` 属于 IMSDK 消息发送能力。仅集成 TIMPush 的用户不需要为了验证离线推送而额外接入完整 Chat 初始化、登录和消息发送流程。
753
1251
 
754
- **验证**:App 置于后台后发送测试消息,设备能收到离线推送通知。如果手机通知栏开启权限,通知栏会弹出离线推送消息弹框。如果收不到。
755
-
756
- ## 处理通知点击跳转
1252
+ ### 步骤5:处理通知点击跳转
757
1253
 
758
1254
  通知点击跳转需要三步配合完成:控制台配置点击动作、发送推送时携带跳转参数、客户端注册监听并解析参数。三步缺一则跳转不生效。
759
1255
 
760
- ### 配置控制台点击动作
1256
+ #### **配置控制台点击动作**
761
1257
 
762
1258
  在腾讯云控制台配置推送证书的「点击后续动作」,勾选「打开应用内指定页面」:
763
1259
 
764
- 操作路径:腾讯云控制台 > **推送服务 Push** > **基础配置** > **对应厂商证书** > **编辑** > 点击后续动作,选择**打开应用内指定界面**,并保持默认填充值不修改。
1260
+ 操作路径:腾讯云控制台 > **推送服务 Push** > **基础配置** > **对应厂商证书** > **编辑** > 点击后续动作,选择**打开应用内指定界面**。
765
1261
 
766
- ### 发送推送时携带 `ext`
1262
+ #### **发送推送时携带** `ext`
767
1263
 
768
1264
  发送离线推送时,通过 `ext` 字段携带跳转所需的业务信息(如目标页面、会话 ID 等)。`ext` 是一个字符串,结构由业务自定义,推荐使用 JSON 格式便于客户端解析。下文示例统一使用如下结构演示:
769
1265
  ``` json
@@ -870,7 +1366,7 @@ V2TIMManager.getMessageManager().sendMessage(
870
1366
  )
871
1367
  ```
872
1368
 
873
- ### 客户端注册监听并解析 `ext`
1369
+ #### **客户端注册监听并解析** `ext`
874
1370
 
875
1371
  请在 `Application.onCreate()` 中调用 addPushListener 注册 `TIMPushListener`,并在 onNotificationClicked 中解析 `ext` 后跳转到业务页面。
876
1372
 
@@ -966,155 +1462,11 @@ class App : Application() {
966
1462
  }
967
1463
  ```
968
1464
 
969
- **验证**:点击通知后 `onNotificationClicked` 被调用,且 `ext` 内容与发送时设置的一致。如果回调未触发,请检查:控制台点击动作是否选择了「打开应用内指定界面」并保持默认填充值、监听器是否在 `Application.onCreate()` 中注册、发送消息时是否设置了 `ext`。
1465
+ **验证**:点击通知后 `onNotificationClicked` 被调用,且 `ext` 内容与发送时设置的一致。
970
1466
 
971
1467
  > **说明:**
972
1468
  > 旧版本工程中可能仍使用 `TUICore.registerEvent` 回调或 `LocalBroadcastManager` 广播处理点击通知。这两种方式在当前版本仍可工作,但新接入用户建议优先使用 `addPushListener`。如需从旧方案迁移,删除旧的事件注册或广播注册代码,改为在 `Application.onCreate()` 中调用 `addPushListener` 即可,回调中获取到的 `ext` 内容与旧方案一致。
973
1469
  >
974
1470
 
975
- ## 配置消息分类(可选)
976
-
977
- 厂商离线通道通常有消息分类机制。消息分类会影响推送及时性、单设备每日接收数量、夜间展示、声音、横幅和厂商通道权限。
978
-
979
- > **注意:**
980
- > 只有 IM 聊天、订单、交易、账号变更等用户预期强、需要及时触达的消息,才建议申请或使用高优先级分类。营销、广告、活动、资讯类消息不应滥用高优分类,否则可能被厂商降级、限频或冻结权限。
981
- >
982
-
983
- 发送离线推送时,可以通过 `V2TIMOfflinePushInfo` 设置厂商消息分类。API 设置优先级通常高于腾讯云控制台证书默认配置。
984
-
985
- |**厂商**|**API**|**说明**|
986
- |---------|---------|---------|
987
- |小米|[`setAndroidXiaoMiChannelID(String channelID)`](https://im.sdk.qcloud.com/doc/zh-cn/classcom_1_1tencent_1_1imsdk_1_1v2_1_1V2TIMOfflinePushInfo.html#ac769aec48cdbc9a57416c5a79504617a)|设置小米渠道 `channelID`。|
988
- |华为|[`setAndroidHuaWeiCategory(String category)`](https://im.sdk.qcloud.com/doc/zh-cn/classcom_1_1tencent_1_1imsdk_1_1v2_1_1V2TIMOfflinePushInfo.html#ad9dea3cb382c0c1a3c1a63738697fc1f)|设置华为推送消息分类。|
989
- |OPPO(新规则)|[`setAndroidOPPOCategory(String category)`](https://im.sdk.qcloud.com/doc/zh-cn/classcom_1_1tencent_1_1imsdk_1_1v2_1_1V2TIMOfflinePushInfo.html#a6a62542254c53626b81ce24380b0a2fb)|设置 OPPO 新消息分类,例如 IM 消息使用 `IM`。|
990
- |OPPO(新规则)|[`setAndroidOPPONotifyLevel(int level)`](https://im.sdk.qcloud.com/doc/zh-cn/classcom_1_1tencent_1_1imsdk_1_1v2_1_1V2TIMOfflinePushInfo.html#a1fd2e7d168b5412fc263274842855c57)|设置 OPPO 通知栏消息提醒等级。使用前需要先设置 `category`;如需 `16`,需先向 OPPO 申请强提醒能力。|
991
- |OPPO(新规则)|[`setVendorParams(String vendorParams)`](https://im.sdk.qcloud.com/doc/zh-cn/classcom_1_1tencent_1_1imsdk_1_1v2_1_1V2TIMOfflinePushInfo.html#aedaa6ba7f49f3abfc04a8efaaf45e0c7)|携带 OPPO 私信模板 ID 和模板参数,字段说明请参见 [离线推送消息属性设置](https://cloud.tencent.com/document/product/269/121188)。|
992
- |OPPO(旧规则)|[`setAndroidOPPOChannelID(String channelID)`](https://im.sdk.qcloud.com/doc/zh-cn/classcom_1_1tencent_1_1imsdk_1_1v2_1_1V2TIMOfflinePushInfo.html#a32d340e95395bb64cc3e8f62321aafe1)|仅适用于此前已开通 OPPO 私信通道权限的存量应用,用于设置已创建并登记的私信通道 ID。|
993
- |vivo|[`setAndroidVIVOCategory(String category)`](https://im.sdk.qcloud.com/doc/zh-cn/classcom_1_1tencent_1_1imsdk_1_1v2_1_1V2TIMOfflinePushInfo.html#ae7341caa3c58aec949cf186cb25af591)|设置 vivo 推送消息类别。|
994
- |荣耀|[`setAndroidHonorImportance(String importance)`](https://im.sdk.qcloud.com/doc/zh-cn/classcom_1_1tencent_1_1imsdk_1_1v2_1_1V2TIMOfflinePushInfo.html#a3167229118ad659378b2066821935c79)|设置荣耀消息分类,`NORMAL` 表示服务通讯类消息,`LOW` 表示资讯营销类消息。|
995
- |魅族|[`setAndroidMeizuNotifyType(int type)`](https://im.sdk.qcloud.com/doc/zh-cn/classcom_1_1tencent_1_1imsdk_1_1v2_1_1V2TIMOfflinePushInfo.html#a7e26dd03042cad06c4e7352845079be0)|设置魅族消息分类,`0` 表示公信消息,`1` 表示私信消息。|
996
- |FCM|[`setAndroidFCMChannelID(String channelID)`](https://im.sdk.qcloud.com/doc/zh-cn/classcom_1_1tencent_1_1imsdk_1_1v2_1_1V2TIMOfflinePushInfo.html#a1e63514ec664a5f7bc8c6a5b09f0689e)|设置 FCM 通道 Android 8.0 及以上通知渠道 ID。|
997
-
998
- 通用示例:
999
- ``` java
1000
- V2TIMOfflinePushInfo pushInfo = new V2TIMOfflinePushInfo();
1001
-
1002
- pushInfo.setAndroidXiaoMiChannelID("your_xiaomi_channel_id");
1003
- pushInfo.setAndroidHuaWeiCategory("IM");
1004
- pushInfo.setAndroidVIVOCategory("IM");
1005
- pushInfo.setAndroidHonorImportance("NORMAL");
1006
- pushInfo.setAndroidMeizuNotifyType(1);
1007
- pushInfo.setAndroidFCMChannelID("your_fcm_channel_id");
1008
- ```
1009
-
1010
- ### OPPO 新规则配置
1011
-
1012
- OPPO 新接入应用建议使用新消息分类规则。IM 聊天、音视频通话等需要及时触达的消息,通常使用 `category=IM`,并按 OPPO 要求申请通讯与服务不限量权益或私信模板。
1013
- ``` java
1014
- V2TIMOfflinePushInfo pushInfo = new V2TIMOfflinePushInfo();
1015
-
1016
- // New OPPO message classification rule. Use IM for chat and call messages.
1017
- pushInfo.setAndroidOPPOCategory("IM");
1018
-
1019
- // Optional. 1 = notification bar, 2 = notification bar + lock screen + sound + vibration.
1020
- // Use 16 only after OPPO strong reminder capability is approved.
1021
- pushInfo.setAndroidOPPONotifyLevel(2);
1022
- ```
1023
-
1024
- 如需使用 OPPO 私信模板,可通过 [`V2TIMOfflinePushInfo.setVendorParams(String vendorParams)`](https://im.sdk.qcloud.com/doc/zh-cn/classcom_1_1tencent_1_1imsdk_1_1v2_1_1V2TIMOfflinePushInfo.html#aedaa6ba7f49f3abfc04a8efaaf45e0c7) 携带厂商扩展参数。根据腾讯云[离线推送消息属性设置](https://cloud.tencent.com/document/product/269/121188)文档,`vendorParams` 是 JSON 字符串,且 `oppoTitleParam`、`oppoContentParam` 等字段本身也需要序列化为 JSON 字符串。
1025
- ``` java
1026
- Map<String, Object> vendorParams = new HashMap<>();
1027
- vendorParams.put("oppoTemplateId", "OPPO 私信模板 ID");
1028
-
1029
- Map<String, Object> titleParams = new HashMap<>();
1030
- titleParams.put("title", "推送标题");
1031
- vendorParams.put("oppoTitleParam", new Gson().toJson(titleParams));
1032
-
1033
- Map<String, Object> contentParams = new HashMap<>();
1034
- contentParams.put("desc", "推送内容");
1035
- vendorParams.put("oppoContentParam", new Gson().toJson(contentParams));
1036
-
1037
- pushInfo.setVendorParams(new Gson().toJson(vendorParams));
1038
- ```
1039
-
1040
- `vendorParams` 扩展参数能力要求 IMSDK 8.7 及以上版本。`oppoTemplateId` 必须是 OPPO 私信申请得到的模板 ID,不支持开发者自拟。`oppoTitleParam` 和 `oppoContentParam` 中的 key 需要与 OPPO 模板中的占位符一致。
1041
-
1042
- ### OPPO 旧规则配置
1043
-
1044
- 旧规则仅适用于此前已开通 OPPO 私信通道权限的存量应用。如果应用仍按旧规则使用私信通道,请确保客户端创建的通道 ID 已在 OPPO 推送运营后台登记,并与发送离线推送时设置的 `channelID` 保持一致。
1045
- ``` java
1046
- V2TIMOfflinePushInfo pushInfo = new V2TIMOfflinePushInfo();
1047
-
1048
- // Old OPPO private channel rule for existing apps only.
1049
- pushInfo.setAndroidOPPOChannelID("your_oppo_private_channel_id");
1050
- ```
1051
-
1052
- 新接入应用不要把 [`setAndroidOPPOChannelID`](https://im.sdk.qcloud.com/doc/zh-cn/classcom_1_1tencent_1_1imsdk_1_1v2_1_1V2TIMOfflinePushInfo.html#a32d340e95395bb64cc3e8f62321aafe1) 当作 OPPO 新消息分类的必配项。新规则优先使用 [`setAndroidOPPOCategory`](https://im.sdk.qcloud.com/doc/zh-cn/classcom_1_1tencent_1_1imsdk_1_1v2_1_1V2TIMOfflinePushInfo.html#a6a62542254c53626b81ce24380b0a2fb),并按需配置 [`setVendorParams`](https://im.sdk.qcloud.com/doc/zh-cn/classcom_1_1tencent_1_1imsdk_1_1v2_1_1V2TIMOfflinePushInfo.html#aedaa6ba7f49f3abfc04a8efaaf45e0c7) 和 [`setAndroidOPPONotifyLevel`](https://im.sdk.qcloud.com/doc/zh-cn/classcom_1_1tencent_1_1imsdk_1_1v2_1_1V2TIMOfflinePushInfo.html#a1fd2e7d168b5412fc263274842855c57)。
1053
-
1054
- ## 收不到推送排障流程
1055
-
1056
- 如果发送测试消息后设备没有收到推送,请按以下流程逐步排查。每一步确认通过后再进入下一步,可以快速定位问题所在环节。
1057
-
1058
- #### 步骤1:确认 registerPush 是否成功
1059
-
1060
- 检查 `registerPush` 回调结果:
1061
- - `onSuccess` **触发**:注册成功,进入第二步。
1062
-
1063
- - `onError` **触发**:注册失败。查看错误日志中的三层错误码:
1064
-
1065
- - TIMPush 错误码(如 `800006`):在 错误码 中查询。
1066
-
1067
- - 厂商原始异常(如 `6003: certificate fingerprint error`):优先根据此信息排查厂商侧配置。
1068
-
1069
- - 常见原因:`timpush-configs.json` 缺失或位置错误、厂商证书未添加、包名或 SHA256 指纹不匹配、厂商配置文件未放置。
1070
-
1071
- #### 步骤2:确认控制台能查到设备
1072
-
1073
- 在控制台 [排查工具](https://cloud.tencent.com/document/product/269/100629) 中输入 `registrationID` 或 `userID`:
1074
- - **能查到设备且状态正常**:进入第三步。
1075
-
1076
- - **查不到设备**:`registerPush` 可能实际未成功,或使用了错误的标识。重新确认 `registrationID` / `userID` 值是否正确。
1077
-
1078
- #### 步骤3:确认 App 状态
1079
-
1080
- 离线推送只在 App 处于后台或已杀进程时触发:
1081
- - **App 在前台**:将 App 切到后台或杀掉进程,重新发送测试消息。
1082
-
1083
- - **App 已在后台**:进入第四步。
1084
-
1085
- #### 步骤4:确认通知权限和通知渠道
1086
- - **Android 13 及以上**:确认 App 已获得通知权限(系统设置 > 应用 > 通知 > 允许通知)。
1087
-
1088
- - **Android 8.0 及以上**:确认目标通知渠道的横幅、锁屏、声音开关已打开(系统设置 > 应用 > 通知 > 通知类别)。
1089
-
1090
- - 通知总开关打开不代表所有 channel 都已开启;需要进入具体通知类别检查。
1091
-
1092
- #### 步骤5:确认厂商通道配置
1093
- - 测试真机厂商是否与目标厂商通道一致(如不要在华为设备上测试荣耀配置)。
1094
-
1095
- - 厂商平台应用包名是否与 Android 工程 `applicationId` 完全一致。
1096
-
1097
- - 厂商证书是否已在腾讯云控制台添加且未过期。
1098
-
1099
- - 华为/荣耀:测试包签名(debug 或 release)的 SHA-256 必须已在厂商控制台「项目设置 > 常规 > SHA 证书指纹」中添加,指纹不一致会报 `6003: certificate fingerprint error`。
1100
-
1101
- #### 步骤6:确认消息分类和厂商限制
1102
- - 是否超出厂商单日推送限额(例如 vivo 运营消息每日限制、小米公信消息限额)。
1103
-
1104
- - 是否在夜间发送(部分厂商运营消息夜间不下发)。
1105
-
1106
- - 是否未申请消息分类导致走默认策略被限频。
1107
-
1108
- - 推送服务是否到期(试用到期后自动停止服务)。
1109
-
1110
- #### 步骤7:确认通知展示问题
1111
-
1112
- 如果收到了推送(有声音或状态栏图标)但没有横幅或锁屏展示:
1113
- - 检查系统通知类别中的「横幅通知」和「锁屏通知」开关。
1114
-
1115
- - 确认通知渠道不是"静默通知"模式。
1116
-
1117
- - 部分厂商定制系统可能额外限制通知展示方式。
1118
-
1119
- #### 联系方式
1471
+ ## 接入排查
1120
1472