【HarmonyOS NEXT】跳转到华为应用市场进行应用下载并更新
一、背景
在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未上架,则会出现下面提示