在 iOS 9 之前,在移动网站和本地 iPhone 应用之间导航是一种不可预测且笨拙的体验。开发者依赖于自定义 URI 协议,如 instagram:// 或 mybank://。这些方案经常触发令人不适的系统提醒,询问“在应用中打开吗?”,如果应用缺失则完全失效,并且存在严重的安全漏洞。为了解决这些根本性缺陷,苹果推出了通用链接。但 什么是通用链接,以及它为何改变了移动软件架构?
从本质上讲,通用链接是一种标准、安全的 HTTPS 网络 URL,可以无缝地路由到已安装 iOS 应用中的特定视图控制器。如果应用已安装,iOS 会立即启动它,而无需打开 Safari。如果应用未安装,操作系统会在 Safari 中优雅地加载响应式网页,而不会显示错误对话框。在本次技术深入分析中,我们将探讨 Apple 通用链接的内部工作原理,研究 AASA 配置文件,并解释为什么现代移动路由依赖于此协议。
理解通用链接对于任何希望通过电子邮件活动、社交平台和搜索引擎结果提供无摩擦客户体验的 iOS 工程师或数字营销人员来说至关重要。
什么是通用链接以及为什么苹果要建立它
要理解通用链接的目的,必须考察传统自定义 URL 方案的缺点。自定义方案没有中央注册表。任何开发者都可以创建一个声称使用 paypal:// 方案的应用,从而拦截本应发送给合法服务的敏感财务参数,这在我们的 移动 URL 方案 指南中已有说明。此外,如果没有安装该应用的用户在 Safari 中点击自定义方案链接,iOS 将显示一个严厉的系统错误:“Safari 无法打开该页面,因为地址无效。”
苹果设计了通用链接以建立三个关键的操作标准:
- 独特性和安全性:由于通用链接使用标准的网页域名(例如,
https://dslink.me/path),除非其他开发者控制了您已验证的 DNS 记录和 SSL 证书,否则他们无法声称您的链接。 - 无摩擦回退:如果 iPhone 用户未安装您的应用程序,相同的 URL 会自动在 Safari 中打开您的移动网站。不会出现断开的链接,也不会有错误提示。
- 单一身份:营销人员和开发人员只需共享一个 URL,该 URL 同时为桌面电脑上的网页访问者和移动设备上的原生应用用户提供服务。
这个设计还解决了由于协议交接中断而导致的链接在 Safari 中打开而不是在应用中打开的问题。
Apple App Site Association (AASA) 的架构
通用链接的操作基础是苹果操作系统与您的网络服务器之间的安全握手。这个握手由 Apple App Site Association (AASA) 文件调解,该文件是一个托管在以下位置的 JSON 文档:
https://yourdomain.com/.well-known/apple-app-site-association
此文件定义了哪些应用程序 ID 被允许处理您域名上的特定 URL 路径。以下是现代 AASA JSON 格式的示例:
{
"applinks": {
"apps": [],
"details": [
{
"appID": "TEAMID1234.com.example.myapp",
"paths": ["/video/*", "/product/*", "/user/*"],
"components": [
{
"/": "/video/*",
"comment": "Matches all video detail pages"
}
]
}
]
}
}
关键技术托管规则适用于 AASA 文件:
- 它必须通过 HTTPS 提供,并使用受信任的 SSL 证书。
- 它必须返回一个
Content-Type为application/json。 - 它必须返回 HTTP 200 OK 状态码,并且不进行任何 HTTP 到 HTTPS 的重定向。
- 苹果会将此文件缓存到其内容分发网络 (CDN) 上;对您的服务器所做的更改可能需要一些时间才能传播到所有 iOS 设备。
在几秒钟内创建智能深度链接
不要因为笨拙的应用内浏览器登录界面而失去移动访客。使用 DSLink 生成干净的、可打开应用的深度链接,并提供实时分析。
Open Universal Links vs schemes guide通用链接与自定义 URL 方案
理解 Universal Links 和自定义方案之间的架构差异,有助于开发者设计可靠的跨平台路由系统,正如我们在关于 Universal Links 与 URL 方案的比较 中所探讨的那样:
| 特征 | 苹果通用链接 | 自定义 URI 方案 |
|---|---|---|
| URL格式 | 标准 HTTPS(https://brand.com) |
专有协议 (brand://) |
| 安全性与所有权 | 通过 DNS 和 AASA JSON 验证 | 未经验证;容易被计划劫持 |
| 备用处理 | 在 Safari 中优雅地加载网站 | 显示“Safari 无法打开页面”错误 |
| 提示行为 | 立即打开应用程序,无需任何提示 | 经常触发“在应用中打开?”系统对话框 |
| 应用内浏览器支持 | 经常受到社交网络视图的限制 | 可以通过 JavaScript 重定向触发 |
虽然通用链接在安全性和用户体验方面更优,但在处理顽固的社交媒体应用内浏览器时,自定义方案仍然经常被保留作为备用,应对方法详见我们关于应用内浏览器导航的指南。
iOS 如何在运行时处理通用链接
当 iPhone 用户在 Apple Mail、信息或第三方应用中点击链接时,iOS 会执行一个精确的决策工作流程:
- 本地数据库查询:iOS 检查在应用安装期间存储的已验证域的本地索引数据库。
- 路径评估:如果域名匹配,iOS 会评估 URL 路径是否与 AASA 文档中定义的模式匹配。
- 用户偏好检查:iOS 会检查用户是否曾通过点击右上角的域名面包屑按钮切换过 Safari 偏好设置。
- 原生交接: 如果所有检查通过,iOS 会启动原生应用并将包含点击 URL 的
NSUserActivity对象传递给应用代理或 SwiftUI 生命周期处理器。 - Safari 回退: 如果应用缺失、路径不匹配或域未验证,iOS 会启动 Safari 并正常获取网页。
开发人员可以使用我们的互动式 链接检查工具 测试这些路由转换,以验证响应代码和域名映射。
实现通用链接的最佳实践
为了确保在您的营销活动和开发者基础设施中实现无瑕疵的 Universal Link 路由,请遵循这些经过实践验证的最佳做法:
- 绝不要在标准重定向中包装通用链接:如果链接通过未关联域上的通用 301/302 重定向,iOS 会中断链路并将点击路由到 Safari。请在我们的 深度链接与 URL 缩短器指南 中了解更多信息。
- 考虑社交应用内浏览器:像 Instagram、TikTok 和 Facebook 这样的应用会在沙箱网页视图中捕获点击。使用由 DSLink 提供支持的智能深度链接,它可以检测网页视图并触发意图握手以进行逃逸。
- 支持通用内容路径:确保您的原生移动应用和您的网络服务器共享一致的 URL 路由路径(例如,
/item/123在网页和应用中都路由到同一产品)。 - 持续验证 AASA 语法: 使用苹果的 App 搜索 API 验证工具来确保您的 AASA 文件在每次服务器部署后保持有效、未损坏且格式正确。
通过掌握苹果通用链接并将其与多平台智能路由结合使用,您可以提供无摩擦的移动体验,让用户持续沉浸在您的原生软件中。
常见问题
iOS 中的通用链接是什么?
通用链接是一个标准的 HTTPS 网络地址,Apple iOS 识别为与已安装的应用程序相关联,允许操作系统直接打开本地应用程序,而不是加载 Safari。
苹果如何验证一个应用是否拥有某个域名?
苹果通过托管在网站域名上的 apple-app-site-association (AASA) JSON 文件验证所有权。iOS 在应用安装时下载此文件以验证应用 ID 和路径是否匹配。
如果用户点击了通用链接但没有安装应用,会发生什么?
如果应用未安装,iOS 会在 Safari 中无缝加载目标网页,而不会显示任何错误提示、警告对话框或损坏的屏幕。
通用链接可以在安卓设备上使用吗?
不。通用链接是苹果iOS和iPadOS特有的标准。安卓使用一种等效技术,称为Android应用链接,它依赖于数字资产链接验证。