文章目录什么是 DeepLink跟普通跳转有什么区别核心实现就这几行接入到 UI 里错误处理别省跟方式2App Linking对比版本要求写在最后做 HarmonyOS 应用的时候经常有这样一个需求用户在设置页点击给我们评分然后直接跳到华为应用市场的评论页。这需求听起来简单但你翻文档可能翻半天。其实用 DeepLink 实现是最直接的一种方式核心代码不超过 10 行而且不依赖任何额外权限配置。什么是 DeepLink跟普通跳转有什么区别DeepLink深度链接本质上就是一个 URI系统根据 URI 的格式找到能处理它的应用并打开。跟普通的startAbility指定包名跳转不同DeepLink 用的是隐式跳转——你不指定目标的包名和组件名只告诉系统我要打开一个能处理这个 URI 的 Ability。具体跳到哪系统说了算。对于拉起应用市场评论页华为定义了这样的 URI 格式store://appgallery.huawei.com/app/detail?id包名actionwrite-reviewid是你要评论的应用包名actionwrite-review告诉应用市场进入详情页后立刻弹出写评论的入口。核心实现就这几行先看完整代码import{BusinessError}fromkit.BasicServicesKit;import{hilog}fromkit.PerformanceAnalysisKit;importtype{common,Want}fromkit.AbilityKit;constTAGStartAppGalleryDetailAbilityView;// 在你的 Component 中privatecontext:common.UIAbilityContextthis.getUIContext().getHostContext()ascommon.UIAbilityContext;startDetailWithDeepLink(bundleName:string):void{letwant:Want{// 隐式指定 action让系统找到能处理 appdetail 的应用即应用市场action:ohos.want.action.appdetail,// uri 中携带目标包名和 write-review 动作uri:store://appgallery.huawei.com/app/detail?id${bundleName}actionwrite-review};this.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});});}几个关键点说一下action: ohos.want.action.appdetail这是华为定义的隐式 action只有华为应用市场AppGallery注册了对这个 action 的响应。系统会找到它并拉起。uri中的store://协议这是应用市场专属的 URI 协议头配合actionwrite-review参数打开后会直接引导用户写评论而不是只停在应用详情页。context 的获取方式this.getUIContext().getHostContext()是在 ArkUI 组件里获取 UIAbilityContext 的标准方式别用老的getContext(this)了API 22 之后推荐这种写法。接入到 UI 里实际项目中通常是在设置页的某一行点击触发绑定onClick事件就好Row(){Text(五星好评).fontSize(14).fontWeight(FontWeight.Medium)Image($r(app.media.advanceIcon)).width(6.74).height(12.81)}.width(85%).height(48).justifyContent(FlexAlign.SpaceBetween).onClick((){// 替换成你自己的应用包名this.startDetailWithDeepLink(com.example.myapp);});把com.example.myapp换成你实际的包名就完事了。包名可以在项目的AppScope/app.json5里找到bundleName字段。运行效果图错误处理别省.catch里的错误处理不要省掉。常见的失败原因有两种设备上没有安装华为应用市场很少见但在海外 GMS 设备上可能发生传入的 bundleName 不存在应用已下架或包名写错了出错时error.code会告诉你具体原因建议至少打个日志方便排查。跟方式2App Linking对比DeepLink 和 App Linking 都能拉起评论页区别在于对比项DeepLink (store://)App Linking (https://)协议头store://https://调用方法startAbilityopenLink需要网络不需要可能需要国际化支持国内更广泛DeepLink 更直接不经过 URL 路由层在国内场景下首选这种方式。版本要求API Version 20 Release 及以上HarmonyOS 6.0.0 Release SDK 及以上DevEco Studio 6.0.0 Release 及以上写在最后DeepLink 这种方式是三种方案里代码最少、理解成本最低的。如果你的用户群主要在国内华为设备覆盖率高用这个方案没什么问题。拉起评论页只是第一步真正重要的是在合适的时机触发——不要一打开应用就弹选个用户刚完成某个关键操作、心情好的时机转化率会高很多。
HarmonyOS 应用内拉起评论页,DeepLink 方案只要 10 行代码
文章目录什么是 DeepLink跟普通跳转有什么区别核心实现就这几行接入到 UI 里错误处理别省跟方式2App Linking对比版本要求写在最后做 HarmonyOS 应用的时候经常有这样一个需求用户在设置页点击给我们评分然后直接跳到华为应用市场的评论页。这需求听起来简单但你翻文档可能翻半天。其实用 DeepLink 实现是最直接的一种方式核心代码不超过 10 行而且不依赖任何额外权限配置。什么是 DeepLink跟普通跳转有什么区别DeepLink深度链接本质上就是一个 URI系统根据 URI 的格式找到能处理它的应用并打开。跟普通的startAbility指定包名跳转不同DeepLink 用的是隐式跳转——你不指定目标的包名和组件名只告诉系统我要打开一个能处理这个 URI 的 Ability。具体跳到哪系统说了算。对于拉起应用市场评论页华为定义了这样的 URI 格式store://appgallery.huawei.com/app/detail?id包名actionwrite-reviewid是你要评论的应用包名actionwrite-review告诉应用市场进入详情页后立刻弹出写评论的入口。核心实现就这几行先看完整代码import{BusinessError}fromkit.BasicServicesKit;import{hilog}fromkit.PerformanceAnalysisKit;importtype{common,Want}fromkit.AbilityKit;constTAGStartAppGalleryDetailAbilityView;// 在你的 Component 中privatecontext:common.UIAbilityContextthis.getUIContext().getHostContext()ascommon.UIAbilityContext;startDetailWithDeepLink(bundleName:string):void{letwant:Want{// 隐式指定 action让系统找到能处理 appdetail 的应用即应用市场action:ohos.want.action.appdetail,// uri 中携带目标包名和 write-review 动作uri:store://appgallery.huawei.com/app/detail?id${bundleName}actionwrite-review};this.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});});}几个关键点说一下action: ohos.want.action.appdetail这是华为定义的隐式 action只有华为应用市场AppGallery注册了对这个 action 的响应。系统会找到它并拉起。uri中的store://协议这是应用市场专属的 URI 协议头配合actionwrite-review参数打开后会直接引导用户写评论而不是只停在应用详情页。context 的获取方式this.getUIContext().getHostContext()是在 ArkUI 组件里获取 UIAbilityContext 的标准方式别用老的getContext(this)了API 22 之后推荐这种写法。接入到 UI 里实际项目中通常是在设置页的某一行点击触发绑定onClick事件就好Row(){Text(五星好评).fontSize(14).fontWeight(FontWeight.Medium)Image($r(app.media.advanceIcon)).width(6.74).height(12.81)}.width(85%).height(48).justifyContent(FlexAlign.SpaceBetween).onClick((){// 替换成你自己的应用包名this.startDetailWithDeepLink(com.example.myapp);});把com.example.myapp换成你实际的包名就完事了。包名可以在项目的AppScope/app.json5里找到bundleName字段。运行效果图错误处理别省.catch里的错误处理不要省掉。常见的失败原因有两种设备上没有安装华为应用市场很少见但在海外 GMS 设备上可能发生传入的 bundleName 不存在应用已下架或包名写错了出错时error.code会告诉你具体原因建议至少打个日志方便排查。跟方式2App Linking对比DeepLink 和 App Linking 都能拉起评论页区别在于对比项DeepLink (store://)App Linking (https://)协议头store://https://调用方法startAbilityopenLink需要网络不需要可能需要国际化支持国内更广泛DeepLink 更直接不经过 URL 路由层在国内场景下首选这种方式。版本要求API Version 20 Release 及以上HarmonyOS 6.0.0 Release SDK 及以上DevEco Studio 6.0.0 Release 及以上写在最后DeepLink 这种方式是三种方案里代码最少、理解成本最低的。如果你的用户群主要在国内华为设备覆盖率高用这个方案没什么问题。拉起评论页只是第一步真正重要的是在合适的时机触发——不要一打开应用就弹选个用户刚完成某个关键操作、心情好的时机转化率会高很多。