一、背景
在HarmonyOS应用开发中,经常需要引导用户跳转到华为应用市场(AppGallery)的应用详情页,主要场景包括:
- 应用更新:引导用户到应用市场更新当前应用
- 应用推广:推荐用户下载公司其他应用
- 用户评价:引导用户对应用进行评分
- 应用详情:展示应用的详细信息和描述
二、实现方案
方案一:使用productViewManager.loadProduct接口(推荐)
import { common, Want } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { productViewManager } from '@kit.StoreKit';
@Entry
@Component
struct Index {
build() {
Column({ space: 20 }) {
Button('跳转到应用市场-方式1')
.onClick(() => {
this.openAppDetail(getContext() as common.UIAbilityContext)
})
}
.width('100%')
.height('100%')
}
openAppDetail(context: common.UIAbilityContext) {
// 1. 构造Want参数
const wantParam: Want = {
parameters: {
bundleName: context.abilityInfo.bundleName//拉起方应用包名
}
}
// 2. 定义错误回调
const callback: productViewManager.ProductViewCallback = {
onError: (error: BusinessError) => {
console.error('TAG', `loadProduct onError.code is ${error.code}, message is ${error.message}`);
}
}
// 3. 调用接口
try {
productViewManager.loadProduct(context, wantParam, callback);
} catch (error) {
const err: BusinessError = error as BusinessError;
console.error('ProductView', `调用失败: ${err.message}`);
}
}
}
方式二:DeepLink方式
构造拼接bundleName的DeepLink链接,其中bundleName为需要打开的应用包名
import { common, Want } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
@Entry
@Component
struct Index {
build() {
Column({ space: 20 }) {
Button('跳转到应用市场-方式2')
.onClick(() => {
this.startAppGalleryDetailAbility(getContext(this) as common.UIAbilityContext)
})
}
.width('100%')
.height('100%')
}
// 拉起应用市场对应的应用详情页面
startAppGalleryDetailAbility(context: common.UIAbilityContext) {
let want: Want = {
action: 'ohos.want.action.appdetail',
//bundleName为需要打开应用详情的应用包名
uri: `store://appgallery.huawei.com/app/detail?id=${context.abilityInfo.bundleName}`,
};
context.startAbility(want).then(() => {
console.info("Succeeded in starting Ability successfully.")
}).catch((error: BusinessError) => {
console.error(`Failed to startAbility.Code: ${error.code}, message is ${error.message}`);
});
}
}
方案三:App Linking方式
构造拼接bundleName的App Linking链接,其中bundleName为需要打开的应用包名
import { common } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
@Entry
@Component
struct Index {
build() {
Column({ space: 20 }) {
Button('跳转到应用市场-方式3')
.onClick(() => {
this.openAppLink(getContext() as common.UIAbilityContext)
})
}
.width('100%')
.height('100%')
}
openAppLink(context: common.UIAbilityContext) {
// 需要拼接不同的应用包名,用以打开不同的应用详情页,例如:bundleName: 'com.huawei.hmsapp.books'
let link: string = 'https://appgallery.huawei.com/app/detail?id=' + context.abilityInfo.bundleName;
// 以App Linking优先的方式在应用市场打开指定包名的应用详情页
context.openLink(link, { appLinkingOnly: false })
.then(() => {
console.info('TAG', 'openlink success.');
})
.catch((error: BusinessError) => {
console.error('TAG', `openlink failed. Code: ${error.code}, message is ${error.message}`);
});
}
}
注意:
若该App未上架,则会出现下面提示