简介

使用App Linking进行跳转时,系统会根据接口传入的uri信息(HTTPS链接)将用户引导至目标应用中的特定内容,无论应用是否已安装,用户都可以访问到链接对应的内容,跳转体验相比Deep Linking方式更加顺畅。


实现原理

  • App Linking在DeepLinking的基础上增加了域名校验环节,通过域名校验,可帮助用户消除歧义,识别合法归属于域名的应用,使链接更加安全可靠。

  • App Linking要求对于同一HTTPS网址,有应用和网页两种内容的呈现方式。当应用安装时则优先打开应用去呈现内容;当应用未安装时,则打开浏览器呈现Web版的内容。

目标方应用开发指导

1、登录AppGallery Connect,点击“我的项目”。

2、选择「开发与服务」

3、在左侧导航栏中选择“增长->App Linking”,进入App Linking页面,点击“立即开通”。

4、如果项目此时未设置数据处理位置,在提示框内启用数据处理位置和设置默认数据处理位置,点击“确定”

5、进入“项目设置>常规”页面,选择创建的HarmonyOS应用,查看应用的APP ID,后续开发需要使用该ID。


 

在开发者网站上关联应用

在开发者的网站域名服务器上做如下配置。后续当您配置该网站域名时,系统会通过此文件确认哪些应用才是合法归属于此域名的,使链接更加安全可靠。

1、创建域名配置文件applinking.json,内容如下:
 

{"applinking": {"apps": [{"appIdentifier": "1234567"}]}
}

说明:

  • appIdentifier填写在AGC控制台开通App Linking服务的步骤5展示的APP ID
  • 同一个网站域名可以关联多个应用,只需要在“apps”列表里放置多个“appIdentifier”元素即可,其中每个“appIdentifier”元素对应每个应用

2、将配置文件放在域名服务器固定的目录下:

https://domain.name/.well-known/applinking.json

例如:开发者的服务器域名为www.example.com,则必须将applinking.json文件放在如下位置:

https://www.example.com/.well-known/applinking.json


在AGC控制台关联网址域名

1、在左侧导航栏中选择”增长->App Linking",选择“应用链接(API>=12适用)”页签,点击“创建”

说明:

  • Harmony OS应用开发者仅需关注“应用链接(API>=12)”页签,其他页签为元服务或其他系统适用的配置,无需关注
  • 如果界面未展示“应用链接 (API>=12)”页签,请在右侧的“自定义配置”中勾选

2、填写在开发者网站上关联应用的网址域名,例如:https://www.baidu.com。必须输入精确的域名,不可输入包含特殊字符的模糊网址。

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



3、设置完成后点击“发布”,AGC会对该网站域名的配置文件所包含的应用与本项目内的应用列表进行交集校验。

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

如果域名的配置文件中有应用存在本项目中,则发布成功,点击“查看”可显示该域名关联的应用信息。

  • 如果异步校验中,则状态为“发布中”。
  • 如果配置文件中没有任何应用在本项目中,则发布失败,点击“查看”可显示发布失败的原因。

在DevEco Studio中配置关联的网站域名

在应用的module.json5文件中进行如下配置,以声明应用关联的域名地址,并开启域名校验开关。

  • “entities”列表中必须包含“entity.system.browsable”
  • "actions"列表中必须包含“ohos.want.action.viewData”
  • "uris"列表中必须包含“scheme”为“https”且“host”为域名地址的元素,可选属性包含“path”、“pathStartWith”和“pathRegex”,具体参见“uris标签说明”。
  • “donmainVerify”设置为true,表示开启域名校验开关

说明:skills标签下默认包含一个skill对象,用于标识应用入口。应用跳转链接不能在该skill对象中配置,需要创建独立的skill对象,否则会导致配置无法生效。

例如,声明应用关联的域名是www.baidu.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": [// API19及以上版本须配置为"ohos.want.action.home",API18及以下版本请配置为"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业务冲突]}]}
}

处理传入的链接

在应用的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=showalllet 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的应用可以通过如下方式被拉起:
 

1、通过openLink接口拉起。

拉起方应用通过UIAbilityContext.openLink()接口,传入目标应用的链接,拉起目标应用。

openLink接口提供了两种拉起目标应用的方式,开发者可根据业务需求进行选择。

方式一:仅以App Linking的方式打开应用。

将appLinkingOnly参数设置为true,若有App Linking匹配的应用,则直接打开应用。若无App Linking匹配的应用,则抛异常该开发者进行处理。

适用于无法打开目标应用时,开发者做了相应的异常处理。例如:拉起方应用集成了ArkWeb,当目标应用不存在时,可通过ArkWeb打开链接。

