简体中文
目前鸿蒙元服务可以通过 button 组件 唤起系统应用、相同开发者名下的鸿蒙应用。
这里无额外限制,可快速打开特定系统页面
<button
type="primary"
open-type="launchApp"
@launchapp="onLaunchApp"
@error="onError"
app-bundle-name="com.huawei.hmos.calendar"
app-ability-name="MainAbility"
>
打开日历
</button>
跳转非同名开发者应用系统拦截,提示无法打开。
<button
open-type="launchApp"
app-bundle-name="io.dcloud.hellouniapp.h"
app-module-name="entry"
app-ability-name="EntryAbility"
:app-parameters='{from:"as"}'
@launchapp="onLaunchApp"
@error="onError"
>
唤起统一应用软件鸿蒙应用
</button>
上述代码可在 uniapp 的 helloUniApp 元服务中唤起 统一应用软件 应用并传递参数。
| 属性 | 类型 | 描述 |
|---|---|---|
| app-bundle-name | string | 必选,待启动应用包名 |
| app-module-name | string | 可选。待启动 Ability 所属的模块名称。 |
| app-ability-name | string | 必选,待启动 Ability 名称。一般为 EntryAbility |
| app-parameters | string | 可选,自定义传递参数 |
传递的参数可通过 UTS 插件来读取。创建 UTS API 插件,定位到 uni_modules/uni-onLaunch/utssdk/app-harmony/index.uts
import { Want } from '@kit.AbilityKit';
export const params = {
paramsOnCreate: '',
paramsOnNewWant: '',
};
UTSHarmony.onAppAbilityCreate((want: Want) => {
let uri = want?.uri;
params.paramsOnCreate = uri ?? '';
// 实际上立即执行了,但是通信通道还没有建立,延迟一秒打印可以看到数据
// 延迟是为了看到打印,业务逻辑不需要延迟
setTimeout(() => {
console.log('onCreate', want);
}, 1000);
});
UTSHarmony.onAppAbilityNewWant((want: Want) => {
params.paramsOnNewWant = want?.uri ?? '';
console.log('onNewWant', want);
});
传递的参数,可在 want.parameters 中读取。
访问 AGC 后台 选择对应元服务,选择 基础服务 - 元服务链接,创建元服务链接,选择关联二维码。关联链接即可,此时短链长期有效,可用于宣传。
如果需要打开特定的页面,可选择自定义参数,参数使用 encodeURIComponent 编码,参考 链接直达、参数传递。
目前鸿蒙处理逻辑比较复杂,短链拼接参数需要自己解析,不会自动放入 want 中,可尝试如下方式:
import { AscfUIAbility } from '@atomicservice/ascfapi';
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import Want from '@ohos.app.ability.Want';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { url } from '@kit.ArkTS';
export default class EntryAbility extends AscfUIAbility {
onCreate(v: Want, w: AbilityConstant.LaunchParam): void {
// todo 参数处理
let uri = v?.uri;
if (uri) {
try {
let urlObject = url.URL.parseURL(uri);
let ascfPara = urlObject.params.get('ascfPara');
v.parameters = {
ascfPara: JSON.stringify(ascfPara),
};
} catch (error) {
hilog.error(0x0000, 'testTag', `Failed to parse url.`);
}
}
super.onCreate(v, w);
}
}