iOS 配置通用链接(Universal Link)服务端和开发者后台都配置好了,还是跳转不到App
目录
一、什么是 Universal Link?
1.背景介绍
2.特点
3.运行机制原理&流程图
二、配置教程
1.第一步:开启 Associated Domains 服务
1.1 开通 Associated Domains
2.第二步:服务器配置 apple-app-site-association(AASA) 文件
2.1 创建 apple-app-site-association 文件
2.2 将 apple-app-site-association 文件上传到服务器
2.3 校验 AASA 文件的有效性
2.3.1 三方工具(推荐使用)
2.3.2 官网(不好用)
3.第三步:配置 Associated Domains(域名)
3.1 在 Xcode 中配置
3.2 在 HBuilderX 中配置
4.第四步:验证通用连接(Universal Link)是否配置正确
4.1 在 Safari 输入 Universal Links
4.2 在 iOS 原生备忘录上,输入 Universal Links
我按照大佬的操作都完成了,服务端给的地址也都验证通过,我前端配置也都ok,就是不跳转,最后发现是手机缓存问题,重启手机后,再重试就好了。
底部文章是来自一个大佬的博客总结的内容:
瑾瑾的技术分享博客
一、什么是 Universal Link?
1.背景介绍
-
Universal Link 是苹果在 WWDC 2015 上提出的 iOS 9 的新特性之一。此特性类似于深层链接,并能够方便地通过打开一个 Https 链接来直接启动您的客户端应用(手机有安装 App)。对比以往所使用的 URLSheme,这种新特性在实现 web-app 的无缝链接时,能够提供极佳的用户体验。使用前请阅读苹果官方文档 - Support Universal Links
-
由于苹果 iOS 13 系统版本安全升级,微信 SDK1.8.6 版本要求支持 Universal Links 方式跳转,以便进行合法性校验,提升安全性。详情请参考微信官方文档 - iOS 接入指南
2.特点
-
Universal Link 可以无缝链接到 app 或网页,主要应用场景有内容分享和广告投放。它有如下特点:
- 如果安装了 app,会直接打开 app,并定位到内容页;
- 如果没有安装 app,使用浏览器打开该链接;
3.运行机制原理&流程图
- 当 App 初次安装后或者更新版本后的第一次启动(第二次启动就不会),向工程配置的
applinks:
的域名请求apple-app-site-association
配置文件; - App 自动的将
apple-app-site-association
配置文件向 iOS 系统配置; - 当任何 WebView 发起 UniversalLink 的 url 的时候,系统遍历注册过的通用链接,如果命中则直接打开 App 触发 Delegate 方法;如果没命中,WebView 继续跳转加载 url。
- 以上都是系统默默替你做的,我们要做的就是确保配置的正确性。
二、配置教程
1.第一步:开启 Associated Domains 服务
1.1 开通 Associated Domains
-
登录苹果开发者中心,在“Certificates, Identifiers & Profiles(证书、标识符和描述文件)”页面选择“Identifiers(标识符)”
-
在“Identifiers(标识符)”选项下,添加或选择对应的 App ID
-
勾选 Associated Domains 并保存,一定要确保开启 Associated Domains 服务
重要提示:开启 Associated Domains 服务后,需要重新生成 profile 文件
2.第二步:服务器配置 apple-app-site-association(AASA) 文件
AASA(apple-app-site-association)文件是一个位于
根目录
或/.well-known
文件夹下面的 json 文件 (例如: https://your_domain/apple-app-site-association 或 https://your_domain/.well-known/apple-app-site-association),里面描述了目标 app 的信息。AASA 文件和 entitlements 为网站和 app 提供了互相认证的机制。
2.1 创建 apple-app-site-association
文件
-
需要创建一个
apple-app-site-association
文件,必须命名为apple-app-site-association
,切记没有后缀,有些人的电脑是隐藏文件后缀的,务必把.json
后缀去掉!1
touch apple-app-site-association
-
文件内添加 json 格式数据,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
{"applinks": {"apps": [], // apps:是限制只能在这几个app中使用,基本上不填写,所以是空数组"details": [// 可以配置一个,也可配置多个{"appID": "9JA89QQLNQ.com.apple.wwdc", // appID:是由TeamId + . + BundleId组成"paths": ["*"] // paths:设定你的app支持的路径列表,只有这些指定路径的链接,才能被app所处理。"*"的写法代表了可识别域名下所有链接},{"appID": "ABCD1234.com.apple.wwdc","paths": ["/app/*", "/qq_conn/appid/*"] // "/app/*"是自己定义的路径;"/qq_conn/appid/*"需要根据QQ互联平台设置,appid是QQ互联后台对应应用的APPID}]} }
2.2 将 apple-app-site-association
文件上传到服务器
-
你的服务器必须支持 HTTPS 协议,并且拥有该域名下上传到根目录的权限;
-
将这个文件上传到你的服务器,可以将这个文件放到服务器的
根目录
下,也可以放到.well-known
这个子目录下,这是为了苹果能获取到你上传的文件; -
该文件的
content-type
需要设置成application/json
,可以直接在 oss 上进行修改; -
上传完成后,对应的链接分别为
https://xxx/apple-app-site-association
或https://xxx/.well-known/apple-app-site-association
(xxx 为服务端的域名),然后试着访问一下,看看是否能够获取到,当你在浏览器中输入这个文件链接后,出现下图就可以了:
2.3 校验 AASA 文件的有效性
- AASA 文件的格式和命名会直接影响到 iOS 系统能否正常拉取、识别里面的内容,现在有一些工具可以校验 AASA 文件有效性:
2.3.1 三方工具(推荐使用)
2.3.2 官网(不好用)
3.第三步:配置 Associated Domains(域名)
3.1 在 Xcode 中配置
Xcode 版本:Version 14.2 (14C18)
-
在 Xcode 中打开项目,选择目录中的
xxx.xcodeproj
(xxx 通常为项目名称),在xxx.xcodeproj -> Signing&Capabilites -> Capability -> Associated Domains
这个路径下进行配置; -
然后双击
Associated Domains
,即可在 Xcode 中对 Associated Domains 进行配置,如果Capability
中已经存在Associated Domains
,那么直接配置即可; -
在 Associated Domains 里面配置的 Universal Links,必须以
applinks:
为前缀,格式为:applinks:+配置的域名
,例如:applinks:test.com
3.2 在 HBuilderX 中配置
HBuilderX 版本:3.8.4
-
打开 HBuilderX 并选择对应的项目,找到
manifest.json
,在App常用其它设置
中找到“iOS 设置”下的关联域(Associated Domains)
进行配置; -
或者打开项目的
manifest.json
文件,切换到“源码视图”项,在 uni-app 项目在app-plus -> distribute -> ios -> capabilities -> entitlements
节点下添加com.apple.developer.associated-domains
字段,字段值为字符串数组,每个字符串为要关联的域名;1 2 3 4 5 6 7
"capabilities": {"entitlements": {"com.apple.developer.associated-domains": ["applinks:xxx.xxx.com"] // xxx.xxx.com 是应用通用链接的域名(这里不要包含path),请修改为自己应用要使用的域名} }
-
保存后提交云端打包生效;
注意:在 Associated Domains 里面配置的 Universal Links 必须要以
applinks:
开头,后面写上域名,例如:applinks:test.com
4.第四步:验证通用连接(Universal Link)是否配置正确
注意:测试时,手机上必须安装你需要跳转的应用并配置 Associated Domains
4.1 在 Safari 输入 Universal Links
- 在这个链接的页面顶部能看到“在 xxx APP 中打开”字样,点击“打开”按钮可以打开 app;
4.2 在 iOS 原生备忘录上,输入 Universal Links
- 如果输入的 Universal Links 是能识别的链接,那么点击链接看看是否可以直接跳转到 app;
- 或者长按该链接,看看弹出的菜单中是否有“在 xxx 中打开”,这都代表着成功了;
注意:服务器上
apple-app-site-association
的更新不会让 iOS 本地的apple-app-site-association
同步更新,即 iOS 一般只会在 APP 下载完后初次启动才会下载这个文件,所以如果修改了apple-app-site-association
文件,请删除 APP 后重新下载。
相关文章:

iOS 配置通用链接(Universal Link)服务端和开发者后台都配置好了,还是跳转不到App
目录 一、什么是 Universal Link? 1.背景介绍 2.特点 3.运行机制原理&流程图 二、配置教程 1.第一步:开启 Associated Domains 服务 1.1 开通 Associated Domains 2.第二步:服务器配置 apple-app-site-association(AAS…...

【环境】Linux下Anaconda/ Miniconda安装+百度Paddle环境搭建+Cudnn(3090显卡+CUDA11.8+cudnn8.6.0)
清华源帮助链接:https://mirror.tuna.tsinghua.edu.cn/help/anaconda/ 下载链接:https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/ 其他深度学习环境相关博文:【stable-diffusion】4090显卡下dreambooth、lora、sd模型微调的GUI环境…...
【Python机器学习】零基础掌握AdaBoostRegressor集成学习
有没有经历过这样的状况:需要预测未来房价走势,但传统的预测方法并不总是准确? 房价预测一直是人们关注的热点话题,无论是房产商、购房者,还是政府,都需要准确地知道未来房价的走势。那么,有没有一种更加精准、稳定的预测方法呢?答案是有的——AdaBoost Regressor算法…...
各种添加路由的方法
Linux 篇: ipv4: #添加到主机的路由 # route add –host 192.168.168.110 dev eth0 # route add –host 192.168.168.119 gw 192.168.168.1 #添加到网络的路由 # route add –net IP netmask MASK eth0 # route add –net IP netmask MASK gw IP # route add –n…...
MySQL外键
目录 一.外键 1.表与表之间建立关系 2.什么是外键 3.一对多关系 4.多对多关系 (1)建表会遇到的问题 (2)解决循环建表的问题 5.一对一关系、 6.小结 二.多表查询 1.数据准备 2.多表查询案例 (1)…...
自制数据库迁移工具-C版-02-HappySunshineV1.1-(支持Gbase8a)
目录 一、环境信息 二、简述 三、升级点 四、支持功能 五、安装包下载地址 六、配置参数介绍 七、安装步骤 1、配置环境变量 2、生效环境变量 3、检验动态链接是否正常 4、修改配置文件MigrationConfig.txt 八、运行效果 一、环境信息 名称值CPUIntel(R) Core(TM) i…...
k8s创建pod-affinity亲和性时报错解决办法
1.如下报错 Error from server (BadRequest): error when creating “pod-required-affinity-demo-2.yaml”: Pod in version “v1” cannot be handled as a Pod: json: cannot unmarshal string into Go struct field LabelSelectorRequirement.spec.affinity.podAffinity.re…...

基于边缘智能网关的储能系统安全监测管理方案
“储能系统充电”是配套新能源汽车产业发展的重要应用之一。得益于电池技术的发展,新能源汽车正逐步迈入快充时代,由于在使用快速充电桩时,可能导致用电峰值负荷超过电网的承载能力,对于电网的稳定性和持续性会有较大影响…...

大数据Flink(一百零一):SQL 表值函数(Table Function)
文章目录 SQL 表值函数(Table Function) SQL 表值函数(Table Function) Python UDTF,即 Python TableFunction,针对每一条输入数据,Python UDTF 可以产生 0 条、1 条或者多条输出数据,此外,一条输出数据可以包含多个列。比如以下示例,定义了一个名字为 split 的Pyt…...
内核进程初始化和创建
task_struct 1.进程的状态 分时技术进行多进程调度 重点:进程的创建是如何的? linux在初始化的过程中那个会进行0号进程的创建,fork sched_init(); 做了什么 内核态 不可抢占 用户态 可以抢占 move_to_user_mode(); 把内核状态切换到…...

【进程概念④】:进程地址空间(虚拟内存与物理内存)
【进程概念④】:进程地址空间(虚拟内存与物理内存) 一.进程地址空间二.分页与虚拟地址①.what②.how③.why 三.页表细节①.标志位②.缺页中断 四.总结意义 一.进程地址空间 你觉得我们代码中写的数据都在哪存储着呢? 在内存里存着࿰…...
C语言内存四分区
四个区域:代码区,全局区,栈区,堆区 ①代码区 存放所写代码,二进制内容 ②全局区(又分data区和bss区) 存放全局变量,静态变量,常量 data区:已经初始化的全局变…...

数据可视化报表分享:区域管理驾驶舱
在零售数据分析中,区域管理驾驶舱报表是用来分析企业运营数据,以制定销售策略和提高利润。因此这张报表需要整合大量数据,数据整合、分析、指标计算的工作量极大,在讲究高效率、高度及时性的大数据时代,BI数据可视化分…...

解决pip安装包后但是Pycharm检测不到
首先要知道python找包的原理:原理 之后把一下代码打印一下: import sys print(sys.executable)# /usr/bin/python2 print(sys.path)# [/usr/lib/python2.7, /usr/lib/python2.7/dist-packages, /usr/local/lib/python2.7/dist-packages] print(sys.prefi…...

折纸问题
折纸的次数 —— 从上到下的折痕 本质上是中序遍历的问题,因为每一次在已有的折痕后折的时候,当前折痕上的折痕一定为凹,当前折痕下的折痕一定为凸 。实际模拟了一个不存在的二叉树结构的中序遍历。 注:折纸折几次整颗二叉树就有…...

mysql-面试50题-2
一、查询数据 学生表 Student create table Student(SId varchar(10),Sname varchar(10),Sage datetime,Ssex varchar(10)); insert into Student values(01 , 赵雷 , 1990-01-01 , 男); insert into Student values(02 , 钱电 , 1990-12-21 , 男); insert into Student v…...

FoLR:Focus on Local Regions for Query-based Object Detection论文学习笔记
论文地址:https://arxiv.org/abs/2310.06470 自从DETR问询式检测器首次亮相以来,基于查询的方法在目标检测中引起了广泛关注。然而,这些方法面临着收敛速度慢和性能亚优等挑战。值得注意的是,在目标检测中,自注意力机制…...

【QT开发(15)】QT在没有桌面的系统中可以使用
在没有桌面的系统中,可以使用QT库。QT库可以在没有图形用户界面(GUI)的环境中运行,例如在服务器或命令行终端中。 这样就可利用Qt的: 对象模型,信号和槽容器类多线程和多进程网络编程 等...

『heqingchun-Qt的艺术-优雅界面设计开发』
Qt的艺术-优雅界面设计开发 效果图 一、新建Qt窗口工程 二、准备资源文件 1.图标资源 链接: 图标资源 2.Qss资源 链接: Qss资源 三、设计开发 项目源码链接: CSDN资源...
webGL编程指南 第四章 平移+旋转.RotatdTanslatedTriangle.html
我会持续更新关于wegl的编程指南中的代码。 当前的代码不会使用书中的缩写,每一步都是会展开写。希望能给后来学习的一些帮助 git代码地址 :git 本篇文章将把旋转和平位移结合起来,因为矩阵的不存在交换法则 文章中设计的矩阵地址在这里…...
Asp.Net Core基于StackExchange Redis 缓存
NuGet安装 StackExchange.Redis Microsoft.Extensions.Options 0. appsettings.json初始化配置 {"Logging": {"LogLevel": {"Default": "Information","Microsoft.AspNetCore": "Warning"}},"AllowedHos…...
前端八股之JS的原型链
1.原型的定义 每一个对象从被创建开始就和另一个对象关联,从另一个对象上继承其属性,这个另一个对象就是 原型。 当访问一个对象的属性时,先在对象的本身找,找不到就去对象的原型上找,如果还是找不到,就去…...
java面试场景题:QPS 短链系统怎么设计
以下是对文章的润色版本: 这道场景设计题,初看似乎业务简单,实则覆盖的知识点极为丰富: 高并发与高性能分布式 ID 生成机制;Redis Bloom Filter——高并发、低内存损耗的过滤组件知识;分库、分表海量数据存…...

手写muduo网络库(一):项目构建和时间戳、日志库
引言 本文作为手写 muduo 网络库系列开篇,聚焦项目基础框架搭建与核心基础工具模块设计。通过解析 CMake 工程结构设计、目录规划原则,结合时间戳与日志系统的架构,为后续网络库开发奠定工程化基础。文中附完整 CMake 配置示例及模块代码。 …...

一次Oracle的非正常关闭
数据库自己会关闭吗? 从现象来说Oracle MySQL Redis等都会出现进程意外停止的情况。而这些停止都是非人为正常关闭或者暴力关闭(abort或者kill 进程) 一次测试环境的非关闭 一般遇到这种情况先看一下错误日志吧。 2025-06-01T06:26:06.35…...
Python训练day40
知识点回顾: 彩色和灰度图片测试和训练的规范写法:封装在函数中 展平操作:除第一个维度batchsize外全部展平 dropout操作:训练阶段随机丢弃神经元,测试阶段eval模式关闭dropout 作业:仔细学习下测试和训练…...

CSS 定位:原理 + 场景 + 示例全解析
一. 什么是CSS定位? CSS中的position属性用于设置元素的定位方式,它决定了元素在页面中的"定位行为" 为什么需要定位? 常规布局(如 display: block)适用于主结构 定位适用于浮动按钮,弹出层,粘性标题等场景帮助我们精确控制元素在页面中的位置 二. 定位类型全…...

如何在Unity中实现点击一个按钮跳转到哔哩哔哩
1.创建一个按钮 2.编写一个脚本(你可以把链接改成你想要跳转的网站) using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;public class JumpToBilibili : MonoBehaviour {void Start(){gameObject.…...
微信小程序带参分享、链接功能
分享链接的功能是右上角点...然后复制链接,可以直接点击 #小程序://**商城/p5XqHti******* 这种链接直接从其他地方跳转到小程序 wx.onCopyUrl(() > {return {query: "shareCode" this.shareCode,}; }); query就是参数,直接在onload里…...
主流信创数据库对向量功能的支持对比
主流信创数据库对向量功能的支持对比 版本支持对比向量索引支持对比距离函数支持对比使用限制对比OceanBase向量数据库GaussDB向量数据库TiDB向量数据库VastBase向量数据库 ⭐️ 本文章引用数据截止于2025年5月31日。 版本支持对比 数据库产品支持向量功能的版本OceanBaseOce…...