如何让你的应用在市场中脱颖而出?

news/2025/3/14 17:17:14/文章来源:https://www.cnblogs.com/HarmonyOSSDK/p/18772468

开发者在完成应用开发并成功上架应用市场后,将面临一项重要挑战:如何在竞争激烈的环境中脱颖而出,吸引用户的关注?为此,提升应用的曝光度和下载量至关重要。

HarmonyOS SDK应用市场服务(Store Kit)提供应用市场业务的对外开放能力,针对想要获得曝光的应用,Store Kit提供了应用市场推荐和应用市场更新功能的能力,可以更好地支持应用的下载、推荐和分发等场景,以提高在应用市场上的曝光度,助力开发者商业变现。

应用市场推荐:用户可直达您的应用市场详情页或卡片加桌页面,有效提高您的应用曝光率。

应用市场更新功能:您可以通过本服务,查询应用是否有可更新的版本。当存在可更新版本时,可为用户显示更新提醒。

应用市场推荐场景介绍

元服务卡片加桌

您可调用应用市场服务提供的元服务加桌loadService接口,加载元服务卡片加桌页面,用户点击"添加至桌面"按钮,将元服务卡片添加至桌面。

image

应用详情页展示

a.您可调用应用市场服务提供的loadProduct接口,直接加载应用市场的应用详情页面,用户可以在页面内点击"安装"按钮完成应用的下载安装。

b.您可使用DeepLink链接的方式拉起应用市场应用详情页,通过拼接应用市场DeepLink链接,在应用中调用或网页中点击DeepLink链接拉起应用详情页,用户可以在页面内点击"安装"按钮完成应用的下载安装。

c.您可使用App Linking链接的方式拉起应用市场应用详情页,通过拼接应用市场App Linking链接,在应用中调用或网页中点击App Linking链接拉起应用详情页,用户可以在页面内点击"安装"按钮完成应用的下载安装。

image

应用市场推荐场景介绍

当应用启动完成或用户在应用中主动检查应用新版本时,开发者可以通过本服务,来查询应用是否有可更新的版本。如果存在可更新版本,您可以通过本服务为用户显示更新提醒。

image
image

应用市场推荐开发步骤

元服务卡片加桌

1.导入productViewManager模块及相关公共模块。

import { productViewManager } from '@kit.StoreKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import type { common, Want } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';

2.构造元服务卡片参数。

const uiContext = getContext(this) as common.UIAbilityContext
const wantParam: Want = {// 此处填入要加载的元服务的加桌链接uri: 'xxx'
}
const callback: productViewManager.ServiceViewCallback = {onReceive: (data: productViewManager.ServiceViewReceiveData) => {hilog.info(0x0001, 'TAG', `loadService onReceive.result is ${data.result}, msg is ${data.msg}`);},onError: (error: BusinessError) => {hilog.error(0x0001, 'TAG', `loadService onError.code is ${error.code}, message is ${error.message}`);}
}

3.调用loadService方法,将步骤2中构造的参数依次传入接口中。

// 调用接口,加载元服务加桌页面
productViewManager.loadService(uiContext, wantParam, callback);

应用详情页展示

方式一:loadProduct接口调用

1.导入productViewManager模块及相关公共模块。

import { productViewManager } from '@kit.StoreKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import type { common, Want } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';

2.构造应用详情页参数。

