关于App Linking的介绍可参考其官方文档:App Linking Kit(应用链接服务)
一、开发准备
1、准备文件
首先,你需要准备一个applinking.json文件,内容如下:
{
"applinking": {
"apps": [
{
"appIdentifier": "你的应用appid"
}
]
}
}
文件名称为applinking.json,将该文件保存到服务器以下目录:
注意这里的目录.well-known,前面有个.
布置完成后,将此地址在浏览器打开,能够下载applinking.json文件内容,即可!
2、AppGallery Connect 配置
想要使用App Linking的能力,需要项目支持,首先登录AppGallery Connect,开通相关能力。
2.1、登录后,点击导航中的“开发与服务”,选择需要开通的项目:

2.2、左侧导航“增长 -> App Linking -> 应用链接”

2.3、首次开通,进入如下页面

点击“立即开通”即可!
2.4、非首次开通,进入如下页面

点击“创建”,即可新增链接地址;
2.5、输入App Linking地址

名称无影响,域名必须格式正确,且末尾不能有“/”,点击发布即可。
2.6、发布后会去效验域名,等待即可

此时的状态为“发布中”,成功后会变为“成功”,失败则为“失败”,此时可点击查看原因

这里我填入的域名是不存在的,所以失败!
以上完成后,接着在开发工程中配置相关信息。
3、开发工程配置
打开 DevEco Studio,在你的products包内,找到src -> main -> module.json5文件,这里以 https://www.example.com为例
{
"module": {
"abilities": [
{
"name": "EntryAbility",
"srcEntry": "./ets/entryability/EntryAbility.ets",
"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": [
// 从5.1.1(19)开始,须配置为"ohos.want.action.home"。对于5.1.0(18)及之前版本,请配置为"action.system.home"。
"ohos.want.action.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业务冲突
]
}
]
}
}
配置完成后,即可在其他应用中唤起你的app了。
4、功能验证
以上配置完成后,可将域名 https://www.example.com 或https://www.example.com/action?param1=value1生成一个二维码,使用手机自带浏览器的扫码功能,扫码后则自动跳转到app内。
或者参考官方文档内通过App Linking 拉起指定应用章节中示例代码,使用UIAbilityContext.openLink()接口,直接打开配置的域名进行跳转。
5、接收跳转参数
拉起应用并不是我们的最终目的,在拉起应用后,需要根据传入的参数,跳转到指定的页面。
在应用的Ability(如EntryAbility)的onCreate()或者onNewWant()生命周期回调中添加如下代码,以处理传入的链接。
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
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参数,拿到参数后,开发者可根据自己的业务需求进行后续的处理。
try {
let urlObject = url.URL.parseURL(want?.uri);
let action = urlObject.params.get('action');
// 例如,当action为showall时,展示所有的节目。
if (action === "showall"){
// ...
}
// ...
} catch (error) {
hilog.error(0x0000, 'testTag', `Failed to parse url.`);
}
}
}
}
到此,即成功接入了App Linking,并完成了根据不同参数,跳转到不同页面详情的业务需求。