给鸿蒙 App 增加跳转应用市场评价的能力 —— store_redirect 的鸿蒙使用指南

本文配套仓库:https://atomgit.com/oh-flutter/store_redirect(TAG:2.0.4-ohos-1.0.0-beta.1,分支:feat/ohos_store_redirect_2.0.4),文中示例代码位于仓库 example/ 目录。

引导用户给自己的应用评分,是提升商店排名与口碑最直接的手段。鸿蒙应用同样需要这个能力:把用户从应用内一步带到华为 AppGallery 的应用详情页,让他顺手打个分、写条评论。本文介绍如何使用鸿蒙化适配后的 Flutter 三方库 store_redirect,用一行代码在鸿蒙 App 内实现"跳转应用市场评价",并附上模拟器与真机的完整实测记录。

一、最终运行效果

应用启动后点击 Redirect App 按钮,直接拉起华为 AppGallery:

验证点结果
点击 Redirect App 按钮,隐式 Want 拉起 AppGallery通过
Flutter 页面在鸿蒙设备/模拟器上正常渲染通过
hdc shell aa dump -a 确认前台为 com.huawei.hmsapp.appgallery通过

在这里插入图片描述

图一:demo 应用在 HUAWEI nova 12 Ultra 真机启动(HarmonyOS 6.1.0 / API 24)

在这里插入图片描述

图二:点击按钮后成功拉起华为 AppGallery

检查要点

  1. 跳转结果可用 hdc shell aa dump -a 取证,确认前台应用为 com.huawei.hmsapp.appgallery
  2. 演示工程未上架 AppGallery,拉起后能否展示具体详情页由商店服务端决定,跳转机制本身不受影响(详见 FAQ Q1);
  3. 完整实测过程见"六、运行与验证"。

二、store_redirect 是什么

store_redirect 原库(pub.dev 2.0.4,fork 自 launch_review)是一个跳转到应用商店详情页的 Flutter 插件,支持 Google Play Store 与 Apple App Store。鸿蒙适配版在其基础上新增了 OpenHarmony / HarmonyOS 平台支持:跳转到华为 AppGallery 的应用详情页,并新增可选参数 ohosAppId

几个对使用者友好的特点:

  1. 零权限:不需要在 module.json5 中申请任何权限;
  2. 自动定位:鸿蒙上不传参数时,自动取当前应用的 Bundle Name 查询详情页——"给自己应用求评分"的场景连参数都不用填;
  3. 跨平台一套代码:Android、iOS、鸿蒙三个平台共用同一个接口,运行在哪端就取哪端的参数。

接口说明:

名称描述类型参数类型返回值必填鸿蒙平台支持
StoreRedirect.redirect跳转到应用商店的应用详情页methodandroidAppId: String?, iOSAppId: String?, ohosAppId: String?Future<void>

三、环境准备

本文所有实测均在以下环境完成:

版本说明
Flutter(ohos 版)3.44.9+ohos-0.0.1-canary1主验证环境
Flutter(ohos 版)3.41.10-ohos-1.0.13.41 系 stable,零改动复验通过
DevEco Studio26.0.0(26.0.0.821)
编译 SDK26.0.0(26)
模拟器API 26验证一 / 验证二
真机HUAWEI nova 12 Ultra(ADA-AL10)HarmonyOS 6.1.0.135 / API 24,验证三

两点提醒:

  1. 编译鸿蒙目标需要使用 ohos 版 Flutter SDK 与 DevEco Studio 配合,普通 Flutter SDK 无法编译 ohos 产物;
  2. 若在真机上安装应用报"此应用暂不支持在当前设备安装",是宿主工程的 compatibleSdkVersion 高于设备 API 导致的,与插件无关,处理方式见 FAQ Q3。

四、引入依赖

进入工程目录,在 pubspec.yaml 中添加 git 依赖:

dependencies:
  store_redirect:
    git:
      url: https://atomgit.com/oh-flutter/store_redirect.git
      # ref: 根据下方表格选择不同框架适配的 TAG 版本
      ref: 2.0.4-ohos-1.0.0-beta.1

执行命令拉取依赖:

flutter pub get

TAG 命名规则:原库版本-ohos-版本号-beta.x

