华为HarmonyOS 帮助应用实现更好的推广下载能力 -- 1 应用市场推荐

场景介绍

  • 元服务卡片加桌

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

  • 应用详情页展示
    1. 您可调用应用市场服务提供的loadProduct接口,直接加载应用市场的应用详情页面,用户可以在页面内点击“安装”按钮完成应用的下载安装。
    2. 您可使用DeepLink链接的方式拉起应用市场应用详情页,通过拼接应用市场DeepLink链接,在应用中调用或网页中点击DeepLink链接拉起应用详情页,用户可以在页面内点击“安装”按钮完成应用的下载安装。
    3. 您可使用App Linking链接的方式拉起应用市场应用详情页,通过拼接应用市场App Linking链接,在应用中调用或网页中点击App Linking链接拉起应用详情页,用户可以在页面内点击“安装”按钮完成应用的下载安装。

图1 元服务加桌页示例

图2 应用详情页示例

业务流程

 

  1. 用户使用元服务卡片加桌页或者打开应用详情页功能。
  2. 应用调用Store Kit的loadService或者loadProduct接口。
  3. Store Kit API获取应用传入的信息,生成展示页面。
  4. 展示生成的页面给用户使用。

接口说明

应用市场推荐场景提供loadService,loadProduct两个接口,具体API说明详见接口文档

接口名

描述

loadService(context: common.UIAbilityContext, want: Want, callback?: ServiceViewCallback): void

加载元服务加桌页面接口。

loadProduct(context: common.UIAbilityContext, want: Want, callback?: ProductViewCallback): void

加载应用详情页面接口。

开发步骤

元服务卡片加桌

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

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

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

    • 第一个参数是获取当前Page页面的UIAbilityContext
    • 第二个参数是构造一个Want类型的对象,在属性中传入要加载的元服务的加桌链接
    • 第三个参数是可选参数对象,可以传入两个属性,onError:回调函数,回调返回的信息为元服务详情页加载失败的错误信息。onReceive:回调函数,接收元服务加桌结果信息。
     
      
    1. const uiContext = getContext(this) as common.UIAbilityContext
    2. const wantParam: Want = {
    3. // 此处填入要加载的元服务的加桌链接
    4. uri: 'xxx'
    5. }
    6. const callback: productViewManager.ServiceViewCallback = {
    7. onReceive: (data: productViewManager.ServiceViewReceiveData) => {
    8. hilog.info(0x0001, 'TAG', `loadService onReceive.result is ${data.result}, msg is ${data.msg}`);
    9. },
    10. onError: (error: BusinessError) => {
    11. hilog.error(0x0001, 'TAG', `loadService onError.code is ${error.code}, message is ${error.message}`);
    12. }
    13. }

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

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

应用详情页展示

  • 方式一:loadProduct接口调用
  1. 导入productViewManager模块及相关公共模块。

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

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

    • 第一个参数是获取当前Page页面的UIAbilityContext
    • 第二个参数是构造一个Want类型的对象,在属性中传入要加载的应用包名。
    • 第三个参数是可选参数对象,可以使用其onError属性来接收应用详情页加载失败时的返回的错误信息。
     
      
    1. const uiContext = getContext(this) as common.UIAbilityContext
    2. const wantParam: Want = {
    3. parameters: {
    4. // 此处填入要加载的应用包名,例如: bundleName: 'com.huawei.hmsapp.books'
    5. bundleName: 'com.xxx'
    6. }
    7. }
    8. const callback: productViewManager.ProductViewCallback = {
    9. onError: (error: BusinessError) => {
    10. hilog.error(0x0001, 'TAG', `loadProduct onError.code is ${error.code}, message is ${error.message}`);
    11. }
    12. }

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

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

  • 方式二:DeepLink方式

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

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

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

     
      
    1. import { BusinessError } from '@kit.BasicServicesKit';
    2. import { hilog } from '@kit.PerformanceAnalysisKit';
    3. import type { common, Want } from '@kit.AbilityKit';
    4. // 拉起应用市场对应的应用详情页面
    5. function startAppGalleryDetailAbility(context: common.UIAbilityContext, bundleName: string): void {
    6. let want: Want = {
    7. action: 'ohos.want.action.appdetail', //隐式指定action为ohos.want.action.appdetail
    8. uri: 'store://appgallery.huawei.com/app/detail?id=' + bundleName, // bundleName为需要打开应用详情的应用包名
    9. };
    10. context.startAbility(want).then(() => {
    11. hilog.info(0x0001, 'TAG', "Succeeded in starting Ability successfully.")
    12. }).catch((error: BusinessError) => {
    13. hilog.error(0x0001, 'TAG', `Failed to startAbility.Code: ${error.code}, message is ${error.message}`);
    14. });
    15. }
    16. @Entry
    17. @Component
    18. struct StartAppGalleryDetailAbilityView {
    19. @State message: string = '拉起应用市场详情页';
    20. build() {
    21. Row() {
    22. Column() {
    23. Button(this.message)
    24. .fontSize(24)
    25. .fontWeight(FontWeight.Bold)
    26. .onClick(() => {
    27. const context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
    28. // 按实际需求获取应用的bundleName,例如bundleName: 'com.huawei.hmsapp.books'
    29. const bundleName = 'xxxx';
    30. startAppGalleryDetailAbility(context, bundleName);
    31. })
    32. }
    33. .width('100%')
    34. }
    35. .height('100%')
    36. }
    37. }

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

     
      
    1. <html lang="en">
    2. <head>
    3. <meta charset="UTF-8">
    4. </head>
    5. <body>
    6. <div>
    7. <button type="button" οnclick="openDeepLink()">拉起应用详情页</button>
    8. </div>
    9. </body>
    10. </html>
    11. <script>
    12. function openDeepLink() {
    13. window.open('store://appgallery.huawei.com/app/detail?id=com.xxxx.xxxx')
    14. }
    15. </script>
  • 方式三:App Linking方式

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

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

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

     
      
    1. import type { common } from '@kit.AbilityKit';
    2. import { BusinessError } from '@kit.BasicServicesKit';
    3. import { hilog } from '@kit.PerformanceAnalysisKit';
    4. @Entry
    5. @Component
    6. struct Index {
    7. build() {
    8. Button('start app linking', { type: ButtonType.Capsule, stateEffect: true })
    9. .width('87%')
    10. .height('5%')
    11. .margin({ bottom: '12vp' })
    12. .onClick(() => {
    13. let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
    14. // 需要拼接不同的应用包名,用以打开不同的应用详情页,例如:bundleName: 'com.huawei.hmsapp.books'
    15. let bundleName: string = 'xxxx';
    16. let link: string = 'https://appgallery.huawei.com/app/detail?id=' + bundleName;
    17. // 以App Linking优先的方式在应用市场打开指定包名的应用详情页
    18. context.openLink(link, { appLinkingOnly: false })
    19. .then(() => {
    20. hilog.info(0x0001, 'TAG', 'openlink success.');
    21. })
    22. .catch((error: BusinessError) => {
    23. hilog.error(0x0001, 'TAG', `openlink failed. Code: ${error.code}, message is ${error.message}`);
    24. });
    25. })
    26. }
    27. }

    在网页中打开App Linking链接:

     
      
    1. <html lang="en">
    2. <head>
    3. <meta charset="UTF-8">
    4. <title>跳转示例</title>
    5. </head>
    6. <body>
    7. <a href='https://appgallery.huawei.com/app/detail?id=bundleName'>AppLinking跳转示例</a>
    8. </body>
    9. </html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青瓷代码世界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值