方式二:以App Linking 优先方式打开应用

将appLinkingOnly参数设置为false或者不传,若有App Linking匹配的应用,则直接打开目标应用。若无App Linking匹配的应用,则尝试以浏览器打开链接的方式打开应用。

适用于无法打开目标应用时,开发者未做任何处理。此时目标应用不存在时,会通过系统浏览器打开链接。

import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { GlobalContext } from '../common/GlobalContext';@Entry
@Component
struct Index {build() {Button('start link', { type: ButtonType.Capsule, stateEffect: true }).width('87%').height('5%').margin({ bottom: '12vp' }).onClick(() => {let context = GlobalContext.getContext();let link: string = "https://www.example.com/programs?action=showall";// 仅以App Linking的方式打开应用context.openLink(link, { appLinkingOnly: true }).then(() => {hilog.info(0x0000, 'testTag', `Succeeded in opening link.`);}).catch((error: BusinessError) => {hilog.error(0x0000, 'testTag', `Failed to open link, code: ${error.code}, message: ${error.message}`);});})}
}

2、通过系统浏览器或ArkWeb拉起

ArkWeb深度集成了App Linking的能力,当用户在系统浏览器或者集成ArkWeb的应用的网页上点击某个链接时,若有链接匹配的应用,系统则会通过App Linking的能力优先拉起目标应用,并在应用内展示相应的内容。此机制有如下限制:

  • 如果用户当前浏览的网页的域名与点击的App Linking链接的域名完全一致,则系统会继续在系统浏览器或ArkWeb中打开该链接,以维持连贯的用户浏览体验。
  • 如果域名不完全一致(例如:example.com和app.example.com),则系统会通过App Linking能力优先拉起目标应用,并在应用内展示相应的内容。

参考:文档中心 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/87362.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/87362.shtml
英文地址,请注明出处:http://en.pswp.cn/web/87362.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Cursor无限邮箱续费方法

1.注册无限邮箱2925 2.“其他邮箱” 3.点击左下角添加邮箱 4.管理员身份运行Windos PowerShell 5.输入该指令并运行,修改机器码 irm https://aizaozao.com/accelerate.php/https://raw.githubusercontent.com/yuaotian/go-cursor-help/refs/heads/master/scripts/…

LeetCode Hot100(图论)

200. 岛屿数量 题意 给你一个由 1(陆地)和 0(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外,你…

Ubuntu Gnome 安装和卸载 WhiteSur-gtk-theme 类 Mac 主题的正确方法

WhiteSur-gtk-theme 是一个流行的 GNOME 桌面主题,可以让 Ubuntu 的桌面环境看起来像 macOS。以下是安装和卸载 WhiteSur-gtk-theme 的详细步骤,包括解释每个命令的作用。 一、安装 WhiteSur-gtk-theme 1. 准备工作 在安装主题之前,建议确…

如何在DataGear 5.4.1 中快速制作SQL服务端分页的数据表格看板

DataGear 数据可视化分析平台(http://datagear.tech/) 在新发布的5.4.1版本中,内置表格图表新增了serverSidePaging选项,仅需通过简单的配置,即可为表格添加服务端分页、关键字查询、排序功能。 本文以SQL数据集作为数…

股指期货套保比例怎么算?

在金融市场里,套期保值(套保)是一种常见的风险管理手段,目的是通过期货市场对冲现货市场的风险。而套保比例(也叫套保比率)的计算,是套保操作的核心。简单来说,套保比例就是“期货头…

逻辑回归(Logistic Regression)算法详解

文章目录 一、逻辑回归:从线性回归到二分类的跨越1.1 逻辑回归简介1.2 Sigmoid函数:概率映射的数学本质1.3 参数 w w w 和 b b b 对Sigmoid的调控1.4 从线性回归到分类1.5 决策边界:从概率到类别(结合图3、图4) 二、…

HTTPS通信流程:SSL/TLS握手全解析

2021,2022,2023年1-8月看了很多技术书籍,现在想来忘了很多,用到的也不多,但是因为提前接触过,所以很多新东西,接受起来,比预想的要容易些。最近突然想要回忆下HTTPS,居然…

SVG 在 VSCode 中的使用与优势

SVG 在 VSCode 中的使用与优势 引言 SVG(可缩放矢量图形)是一种基于可扩展标记语言的图形图像格式,与传统的位图格式(如 JPEG 或 PNG)相比,SVG 图像具有更高的灵活性和可缩放性。随着前端开发领域的不断发展,SVG 在网页设计中的应用越来越广泛。本文将介绍 SVG 在 Vis…

Ubuntu开放mysql 3306端口

Ubuntu开放mysql 3306端口 1. 检查 UFW 防火墙规则2. 检查 iptables 规则 1. 检查 UFW 防火墙规则 sudo ufw status verbose | grep 3306若输出包含 3306/tcp ALLOW,表示端口已开放(如下) ubuntuUbuntu2404:~$ sudo ufw status verbose | grep 3306 3306/tcp …

CentOS 卸载docker

1、停止docker服务 systemctl stop docker.socket systemctl stop docker systemctl stop containerd 2、列出已安装的docker包 yum list installed | grep -i docker 输出如下: containerd.io.x86_64 1.6.33-3.1.el7 docker-ce-stab…

MySQL数据库----DML语句

目录 DML-介绍SQL-DML-添加数据SQL-DML-修改数据SQL-DML-删除数据 DML-介绍 DML英文全称是 Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增删改操作。 添加数据(INSERT) 修改数据(UPDATE&#xff…

Prompt:提示词工程

前言在LLM大放异彩的今天,一个简单的问题,可能就会引出一个方案,一篇散文,而驱动这一切的,正是输入的“提示词(Prompt)”Prompt工程就是:与大模型打交道时,如何更好地设计…

GSAP 动画库在 Vue3 项目中的使用总结

前言 GSAP(GreenSock Animation Platform)是目前最强大的 JavaScript 动画库之一,以其出色的性能和简洁的API而闻名。本文将基于实际项目经验,详细介绍如何在 Vue3 项目中使用 GSAP 创建流畅、专业的动画效果,包括核心…

【字节跳动】数据挖掘面试题0007:Kmeans原理,何时停止迭代

文章大纲 K-means 原理与迭代停止条件⚙️ 一、K-Means核心思想🔁 二、迭代步骤详解关键数学操作 ⏹️ 三、何时停止迭代?Kmeans 算法实现代码 ⚠️ 四、面试常见扩展问题1. K值如何选择?2. 初始质心影响结果吗?3. 算法缺陷与改进…

209、长度最小的子数组

题目&#xff1a; 解答&#xff1a; 滑动窗口&#xff0c;左右指针指向窗口两端&#xff0c;窗口为[left,right]&#xff0c;leftright时窗口只包含一个元素。 窗口内元素和sum>target时&#xff0c;left,推出左侧一个元素;sum<target时&#xff0c;right&#xff0c;加…

关机精灵——自动化与便利性

文章目录 背景目标实现下载 背景 自动化与便利性&#xff1a; 让电脑在用户无需值守或干预的情况下&#xff0c;在特定时间点&#xff08;倒计时结束&#xff09;或任务完成后自动关闭。节能与环保&#xff1a; 避免电脑在完成工作后或无人使用时继续空耗电力。时间管理与健康…

L2CAP协议详解:分段重组、QoS控制与多协议复用设计(面试宝典)

本文系统解析L2CAP协议的知识图谱&#xff0c;掌握面试核心考点&#xff0c;并通过真题演练提升实战能力。建议配合协议分析工具进行抓包实践&#xff0c;加深对协议机制的理解。 一、L2CAP 在蓝牙协议栈中的核心定位 L2CAP&#xff08;Logical Link Control and Adaptation P…

微软服务器安全问题

微软云服务器安全深度解析&#xff1a;挑战、应对与未来展望——构建韧性“安全之盾”的持续博弈&#xff01; 在当今数字化时代&#xff0c;云计算已成为众多企业和组织运行业务的核心基础设施和“数字生命线”&#xff0c;而微软云&#xff08;Azure&#xff09;作为全球领先…

后台管理系统的诞生 - 利用AI 1天完成整个后台管理系统的微服务后端+前端

AI创作系列(11)&#xff1a;后台管理系统的诞生 - 利用AI 1天完成整个后台管理系统的微服务后端前端 真实记录&#xff1a;我决定为海狸IM添加一个后台管理系统。从早上开始&#xff0c;到晚上结束&#xff0c;仅仅1天时间&#xff0c;我就完成了整个后台管理系统的微服务后端和…

开发自动驾驶系统所需工具

硬件开发平台 传感器系统 环境感知工具包括&#xff1a; 激光雷达&#xff1a;通过发射激光脉冲并接收反射光来测量距离&#xff0c;构建点云数据以描绘周围环境的三维结构。例如&#xff0c;Velodyne的VLP-16激光雷达每秒可发射约30万次激光脉冲&#xff0c;生成高密度的点…