【HarmonyOS NEXT】跳转到华为应用市场进行应用下载并更新

发布于:2025-06-30 ⋅ 阅读:(23) ⋅ 点赞:(0)

一、背景

在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未上架,则会出现下面提示


网站公告

今日签到

点亮在社区的每一天
去签到