当前位置: 首页 > news >正文

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

http://www.lryc.cn/news/576496.html

相关文章:

  • COLT_CMDB_linux_zookeeperInfo_20250628.sh
  • cocos creator 3.8 - 精品源码 -《文字大师》(移一笔变新字)
  • Insar 相位展开真实的数据集的生成与下载(随机矩阵放大,zernike 仿真包裹相位)
  • Cesium快速入门到精通系列教程十一:Cesium1.74中高性能渲染上万Polyline
  • SLAM中的非线性优化-2D图优化之零空间(十五)
  • 变长字节的数字表示法vb224
  • 互联网大厂Java求职面试实录
  • c# sugersql 获取子表数据排序
  • Java 识别和处理 HTML 标签内容
  • Spring MVC参数解析:深入剖析415异常与@RequestBody处理机制问题场景
  • Flutter基础(FFI)
  • pytorch中的几个概念
  • NLP中的同义词替换及我踩的坑
  • 《Python 实现 B 站视频信息爬虫:从批量获取到 CSV 保存》
  • 数字孪生技术引领UI前端设计新革命:实时交互与模拟预测
  • LINUX628 NFS 多web;主从dns;ntp;samba
  • 鸿蒙5:ArkTS基本介绍
  • VR训练美国服务器:高性能解决方案与优化指南
  • 【LeetCode 热题 100】438. 找到字符串中所有字母异位词——(解法三)不定长滑动窗口+数组
  • 构建 AI 系统的 4 大 Agentic AI 设计模式
  • 网关ARP防护的措施
  • qt和qtcreator版本关系
  • n8n-nodes-puppeteer截图中文变方块乱码解决方法
  • 在单片机中如何实现一个shell控制台
  • Launcher3中的CellLayout 和ShortcutAndWidgetContainer 的联系和各自职责
  • 前端react面试题之实现网页多选搜索框
  • 【学习笔记】深入理解Java虚拟机学习笔记——第12章 Java内存模型与线程
  • python中学物理实验模拟:瞬间推力与摩擦力作用下的物体运动
  • 力扣网C语言编程题:在数组中查找目标值位置之二分查找法
  • 解决cursor无法下载插件等网络问题