查看: 100|回复: 3

HarmonyOS App Linking配置实战:域名校验与延迟链接

[复制链接]
发表于 2 小时前 | 显示全部楼层 |阅读模式
在HarmonyOS应用开发中,应用间跳转是常见需求。Deep Linking使用自定义scheme,存在scheme冲突、无应用时无降级等问题。App Linking以HTTPS域名替代自定义scheme,通过域名校验保障安全,并智能路由:已安装应用直接拉起,未安装时跳应用市场或浏览器。本文从原理到实战,详细讲解App Linking在HarmonyOS中的配置、验证和常见踩坑。

一、实现原理
App Linking核心:使用HTTPS链接(如https://www.example.com/goods/123)代替自定义scheme;通过域名校验确保只有域名所有者能声明链接归属。用户点击链接后,系统检查域名是否绑定应用:已安装则域名校验通过后直接拉起应用并跳转指定页面;未安装且配置了直达市场则跳应用市场,安装后首次打开直达内容;未安装且未配直达市场但有Web页则浏览器打开引导安装。

约束限制:支持Phone、Tablet、PC/2in1设备;API 19(5.1.1)起支持TV;只适用于HarmonyOS应用(API 12+),元服务走元服务链接;必须手动签名,自动签名无效;需开通免费App Linking服务。

二、配置三步走
第一步:服务器配置。在域名根目录下创建.well-known/applinking.json文件,内容包含applinking字段,apps数组里每个对象包含appIdentifier(AGC项目设置中的应用ID)和可选index(当多应用关联时,index值最大的优先拉起)。文件路径必须为https://你的域名/.well-known/applinking.json。配置后用浏览器访问确保能正常返回JSON。

第二步:AGC配置。登录AppGallery Connect进入项目,在“增长 > App Linking > 应用链接”中创建,输入第一步的域名。AGC会拉取JSON文件校验appIdentifier是否匹配项目。域名不能带斜杠,如https://www.example.com而不是https://www.example.com/。发布后系统每24小时重新校验一次。发布失败需检查JSON可访问性及appIdentifier正确性。

第三步:客户端配置。在工程的module.json5中配置域名关联。关键点:scheme强制为https;host为域名;path可选但建议使用pathStartWith或pathRegex代替精确匹配,否则路径不匹配时链接不会被应用拦截;必须添加domainVerify: true。示例uris配置:
  1. "uris": [{
  2.   "scheme": "https",
  3.   "host": "www.example.com",
  4.   "pathStartWith": "/goods/"
  5. }]
复制代码

三、处理传入链接
在Ability的onCreate和onNewWant中解析链接参数。两个回调都要处理。示例中通过url.URL.parseURL解析链接,提取action和goodsId等参数存入AppStorage。冷启动(进程不存在)走onCreate,热启动(应用已在后台)走onNewWant。

四、验证配置是否生效
四种方式:1. 命令行查询:hdc shell hidumper -s AppDomainVerifyManager,看到domain verify status为success即成功;若client-error则检查appIdentifier,http_unknown则检查设备联网。2. openLink代码验证:使用context.openLink(link, {appLinkingOnly: true}),能拉起则App Linking配置成功。3. 备忘录点击链接模拟用户外部点击。4. 系统扫码入口(如果接入了扫码直达服务)。

五、社交分享与延迟链接
App Linking核心场景之一:社交分享。用户生成链接分享到社交平台,好友点击时智能路由。若好友未安装应用且配置了直达市场,点击链接跳到应用市场,安装后首次打开通过延迟链接恢复原始内容。实现分享需接入系统Share Kit,使用systemShare.SharedData设置utd为UniformDataType.HYPERLINK,内容为完整HTTPS链接。

延迟链接:用户在未安装时点击链接,安装后首次打开应用能拿到原始参数。在首页aboutToAppear中调用deferredLink.popDeferredLink(),若返回非空字符串则解析参数并跳转详情页。注意:仅当“未安装→安装→首次打开”时才有数据,正常启动返回空。

六、常见踩坑与解决
坑1:自动签名导致域名校验失败。必须手动签名,因为自动签名为调试证书,与AGC上正式应用信息不匹配。编译正式包时也需确认签名配置正确。
坑2:域名校验非即时。安装应用后需等待至少20秒才能完成校验;若设备首次启动无网络,出厂预装应用需20分钟内重启设备。首次校验失败后系统每24小时重试一次。
坑3:path精确匹配导致链接拦截失败。建议用pathStartWith匹配前缀或不设path字段。
坑4:popDeferredLink获取不到数据。只在“未安装→安装→首次打开”流程有效,正常启动返回空,无需每次调用。
坑5:Share Kit分享面板不弹。检查module.json5中是否配置了Share Kit权限,content字段必须是合法完整的HTTPS链接,utd类型要与内容匹配。
坑6:多个skill对象互相影响。每个跳转能力(App Linking、Deep Linking、推送消息跳转等)应建立独立skill,避免混淆导致配置失效或跳转异常。

七、适用场景对比
Deep Linking适合公司内部应用间跳转、不需要处理未安装场景、快速验证原型、对接应用由自己团队维护。App Linking适合对外分享链接(社交分享、用户邀请、扫码直达)、需安全域名校验、需降级体验的对外场景。两者不冲突,可同时存在。

总结
App Linking三大价值:安全(域名校验)、智能路由(按设备状态自动选择路径)、延迟链接(安装后找回原始内容)。配置流程:服务器放JSON文件→AGC创建链接→客户端module.json5配domainVerify。验证方式:命令行 > openLink代码 > 点击链接。外部链接必用App Linking,内部跳转可继续使用Deep Linking。
回复

使用道具 举报

发表于 2 小时前 | 显示全部楼层

Re: HarmonyOS App Linking配置实战:域名校验与延迟链接

感谢鸿蒙专家的详细分享!这一篇从原理到实践讲得很透彻,特别是域名校验和延迟链接的流程梳理,对正在做对外分享场景的开发者来说非常实用。 我最近刚好在配App Linking,也踩了path精确匹配的坑,后来改成pathStartWith才生效。另外想确认一下,如果同一个域名下有多个应用(比如主应用和轻量版),AGC上创建App Linking时是怎么区分哪个应用被拉起的?是不是靠applinking.json里的index值,还是有其他优先级规则?
回复 支持 反对

使用道具 举报

发表于 2 小时前 | 显示全部楼层

Re: HarmonyOS App Linking配置实战:域名校验与延迟链接

感谢楼主这么详细的分享,这篇实战指南非常及时!最近正好在对接App Linking,之前一直被自动签名和path精确匹配坑到,看到你列出的踩坑点终于明白问题在哪了。尤其是domainVerify: true手动签名这块,之前用自动签名调试一直报client-error,换手动签名就好了。 另外关于延迟链接的部分,之前一直以为每次都能pop到数据,看了你的解释才知道只有未安装→安装→首次打开才有,省得我白费力气在每个页面都调了。 想请教一下,如果同时配置多个域名(比如有国际站和国内站),在module.json5里是加多个uris对象就行吗?还有popDeferredLink是否需要在每个会从外部链接进入的Ability都调一次,还是只在首页处理?
回复 支持 反对

使用道具 举报

发表于 2 小时前 | 显示全部楼层

Re: HarmonyOS App Linking配置实战:域名校验与延迟链接

非常详细的实战总结!感谢楼主把配置流程和踩坑点都梳理得这么清晰。尤其是“path精确匹配建议用pathStartWith”和“自动签名导致校验失败”这两点,之前确实让我卡了很久。想请教一下,延迟链接部分提到的`popDeferredLink()`,如果用户是通过浏览器点击链接后立即安装,但安装完成后第一次打开应用时网络延迟较高(比如刚连接WiFi还没获得IP),会不会导致拿到空字符串?有没有推荐的兜底逻辑来处理这种边界情况?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-7-24 20:47 , Processed in 0.030417 second(s), 18 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部