智能客服
你问我答,随时在线为你解决问题

























使用App Linking进行跳转时,系统会根据接口传入的uri信息(HTTPS链接)将用户引导至目标应用中的特定内容,无论应用是否已安装,用户都可以访问到链接对应的内容,跳转体验相比Deep Linking方式更加顺畅。
例如:当开发者使用App Linking接入“扫码直达”服务后,用户可通过控制中心扫一扫等系统级扫码入口,扫描应用的二维码、条形码并跳转到开发者应用对应服务页,实现一步直达的体验。
该能力目前仅适用于API 12及以上版本的HarmonyOS应用,如果您开发的是元服务,请参考使用App Linking实现元服务跳转。
若要实现App Linking跳转体验,需目标方和拉起方的不同角色相互配合,共同完成。
各个角色的分工如下。
序号 | ⾓⾊ | 职责 |
|---|---|---|
1 | 云端开发 | |
2 | 云端开发 | |
3 | 云端开发 | |
4 | 客户端开发 | |
5 | 客户端开发 | |
6 | 前端开发 | 开发链接对应的H5网页,应用未安装时呈现网页版内容。 说明 本指南侧重于HarmonyOS应用相关的开发指导,网页的开发不在本指导范围内,开发者请依据自己的业务需求自行实现。 |
序号 | ⾓⾊ | 职责 |
|---|---|---|
1 | 客户端开发 |
请先参考“应用开发准备”完成基本准备工作,再继续进行以下开发活动。



在开发者的网站域名服务器上做如下配置。后续当您配置该网站域名时,系统会通过此文件确认哪些应用才是合法归属于此域名的,使链接更加安全可靠。
{
"applinking": {
"apps": [
{
"appIdentifier": "1234567"
}
]
}
} https://domain.name/.well-known/applinking.json
例如:开发者的服务器域名为www.example.com,则必须将applinking.json文件放在如下位置:
https://www.example.com/.well-known/applinking.json
基于HarmonyOS应用链接能力,需要为HarmonyOS应用创建关联的网址域名。如果用户已安装HarmonyOS应用,则用户点击域名下网址链接后,系统会默认打开该HarmonyOS应用内的相关页面。

不可以在域名后面添加/,即不支持“https://www.example.com/”形式。

应用链接发布完成后,如果距离上次更新超过24小时,系统会去域名服务器上重新获取配置文件进行交集校验。
例如:您在4月7日17:21创建了应用链接,系统会在4月8日17:30去域名服务器上重新获取配置文件,然后进行交集校验,更新发布状态。