const uiContext = getContext(this) as common.UIAbilityContext
const wantParam: Want = {parameters: {// 此处填入要加载的应用包名,例如: bundleName: 'com.huawei.hmsapp.books'bundleName: 'com.xxx'}
}
const callback: productViewManager.ProductViewCallback = {onError: (error: BusinessError) => {hilog.error(0x0001, 'TAG', `loadProduct onError.code is ${error.code}, message is ${error.message}`);}
}

3.调用loadProduct方法,将步骤2中构造的参数依次传入接口中。

// 调用接口,拉起应用详情页
productViewManager.loadProduct(uiContext, wantParam, callback);

方式二:DeepLink方式

构造拼接bundleName的DeepLink链接,其中bundleName为需要打开的应用包名,其格式为:

store://appgallery.huawei.com/app/detail?id= + bundleName

在应用中调用context.startAbility()方法,拉起应用市场应用详情页:

import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import type { common, Want } from '@kit.AbilityKit';// 拉起应用市场对应的应用详情页面
function startAppGalleryDetailAbility(context: common.UIAbilityContext, bundleName: string): void {let want: Want = {action: 'ohos.want.action.appdetail', //隐式指定action为ohos.want.action.appdetailuri: 'store://appgallery.huawei.com/app/detail?id=' + bundleName, //  bundleName为需要打开应用详情的应用包名};context.startAbility(want).then(() => {hilog.info(0x0001, 'TAG', "Succeeded in starting Ability successfully.")}).catch((error: BusinessError) => {hilog.error(0x0001, 'TAG', `Failed to startAbility.Code: ${error.code}, message is ${error.message}`);});
}@Entry
@Component
struct StartAppGalleryDetailAbilityView {@State message: string = '拉起应用市场详情页';build() {Row() {Column() {Button(this.message).fontSize(24).fontWeight(FontWeight.Bold).onClick(() => {const context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;// 按实际需求获取应用的bundleName,例如bundleName: 'com.huawei.hmsapp.books'const bundleName = 'xxxx';startAppGalleryDetailAbility(context, bundleName);})}.width('100%')}.height('100%')}
}

在网页中打开DeepLink链接拉起应用市场应用详情页:

<html lang="en"><head><meta charset="UTF-8"></head><body><div><button type="button" onclick="openDeepLink()">拉起应用详情页</button></div></body>
</html>
<script>function openDeepLink() {window.open('store://appgallery.huawei.com/app/detail?id=com.xxxx.xxxx')}
</script>

方式三:App Linking方式

构造拼接bundleName的App Linking链接,其中bundleName为需要打开的应用包名,其格式为:

https://appgallery.huawei.com/app/detail?id= + bundleName

在应用中调用openLink()接口拉起App Linking链接:

import common from '@ohos.app.ability.common';
import { BusinessError } from '@ohos.base';
import { hilog } from '@kit.PerformanceAnalysisKit';@Entry
@Component
struct Index {build() {Button('start app linking', { type: ButtonType.Capsule, stateEffect: true }).width('87%').height('5%').margin({ bottom: '12vp' }).onClick(() => {let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;// 需要拼接不同的应用包名,用以打开不同的应用详情页,例如:bundleName: 'com.huawei.hmsapp.books'let bundleName: string = 'xxxx';let link: string = 'https://appgallery.huawei.com/app/detail?id=' + bundleName;// 以App Linking优先的方式在应用市场打开指定包名的应用详情页context.openLink(link, { appLinkingOnly: false }).then(() => {hilog.info(0x0001, 'TAG', 'openlink success.');}).catch((error: BusinessError) => {hilog.error(0x0001, 'TAG', `openlink failed. Code: ${error.code}, message is ${error.message}`);});})}
}

在网页中打开App Linking链接:

<html lang="en"><head><meta charset="UTF-8"><title>跳转示例</title></head><body><a href='https://appgallery.huawei.com/app/detail?id=bundleName'>AppLinking跳转示例</a></body>
</html>

应用市场更新功能开发步骤

检测新版本

1.导入updateManager模块及相关公共模块。

import { updateManager } from '@kit.StoreKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import type { common } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';

2.构造参数。

入参为common.UIAbilityContext类型的Context。

let context: common.UIAbilityContext = getContext() as common.UIAbilityContext;

3.调用checkAppUpdate方法。

try {updateManager.checkAppUpdate(context).then((checkResult: updateManager.CheckUpdateResult) => {hilog.info(0, 'TAG', "Succeeded in checking Result updateAvailable:" + checkResult.updateAvailable);}).catch((error: BusinessError) => {hilog.error(0, 'TAG', `checkAppUpdate onError.code is ${error.code}, message is ${error.message}`);});
} catch (error) {hilog.error(0, 'TAG', `checkAppUpdate onError.code is ${error.code}, message is ${error.message}`);
}

显示升级对话框

1.导入updateManager 模块及相关公共模块。

import { updateManager } from '@kit.StoreKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import type { common } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';

2.构造参数。

入参为common.UIAbilityContext类型的Context。

let context: common.UIAbilityContext = getContext() as common.UIAbilityContext;

3.调用showUpdateDialog方法。

try {updateManager.showUpdateDialog(context).then((resultCode: updateManager.ShowUpdateResultCode) => {hilog.info(0, 'TAG', "Succeeded in showing UpdateDialog resultCode:" + resultCode);}).catch((error: BusinessError) => {hilog.error(0, 'TAG', `showUpdateDialog onError.code is ${error.code}, message is ${error.message}`);});
} catch (error) {hilog.error(0, 'TAG', `showUpdateDialog onError.code is ${error.code}, message is ${error.message}`);
}

了解更多详情>>

访问应用市场服务联盟官网

获取应用市场推荐开发指导文档

获取应用市场更新功能开发指导文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/898751.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里通义实验室语音团队负责人鄢志杰离职;苹果计划在 AirPods 上配备实时对话翻译功能丨日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 技术 」、「有亮点的 产品 」、「有思考的 文章 」、「有态度的 观点 」、「有看点的 活动 」,但内容仅代表编辑…

OP90-1工作原理

step1.压紧弹簧及产品 上下气缸压紧弹簧,产品压紧气缸压紧产品step2.弹簧钩下降 拉簧钩紧气缸伸出,带动弹簧钩下降step3.弹簧钩带动弹簧转动,下弹簧脚进槽step4.弹簧钩提起step5.弹簧钩旋转,带动弹簧越过高处,到达卡槽正上方step6.弹簧钩下降step.弹簧钩回退撤出 弹簧钩回…

Java的volatile和sychronized底层实现

1. 概览 从Java代码级别到硬件级别各层都是如何实现的2. Synchronized 2.1 字节码层面 使用javap -verbose <class文件>可以查看到字节码信息,其中synchronized方法会有flags:ACC_SYNCHRONIZED,此时字节码中不会包含monitorenter和moniotrexit,JVM会自动加 public syn…

信息资源管理文字题之“服务支持类的五大运营流程图”

一、为了充分利用ERP信息系统资源,LX集团采用了各种先进的信息系统管理理念和方法,包括IT服务管理,下图为LX集团IT服务管理中服务支持类的五大运营流程图 要求:将图中标有序号的空白处的正确能容,按序号填写 二、答案变更请求 最终软件库 配置管理数据库 影响分析 授权 变…

洛谷 P3979 遥远的国度 做题记录

ds。前置芝士:树链剖分 思路 我们先随手画出一张图:我们首先以 \(1\) 为根构造这颗树。 这张图比较特殊,因为这张图的编号同时也是他的 dfn 序。 我们将其分类讨论。设当前根节点为 \(rt\),查询的节点为 \(x\),那么:当 \(rt=x\) 时(图中蓝圈部分),我们可以访问所有的节…

actuator-系统监控功能

系统监控功能actuator-系统监控功能 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId> </dependency>application.yml server:port: 8080servlet:context-path: …

首页页面布局(1)

import { TaskItem } from ../view/TaskItemimport { TaskStatisties } from ../view/TaskStatisties@Entry@Componentstruct TaskList { @State message: string = Hello World build() { Stack({alignContent:Alignment.BottomEnd}){ Column() { // 第1个模…

算法备案承诺书指南,5分钟速览

算法备案承诺书是算法备案初审的重要文件,和《落实算法安全责任基本情况》是初审阶段难度最大的两份材料。今天我就结合过往经验总结下这份文件的要点,帮助大家快速理解。TIPS:不要照搬这份模板,仅供学习了解。也不要买模板!不同行业和不同服务形态、不同服务对象都有区别…

信创替代必看:禅道/ONES/Jira功能对比及迁移方案

信创项目管理工具:赋能企业数字化转型的利器 在这个数字化转型的浪潮中,项目管理工具成为了企业发展的关键。它们不仅帮助团队提高效率,还能推动创新,为企业带来更大的价值。今天,让我们一起探索这些工具的魅力,以及它们如何在信创领域大放异彩。 项目管理工具的重要性 项…

VK1650 SOP16LED显示驱动芯片,适用于小家电,电磁炉,微波炉等

产品品牌:永嘉微电/VINKA 产品型号:VK1650 封装形式:SOP16/DIP16 概述 VK1650是一种带键盘扫描电路接口的 LED 驱动控制专用芯片,内部集成有数据锁存器、LED 驱动、键盘扫描等电路。SEG脚 接LED阳极,GRID脚接LED阴极,可支持8SEGx4GRID的点阵 LED显示。最大支持7x4按键。本…

Exsi网络不通的解决方法

Exsi网络不通,无法ping通网关 在虚拟机内部查看网卡是up状态 解决方法 找到对应的物理网络把默认协商随意修改成指定的某个速度的协商为什么这样解决不知道原因

jasyptStringEncryptor-ENC

Jasypt 是一个用于加密和解密字符串的 Java 库,常用于保护配置文件中的敏感信息(如数据库密码、API 密钥等)。StringEncryptor 是 Jasypt 的核心接口,用于执行字符串的加密和解密操作。以下是 StringEncryptor 的详细使用指南:1. 添加依赖 在 pom.xml 中添加 Jasypt 依赖:…