当用户提到以下任一主题时,使用本 skill:
如果用户问题明确与 HarmonyOS 的 MobLink 接入、工程配置、场景还原、隐私合规有关,应优先使用本 skill。
使用以下官方文档作为事实来源:
关键事实:
@zztsdk/zztcore 和 @zztsdk/moblink。12(首批接口从 OpenHarmony SDK API version 12 开始支持)。ohpm install @zztsdk/zztcore 和 ohpm install @zztsdk/moblink。import { ZztSDK } from '@zztsdk/zztcore'; 和 import mobLink from '@zztsdk/moblink';。ZztSDK.init(context, "您的AppKey", "您的AppSecret")。ZztSDK.submitPolicyGrantResult(granted) 或 ZztSDK.submitPolicyGrantResult(true, new MyCustomController())。mobLink.init(context),需在 ZztSDK 初始化和隐私提交之后调用。mobLink.setRestoreSceneListener(receiver)。onNewWant 中调用 mobLink.updateNewWant(want)。module.json5 中的 skills 标签以支持 URI scheme 唤醒。每步操作前都需要展示内容给用户确认,获得明确同意后再执行。
text
我来帮你集成 MobLink 场景还原功能。
请提供需要集成的 HarmonyOS 项目根路径,例如:
/path/to/your-harmonyos-project
请确保项目包含 build-profile.json5、oh-package.json5 和 module.json5 文件。
验证逻辑:
build-profile.json5 或 app.json5。oh-package.json5。module.json5(或 entry/src/main/module.json5)。如果路径不合法:
text
路径验证失败,可能原因:
- 路径不存在:{path}
- 未找到 build-profile.json5 / app.json5
- 未找到 oh-package.json5
- 未找到 module.json5
请重新提供正确的 HarmonyOS 项目根路径。
如果路径合法:进入步骤 2。
操作:
assets/generate_excel_template.py,生成 assets/MobLink_Config_Template.xlsxassets/MobLink_Config_Template.xlsx 复制到 {path} 下{path} 下命名为 MobLink_Config.xlsx告知用户:
text
已在你项目的根目录生成 {path}/MobLink_Config.xlsx 配置文件。
请打开该文件,按以下步骤填写:
1. 在"基础信息"Sheet 中填写 MobTech 的 appKey、appSecret 和鸿蒙包名
2. 在"MobLink配置"Sheet 中填写 uriScheme、host 和默认场景路径
3. 在"隐私合规"Sheet 中确认隐私政策、授权回调和扩展采集控制配置
4. "填写说明"Sheet 中有官方文档链接和字段说明
填写完成后告诉我"填好了",我将继续下一步。
等待用户回复"填好了""已填写"或类似表达。
操作:读取 {path}/MobLink_Config.xlsx。
验证规则:
检查项规则不通过时的提示appKey必填,不能为空字符串"基础信息 Sheet 中的 appKey 未填写,请从 MobTech 官网获取"appSecret必填,不能为空字符串"基础信息 Sheet 中的 appSecret 未填写"bundleName必填,建议符合 com.xxx.xxx 格式"鸿蒙包名格式不正确,应类似 com.example.app"uriScheme建议填写,来自 MobLink 后台配置"MobLink uriScheme 未填写,可能影响 scheme 唤醒"host建议填写,来自 MobLink 后台配置"MobLink host 未填写,可能影响 AppLink 唤醒"defaultScenePath如填写,建议以 / 开头"场景路径建议以 / 开头,例如 /demo/a"privacyPolicyReady转为布尔值"隐私合规配置请填写 是/否 或 true/false"隐私合规布尔项转为布尔值"隐私合规配置请填写 是/否 或 true/false"
类型转换规则:
appKey、 appSecret、 bundleName、 uriScheme、 host、 defaultScenePath、 restoreAbility 等标识符字段强制转为字符串。privacyPolicyReady、 useZztCustomController、 allowLocationData、 allowDeviceIdData、 allowAppListData、 allowNetworkData 转为 true / false。如果不合法:
text
配置信息验证失败,请修正以下问题:
{具体问题列表}
请修改 Excel 文件后保存,然后重新告诉我"填好了"。
如果合法:提取配置信息,进入步骤 3。
操作:在项目根目录执行以下命令:
bash
ohpm install @zztsdk/zztcore
ohpm install @zztsdk/moblink
验证 oh-package.json5 中是否已添加依赖:
json5
"dependencies": {
"@zztsdk/zztcore": "^x.x.x",
"@zztsdk/moblink": "^x.x.x"
}
注意:需要访问 https://ohpm.openharmony.cn/ohpm 获取最新依赖包的版本。
在 module.json5 中添加权限:
必需权限:
json5
"reqPermissions": [
{
"name": "ohos.permission.INTERNET"
}
]
建议权限:
json5
{
"name": "ohos.permission.APP_TRACKING_CONSENT"
},
{
"name": "ohos.permission.GET_NETWORK_INFO"
}
注意:
APP_TRACKING_CONSENT 是 user_grant 权限,需要补 reason 和 usedScene。
示例:
text
{
"name": "ohos.permission.APP_TRACKING_CONSENT",
"reason": "用于为您提供个性化的内容推荐服务",
"usedScene": {
"abilities": ["EntryAbility"],
"when": "inuse"
}
}
在 module.json5 的对应 Ability 的 skills 中添加 skill 对象:
json5
"skills": [
{
"entities": ["entity.system.home"],
"actions": ["action.system.home"]
},
{
"actions": ["your.custom.action"],
"uris": [
{
"scheme": "{uriScheme}",
"host": "{host}"
}
]
}
]
如果存在多个跳转场景,需配置多个 skill 对象。actions 不能为空,否则会造成目标方匹配失败。
text
根据 MobTech 合规要求,MobLink 需要在用户同意隐私政策后才能提交授权结果并使用 SDK 功能。
ZztSDK.init() 内部会做隐私授权状态的判断,在应用向 ZztSDK 提交隐私授权同意状态之前不会做任何业务的初始化。
请告知用户点击隐私政策"同意"按钮的回调代码在哪个文件、哪个方法中?
例如:EntryAbility.ts 的 onPrivacyAgreed() 方法,或具体位置如 entry/src/main/ets/ability/EntryAbility.ts:80
普通方案:
typescript
import { ZztSDK } from '@zztsdk/zztcore';
// 用户同意隐私政策后调用
ZztSDK.submitPolicyGrantResult(true);
如果用户启用 ZztCustomController,展示:
typescript
import { ZztSDK, ZztCustomController } from '@zztsdk/zztcore';
export class MyCustomController extends ZztCustomController {
// TODO 重写控制器方法
}
ZztSDK.submitPolicyGrantResult(true, new MyCustomController());
用户确认后再执行插入。
询问用户:
text
现在配置 MobLink 场景还原,请告诉我:
1. 需要在哪个 Ability 承接还原后的场景?(例如 EntryAbility 或其他 Ability)
2. 场景路径是什么?例如 /demo/a
3. 需要携带哪些业务参数?例如 testKey、testValue
4. 是否需要生成 mobID 并拼接到分享链接?
5. 是否已有 AbilityStage 类?如果有,请提供路径。
官方建议在 AbilityStage 中设置。
监听器示例:
typescript
import mobLink from '@zztsdk/moblink';
let receiver: mobLink.RestoreSceneListener = {
completeRestore: (scene: mobLink.Scene) => {
// 在"拉起"处理场景的 ability 之后调用
// 处理跳转
if (scene) {
console.log("scene path:" + scene.path);
let action = scene.path;
if (action == "xxx") {
// 逻辑处理
}
}
},
notFoundScene: (scene: mobLink.Scene) => {
// 未找到处理 scene 的 ability 时回调
}
};
mobLink.setRestoreSceneListener(receiver);
在承接场景还原的 Ability 中添加:
typescript
import mobLink from '@zztsdk/moblink';
export default class EntryAbility extends UIAbility {
onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void {
console.log("EntryAbility onNewWant");
mobLink.updateNewWant(want);
}
}
在 Ability 的 onCreate 或 onNewWant 中获取:
typescript
import mobLink from '@zztsdk/moblink';
mobLink.getSceneFromWant(want).then((scene) => {
if (scene) {
console.log("scene path:" + scene.path);
// 逻辑处理
} else {
console.log("scene undefined");
}
});
typescript
import mobLink from '@zztsdk/moblink';
let scene = new mobLink.Scene();
scene.path = "{defaultScenePath}";
scene.params.set("testKey", "testValue");
let receiver: mobLink.MobIDListener = {
onResult: (mobid: string) => {
console.log("mobId:" + mobid);
// 根据 mobID 拼接分享链接
},
onError: (e: Error) => {
console.log("onError:" + e.message);
}
};
mobLink.getMobID(scene, receiver);
所有代码修改前先展示完整 diff 计划,用户确认后再写入。
操作:在 {path} 下生成 MOBLINK_README.md。
内容应包含:
uriScheme 和 host 来源。onNewWant 处理位置。getMobID 使用方式。生成前展示内容,用户确认后写入。