在应用的module.json5文件中进行如下配置,以声明应用关联的域名地址,并开启域名校验开关。
skills标签下默认包含一个skill对象,用于标识应用入口。应用跳转链接不能在该skill对象中配置,需要创建独立的skill对象。
如果存在多个跳转场景,需要在skills标签下创建不同的skill对象,否则会导致配置无法生效。
例如,声明应用关联的域名是www.example.com,则需进行如下配置。
{
"module": {
"abilities": [
{
"name": "EntryAbility",
"srcEntry": "./ets/entryability/EntryAbility.ts",
"icon": "$media:icon",
"label": "$string:EntryAbility_label",
// 请将exported配置为true;如果exported为false,仅具有权限的系统应用能够拉起该应用,否则无法拉起应用
"exported": true,
"startWindowIcon": "$media:icon",
"startWindowBackground": "$color:start_window_background",
"skills": [
{
"entities": [
"entity.system.home"
],
"actions": [
"action.system.home"
]
},
{
"entities": [
// entities必须包含"entity.system.browsable"
"entity.system.browsable"
],
"actions": [
// actions必须包含"ohos.want.action.viewData"
"ohos.want.action.viewData"
],
"uris": [
{
// scheme须配置为https
"scheme": "https",
// host须配置为关联的域名
"host": "www.example.com",
// path可选,表示域名服务器上的目录或文件路径,例如www.example.com/path1中的path1
// 如果应用只能处理部分特定的path,则此处应该配置应用所支持的path,避免出现应用不能处理的path链接也被引流到应用中的问题
"path": "path1"
}
],
// domainVerify须设置为true
"domainVerify": true
}
// 若有其他跳转能力,如推送消息跳转、NFC跳转,可新增一个skill对象,防止与App Linking业务冲突
]
}
]
}
} 在应用的Ability(如EntryAbility)的onCreate()或者onNewWant()生命周期回调中添加如下代码,以处理传入的链接。
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { url } from '@kit.ArkTS';
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
// 从want中获取传入的链接信息。
// 如传入的url为:https://www.example.com/programs?action=showall
let uri = want?.uri
if (uri) {
// 从链接中解析query参数,拿到参数后,开发者可根据自己的业务需求进行后续的处理。
let urlObject = url.URL.parseURL(want?.uri);
let action = urlObject.params.get('action')
// 例如,当action为showall时,展示所有的节目。
if (action === "showall"){
//...
}
//...
}
}
} 若要根据链接参数启动UIAbility的指定页面组件,请参考“启动UIAbility的指定页面”。
支持App Linking的应用可以通过如下方式被拉起:
拉起方应用通过UIAbilityContext.openLink()接口,传入目标应用的链接,拉起目标应用。
openLink接口提供了两种拉起目标应用的方式,开发者可根据业务需求进行选择。
将appLinkingOnly参数设为true,若有App Linking匹配的应用,则直接打开目标应用。若无App Linking匹配的应用,则抛异常给开发者进行处理。
适用于无法打开目标应用时,开发者做了相应的异常处理。例如:拉起方应用集成了ArkWeb,当目标应用不存在时,可通过ArkWeb打开链接。
将appLinkingOnly参数设为false或者不传,若有App Linking匹配的应用,则直接打开目标应用。若无App Linking匹配的应用,则尝试以浏览器打开链接的方式打开应用。
适用于无法打开目标应用时,开发者未做任何处理。此时目标应用不存在时,会通过系统浏览器打开链接。
本文为了方便验证App Linking的配置是否正确,选择方式一,示例如下。
import { common } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
@Entry
@Component
struct Index {
build() {
Button('start link', { type: ButtonType.Capsule, stateEffect: true })
.width('87%')
.height('5%')
.margin({ bottom: '12vp' })
.onClick(() => {
let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
let link: string = "https://www.example.com/programs?action=showall";
// 仅以App Linking的方式打开应用
context.openLink(link, { appLinkingOnly: true })
.then(() => {
console.info('openlink success.');
})
.catch((error: BusinessError) => {
console.error(`openlink failed. error:${JSON.stringify(error)}`);
});
})
}
} 在拉起方应用中执行上述代码,如果拉起方应用成功拉起目标应用,则成功配置App Linking。
检查"host"字段中应用所对应的域名是否设置正确。
按照以下步骤排查:
如需查看应用域名验证结果,请在Deveco Studio中打开终端,并使用以下命令查询验证结果:
hdc shell hidumper -s AppDomainVerifyManager
运行hidumper命令后,即可在控制台上看到success消息。
BundleName:
appIdentifier:123456789
domain verify status:
https://www.example.com:success 设备首次启动后,系统将在20分钟内尝试对预装应用进行域名校验,若在20分钟内设备一直无法访问网络,则可能导致预装应用域名校验失败。若出现此类问题,请重启手机,或者等待24小时后重试。系统将在下次开机或24小时后对预装应用重新尝试进行域名校验。
CDN缓存时间为10分钟,请您耐心等待一段时间后再次访问。
应用和域名的关系是多对多的关系:一个应用可以关联多个不同的域名,同样地,一个域名也可以关联多个不同的应用。
开发者可以通过配置applinking.json以关联多个应用。如果每个应用的module.json5的uris字段配置的都是一样的,那么系统将弹出列表框供用户选择要拉起的目标应用。 为了更好的体验,开发者也可以通过链接的path去区分拉起的目标应用,如链接https://www.example.com/path1拉起目标应用1,链接https://www.example.com/path2拉起目标应用2。
智能客服
你问我答,随时在线为你解决问题
合作咨询
我们的专家服务团队将竭诚为您提供专业的合作咨询服务
解决方案
精准高效的一站式服务支持,助力开发者商业成功
