Install
openclaw skills install harmonyos-mobpush-integrationInteractive guide for integrating MobTech MobPush into HarmonyOS NEXT projects with 6-step workflow. Use when user says "我要在鸿蒙app中增加推送能力", "MobPush集成", "鸿蒙推送功能", "配置推送通知", or asks about MobPush setup, ohpm configuration, Huawei push channel, push message handling, alias/tags management, or privacy compliance. Supports step-by-step interactive integration with user confirmation at each step.
openclaw skills install harmonyos-mobpush-integration当用户提到以下任一主题时,使用本 skill:
当用户表达集成 MobPush 的意图时,执行以下 6 步交互式流程。每步操作前都需要展示内容给用户确认,获得明确同意后再执行。
主动询问用户:
我来帮你集成 MobPush 推送功能到鸿蒙项目。
请提供需要集成的鸿蒙项目根路径,例如:
/Users/xxx/your-harmonyos-project
请确保项目是有效的鸿蒙项目(包含 build-profile.json5 或 oh-package.json5 文件)。
验证逻辑:
build-profile.json5 或 oh-package.json5如果不合法:
路径验证失败:
- 路径不存在或未找到 build-profile.json5 / oh-package.json5 文件
- 请确认这是鸿蒙项目根目录
请重新提供正确的项目路径。
如果合法:进入步骤 2
操作:
assets/generate_excel_template.py,生成 assets/MobPush_Config_Template.xlsxMobPush_Config.xlsx告知用户:
已在你项目的根目录生成 {path}/MobPush_Config.xlsx 配置文件。
请打开文件填写:
1. "基础信息":appKey、appSecret、鸿蒙包名
(appKey/appSecret 从 https://www.mob.com/ 注册应用获取)
2. "华为推送":如需使用华为推送通道,填写 Client ID
(从 AppGallery Connect 获取,不需要可填写"否")
3. "隐私合规" 和 "填写说明" 有详细指引
填写完成后告诉我"填好了"。
验证规则:
| 检查项 | 规则 | 不通过时的提示 |
|---|---|---|
| appKey | 必填 | "基础信息 Sheet 中的 appKey 未填写" |
| appSecret | 必填 | "基础信息 Sheet 中的 appSecret 未填写" |
| 包名 | 必填,反域名格式 | "包名格式不正确" |
类型转换:appKey、appSecret、包名、Client ID 等标识符字段强制转为字符串。
如果合法,提取配置信息,进入步骤 3。
展示命令:
ohpm install @zztsdk/zztcore
ohpm install @zztsdk/mobpush
询问:"以上命令将安装 MobPush 鸿蒙 SDK 依赖,是否确认?"
执行后确认安装成功。如失败则提示用户检查 ohpm 环境,或通过 DevEco Studio 依赖管理面板手动添加。
展示修改内容:
{
"app": {
"products": [
{
"compatibleSdkVersion": "5.0.0(12)",
"buildOption": {
"strictMode": {
"useNormalizedOHMUrl": true
}
}
}
]
}
}
询问:"以上内容将合并到项目级 build-profile.json5,是否确认修改?"
展示添加的权限:
"requestPermissions": [
{ "name": "ohos.permission.INTERNET" },
{ "name": "ohos.permission.GET_NETWORK_INFO" }
]
说明:INTERNET 用于网络连接和推送,GET_NETWORK_INFO 用于检测网络状态。
询问:"以上权限将添加到 entry/src/main/module.json5,是否确认修改?"
如果用户在 Excel 中启用了华为推送并填写了 Client ID:
"metadata": [
{
"name": "client_id",
"value": "{用户填写的Client ID}"
}
]
说明:如使用华为推送,需在 AppGallery Connect 获取 Client ID 并配置到此。
询问:"是否在 module.json5 中添加以上华为 Client ID 配置?"
工程配置文件已修改,请在 DevEco Studio 中执行 Build -> Build Hap(s) 同步项目。
⚠️ 确保 ohpm 依赖已正确安装后再编译。
进入步骤 4
根据 MobTech 隐私合规要求,使用 MobPush 需在用户同意隐私政策后才能初始化。
你需要:
1. 首次启动时展示《隐私政策》弹窗
2. 用户点击"同意"后调用初始化和隐私授权代码
3. 用户不同意则不调用
请告知:SDK 初始化代码应放在哪个文件、哪个方法中?
以及用户点击"同意"的回调位置?
初始化代码:
import { ZztSDK } from '@zztsdk/zztcore';
import mobPush from '@zztsdk/mobpush';
ZztSDK.init(getContext(this), "{appKey}", "{appSecret}");
mobPush.init(getContext(this), "{appKey}", "{appSecret}");
隐私授权代码:
// 用户同意隐私政策后调用
ZztSDK.submitPolicyGrantResult(true);
询问:"以上代码将插入到 {用户指定的位置},是否确认?"
用户确认后执行插入,进入步骤 5。
建议在 AbilityStage 中设置,确保消息不丢失:
import mobPush from '@zztsdk/mobpush';
let receiver: mobPush.MobPushReceiver = {
onCustomMessageReceive: (message: mobPush.MobPushCustomMessage) => {
// 透传消息:message.getMessageId()、message.getContent()
},
onNotifyMessageReceive: (message: mobPush.MobPushNotifyMessage) => {
// 通知到达:message.getMobNotifyId()、message.getMessageId()、message.getTitle()、message.getContent()
},
onNotifyMessageOpenedReceive: (message: mobPush.MobPushNotifyMessage) => {
// 通知点击(需配合 notificationClickAck):message.getMobNotifyId()、message.getTitle()、message.getContent()
},
onCommandReceive: (type: number, map: HashMap<string, Object>) => {
// type=1: RID更新 type=2: 厂商deviceToken更新
let channel = map.get(mobPush.KEY_CHANNEL); // channel: mobpush/harmony
let token = map.get(mobPush.KEY_TOKEN); // 对应channel的更新token
}
};
mobPush.addPushReceiver(receiver);
// 页面销毁时:mobPush.removePushReceiver(receiver);
必须在 UIAbility 的 onCreate 和 onNewWant 中调用:
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
mobPush.notificationClickAck(want);
}
onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void {
mobPush.notificationClickAck(want);
// 获取推送附加数据: want?.parameters?.["pushData"]
}
}
// 别名
mobPush.setAlias("alias").then((data: mobPush.AliasResult) => console.log(data.errorCode, data.alias));
mobPush.getAlias().then((data: mobPush.AliasResult) => console.log(data.alias, data.errorCode));
mobPush.deleteAlias().then((data: mobPush.AliasResult) => console.log(data.errorCode));
// 标签
mobPush.addTags(["tag"]).then((data: mobPush.TagsResult) => console.log(data.errorCode, data.tags));
mobPush.getTags().then((data: mobPush.TagsResult) => console.log(data.tags, data.errorCode));
mobPush.deleteTags(["tag"]).then((data: mobPush.TagsResult) => console.log(data.errorCode, data.tags));
mobPush.cleanTags().then((data: mobPush.TagsResult) => console.log(data.errorCode, data.tags));
完整 API 参考官方文档,包括:
getRegistrationId(callback) / getRegistrationId(): Promise<string> — 获取注册 ID(Callback/Promise 两种方式)setShowBadge(show: boolean) — 设置是否显示角标getShowBadgeAsync(): Promise<boolean> — 获取是否显示角标setBadgeCounts(count: number) — 设置角标数stopPush() — 停止推送(仅可通过 restartPush 重新打开)restartPush() — 重新打开推送服务isPushStoppedAsync(): Promise<boolean> — 判断推送是否已停止clearAllNotification() — 清除所有通知getDeviceTokenAsync(): Promise<string> — 获取厂商 tokenisNotificationEnabled(callback) / isNotificationEnabled(): Promise<boolean> — 判断通知权限是否开启checkTcpStatus(callback) / checkTcpStatus(): Promise<boolean> — 检测 TCP 连接状态removePushReceiver(receiver) — 移除推送监听(页面销毁时调用)进入步骤 6
在用户项目根目录生成 MOBPUSH_README.md,包含集成说明、关键文件位置、后续修改指引。
MobPush 鸿蒙端集成已完成!
📁 生成的文件:
- {project_path}/MOBPUSH_README.md — 集成说明文档
- {project_path}/MobPush_Config.xlsx — 项目配置文件
📝 关键文件位置:
- SDK 配置:EntryAbility.ets 中的 ZztSDK.init()
- 隐私授权:用户隐私同意回调中的 ZztSDK.submitPolicyGrantResult(true)
- 华为推送:entry/src/main/module.json5 中的 client_id metadata
- 编译配置:项目级 build-profile.json5 中的 buildOption
📖 官方文档:
- 集成指南:https://www.mob.com/wiki/detailed?wiki=697&id=136
- SDK API:https://www.mob.com/wiki/detailed?wiki=698&id=136
- 后台配置:https://www.mob.com/wiki/detailed?wiki=560&id=136
- 合规说明:https://www.mob.com/wiki/detailed?wiki=745&id=136
- 隐私政策:https://policy.zztfly.com/sdk/mobpush/privacy
⚠️ 重要提醒:
1. 包名与 MobTech 后台配置一致
2. 华为推送需在 AppGallery Connect 正确配置
3. 用户同意隐私政策后才能调用 ZztSDK.submitPolicyGrantResult(true)
4. 通知点击回执必须在 UIAbility 的 onCreate 和 onNewWant 中调用
{
"app": {
"products": [{
"compatibleSdkVersion": "5.0.0(12)",
"buildOption": { "strictMode": { "useNormalizedOHMUrl": true } }
}]
}
}
"requestPermissions": [
{ "name": "ohos.permission.INTERNET" },
{ "name": "ohos.permission.GET_NETWORK_INFO" }
]
"metadata": [
{ "name": "client_id", "value": "华为Client ID" }
]
ohpm install @zztsdk/zztcore
ohpm install @zztsdk/mobpush
module.json5 中配置 metadataZztSDK.submitPolicyGrantResult(true)ZztCustomController 自定义数据采集控制器| 问题 | 可能原因 |
|---|---|
| 收不到推送 | 包名不一致、appKey/appSecret 错误 |
| 华为推送失败 | Client ID 未配置或错误 |
| 无点击回调 | 未在 UIAbility 中调用 notificationClickAck() |
| 别名/标签操作失败 | errorCode 非 0,检查 SDK 初始化状态 |
| 通知权限未开启 | 引导用户在系统设置中开启 |