HarmonyOS的连接艺术之五: 使用 App Linking,安全可靠的一键直达
本文旨在深入探讨华为鸿蒙HarmonyOS Next系统(截止目前API12)的技术细节,基于实际开发实践进行总结。
主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。
本文为原创内容,任何形式的转载必须注明出处及原作者。
App Linking 是一种基于 HTTPS 链接的应用间跳转方式,它通过域名校验机制,可以安全可靠地打开目标应用,无论该应用是否已安装。这种方式特别适合需要安全性和用户体验的应用场景,例如扫码直达、社交分享、沉默唤醒和广告引流等。
App Linking 简介
App Linking 是 HarmonyOS 特有的应用间跳转方式,它基于 Deep Linking 技术发展而来,但增加了域名校验环节。通过域名校验,App Linking 可以帮助用户消除歧义,识别合法归属于域名的应用,使链接更加安全可靠。
App Linking 的优势
- 安全性高:通过域名校验机制,可以有效防止恶意应用仿冒。
- 用户体验好:无论目标应用是否已安装,用户点击链接都可以正常访问,实现一键直达。
- 适用范围广:适用于扫码直达、社交分享、沉默唤醒、广告引流等多种场景。
App Linking 的实现原理
App Linking 在 Deep Linking 基础上增加了域名校验环节,具体原理如下:
- 开发者配置 App Linking 服务:开发者需要在 AGC 控制台开通 App Linking 服务,并关联应用和网址域名。
- 开发者配置网址域名:开发者需要在服务器上配置
applinking.json
文件,声明应用的 APP ID。 - 系统进行域名校验:当用户点击 App Linking 链接时,系统会进行域名校验,确保链接指向合法的应用。
- 打开目标应用:如果域名校验成功,系统会打开目标应用;如果失败,则跳转到浏览器打开网页。
App Linking 的接入步骤
1. 在 AGC 控制台开通 App Linking 服务
- 登录 AppGallery Connect,进入“增长 > App Linking”页面。
- 点击“立即开通”,并设置数据处理位置和默认数据处理位置。
- 在“项目设置 > 常规”页面,查看应用的 APP ID。
2. 在开发者网站上关联应用 - 在开发者网站的域名服务器上创建
applinking.json
文件,并配置应用的 APP ID。 - 将
applinking.json
文件放在服务器根目录下的.well-known
目录下。
3. 配置网址域名 - 在 AGC 控制台,选择“增长 > App Linking > 应用链接(API>=12 适用)”页面。
- 点击“创建”,填写应用的网址域名,并开启域名校验开关。
- 点击“发布”,等待系统进行域名校验。
4. 处理传入的链接
在目标应用的 Ability 中,需要处理传入的链接,并根据链接中的参数进行相应的操作。例如:
import { AbilityConstant, UIAbility, Want } from '@ohos.app.ability.common';
import { url } from '@ohos.arkts';
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
const uri = want?.uri;
if (uri) {
const urlObject = url.URL.parseURL(want.uri);
const action = urlObject.params.get('action');
if (action === "showall") {
// 跳转到应用内的“所有节目”页面
}
}
}
}
举(N)个栗子
示例 1:App Linking 接入示例
import { common } from '@ohos.app.ability.common';
export default class EntryAbility extends common.UIAbility {
onWindowStageCreate(windowStage: common.WindowStage) {
const context = this.getContext(this) as common.UIAbilityContext;
const link: string = "https://www.example.com/programs?action=showall";
const options: common.OpenLinkOptions = {
appLinkingOnly: true // 仅使用 App Linking 跳转
};
context.openLink(link, options);
}
}
示例 2:App Linking 跳转示例
import { common } from '@ohos.app.ability.common';
import { url } from '@ohos.arkts';
export default class EntryAbility extends common.UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
const uri = want?.uri;
if (uri) {
const urlObject = url.URL.parseURL(want.uri);
const action = urlObject.params.get('action');
if (action === "showall") {
// 跳转到应用内的“所有节目”页面
}
}
}
}
总结:
使用 App Linking 实现应用间跳转是一种安全可靠的方式,它能够为用户提供一键直达的体验。我们需要按照步骤配置 App Linking 服务,并在目标应用中处理传入的链接,才能实现 App Linking 功能。