Flutter 框架版本TAG 名称分支名
3.442.0.4-ohos-1.0.0-beta.1feat/ohos_store_redirect_2.0.4

说明:该 TAG 已在 3.41 系 stable(3.41.10-ohos-1.0.1)模拟器上以零改动复验通过,3.41 用户可放心使用。

五、代码接入

5.1 导入库

import 'package:store_redirect/store_redirect.dart';

5.2 跳转到当前应用(推荐)

StoreRedirect.redirect();

在鸿蒙设备上,未传 ohosAppId 时插件会通过 bundleManager 自动读取当前应用的 Bundle Name 去查询 AppGallery 详情页。"给自己的应用求评分"场景一行即可,无需任何配置。

5.3 指定 AppGallery 应用 ID

如果需要跳转到指定应用的详情页,传入 ohosAppId

StoreRedirect.redirect(ohosAppId: "C123456789");

ohosAppId 支持两种写法,任选其一:

  1. 应用包名(Bundle Name),如 com.example.app
  2. AppGallery Connect 中应用的 APP ID(C 开头的数字串,如 C123456789),在 AGC 控制台"我的项目 → 应用信息"页可查。

5.4 跨平台一套代码

三个参数按平台取用,运行在哪端就取哪端,其余自动忽略:

StoreRedirect.redirect(
  androidAppId: "com.iyaffle.rangoli",   // Android:Google Play 包名
  iOSAppId: "585027354",                 // iOS:App Store 数字 ID
  ohosAppId: "C123456789",               // 鸿蒙:AppGallery 应用 ID
);

5.5 实战:给应用加一个"去评分"入口

实际业务中常见的做法是在"设置 → 关于"页放一个常驻入口,或在用户完成关键动作后弹出引导。下面是一个可直接使用的"去评分"按钮:

import 'package:flutter/material.dart';
import 'package:store_redirect/store_redirect.dart';

class RateButton extends StatelessWidget {
  const RateButton({super.key});

  
  Widget build(BuildContext context) {
    return ElevatedButton.icon(
      icon: const Icon(Icons.star),
      label: const Text('去评分'),
      onPressed: () {
        // 鸿蒙上自动定位当前应用,无需传参
        StoreRedirect.redirect();
      },
    );
  }
}

触发时机的产品建议:放在用户完成一次完整体验之后(如完成首单、连续活跃若干天),或作为"关于"页的常驻入口;避免应用首次启动就弹跳转,体验较差。

六、运行与验证

以下为 demo 工程的三轮实测记录,demo 的 Bundle Name 为 com.example.store_redirect_example

6.1 验证一:3.44 canary 模拟器(API 26)

运行 demo:

cd example
flutter run

应用启动后点击 Redirect App 按钮:

在这里插入图片描述

图三:模拟器启动 demo,Flutter 页面正常渲染

在这里插入图片描述

图四:点击按钮后拉起 AppGallery(图中可见 AppGallery 的 ◀ demo 返回标记,说明由 demo 跳转而来)

实测结论:

验证点结果
应用启动,Flutter 页面正常渲染通过
点击 Redirect App 按钮,隐式 Want 拉起 AppGallery通过
hdc shell aa dump -a 确认前台为 com.huawei.hmsapp.appgallery通过

6.2 验证二:3.41 stable 模拟器复验

同一份 demo 代码在 3.41.10-ohos-1.0.1 模拟器上零改动复验:

在这里插入图片描述

图五:3.41 stable 模拟器复验,跳转 AppGallery 成功

适配层只依赖 @ohos/flutter_ohos 的标准插件接口,未使用任何 canary 专属特性,因此 3.41 与 3.44 两个 Flutter 版本均可直接使用。

6.3 验证三:nova 12 Ultra 真机实测(API 24)

设备项
机型HUAWEI nova 12 Ultra(ADA-AL10)
系统版本HarmonyOS 6.1.0.135(SP8C00E120R2P6)
API 版本24
分辨率1224 × 2776

安装与启动:

# 构建 hap 后安装(真机安装对 SDK 版本有要求,见 FAQ Q3)
hdc install entry-default-signed.hap

# 启动 demo
hdc shell aa start -b com.example.store_redirect_example -a EntryAbility

# 模拟点击屏幕上的 Redirect App 按钮(坐标按实际设备调整)
hdc shell uitest uiInput click 611 1556

实测现象与图一、图二一致:Flutter 页面正常渲染,点击按钮后 AppGallery 被成功拉起,aa dump -a 确认前台应用为 com.huawei.hmsapp.appgallery

三轮环境(3.44 canary 模拟器 / 3.41 stable 模拟器 / 真机 API 24)全部验证通过。

七、工作原理

整个调用链路如下:

Dart: StoreRedirect.redirect()
  → MethodChannel('store_redirect')
    → ArkTS: StoreRedirectPlugin.onMethodCall
      → 组装 Want 并 startAbility
        → 系统拉起 AppGallery 详情页

鸿蒙侧插件实现(ArkTS)核心只有两段。

一段是构造跳转 Want——store://appgallery.huawei.com 是 AppGallery 的官方 scheme,ohos.want.action.appdetail 是详情页 action:

const want: Want = {
  action: 'ohos.want.action.appdetail',
  uri: `store://appgallery.huawei.com/app/detail?id=${appId}`
};
context.startAbility(want).then(() => {
  result.success(null);
}).catch((error: BusinessError) => {
  result.error('ERROR', `Failed to open AppGallery for "${appId}": ${error.message}`, null);
});

另一段是未传 ohosAppId 时的兜底——通过 bundleManager 读取自身 Bundle Name 作为查询 ID:

bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION)
  .then((bundleInfo: bundleManager.BundleInfo) => {
    this.openAppGalleryDetail(bundleInfo.name, result);
  })

startAbility 失败时(例如设备上没有 AppGallery),错误会通过 MethodChannel 回传到 Dart 侧,业务代码可以据此做降级处理,比如引导用户打开网页版商店。

八、常见问题

Q1:应用没有上架 AppGallery,跳转会怎样?

插件负责把 AppGallery 拉起,详情页能否展示具体应用由商店服务端决定。未上架的应用不会出现在详情页,建议先在 AppGallery Connect 完成上架(至少创建应用)再引导评分。跳转机制本身工作正常。

Q2:ohosAppId 到底填什么?去哪里获取?

两种都行:应用包名(Bundle Name,如 com.example.app),或 AppGallery Connect 中该应用的 APP ID(C 开头数字串)。路径:AGC 控制台 → 我的项目 → 选择应用 → 应用信息。未传该参数时自动使用当前应用包名。

Q3:真机安装 demo 时提示"此应用暂不支持在当前设备安装"?

这是宿主工程的 compatibleSdkVersion 高于真机 API 版本导致的安装校验失败,与插件无关。将工程的 compatibleSdkVersion 调整为不高于真机 API 的版本(如 6.1.0(23),注意保留带括号的旧格式)即可。本文配套仓库的 example 已用此配置在 nova 12 Ultra(API 24)上安装实测通过。

Q4:iOS 模拟器上点击没反应?

iOS 模拟器不支持跳转 App Store,需在真机上测试,这是原库的已知限制,鸿蒙侧不受影响。

Q5:能跳转到其他鸿蒙应用商店吗?

当前适配内置的是 AppGallery 详情页 action(ohos.want.action.appdetail)。其他商店若提供类似的 Want 或 scheme,可参考"七、工作原理"中的 Want 构造方式自行扩展插件,欢迎提 PR 共建。

Q6:什么时机引导评分比较合适?

推荐在用户完成一次完整价值体验之后(完成首单、达到某个里程碑、连续活跃若干天),或"设置 → 关于"页常驻入口;避免首启即弹,转化率低且伤体验。

九、结语

回顾一下:在 pubspec.yaml 中以 git TAG 引入 store_redirect,调用 StoreRedirect.redirect() 一行代码,即可在鸿蒙 App 内把用户带到 AppGallery 详情页完成评分引导;同一段代码在 Android 与 iOS 上也各自生效。插件零权限、自动定位当前应用,已在 3.44 canary、3.41 stable 与真机三轮环境实测通过。

使用中发现任何问题,欢迎到配套仓库提 Issue,也欢迎发 PR 共建。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