Universal Link 是苹果在 iOS 9 中引入的一种深层链接技术,它允许你通过一个标准的 HTTPS URL 来直接打开你的 iOS 应用,而无需通过 Safari 浏览器跳转。如果用户没有安装你的应用,这个链接会自动在 Safari 中打开对应的网页内容。
核心优势:
- 无缝用户体验:用户点击链接即可直接进入应用,无需经过浏览器。
- 智能 fallback:未安装应用时,会优雅地跳转到网页。
- 品牌一致性:可以使用你自己的域名作为链接,而不是
yourapp:// 这种自定义 Scheme。
- 支持跨平台:同一个 HTTPS 链接可以在 iOS、Android、桌面浏览器等多个平台上工作。
配置过程主要分为三步:
- 配置你的域名服务器:在你的网站上放置一个名为
apple-app-site-association 的 JSON 文件。
- 配置你的 Xcode 项目:在项目中启用 Associated Domains 并添加你的域名。
- 在应用中处理链接:实现
UIApplicationDelegate 或 NSUserActivity 的回调方法来响应链接的打开。
-
创建 apple-app-site-association 文件
这是一个 JSON 文件,没有文件后缀。
{
"applinks": {
"apps": [],
"details": [
{
"appID": "ABCDE12345.com.example.MyApp",
"paths": [ "/app/*", "/links/*", "NOT /about" ]
}
]
}
}
apps: 必须为空数组。
details: 一个包含应用信息的数组,可以配置多个应用。
appID: 由两部分组成:Team ID.Bundle Identifier。
Team ID: 你的 Apple Developer 团队 ID,可以在 Apple Developer 网站上找到。
Bundle Identifier: 你的应用的 Bundle ID,在 Xcode 项目设置中可以找到。
paths: 一个字符串数组,指定了哪些路径的 URL 会被关联到你的应用。
- 通配符
*: 匹配任意字符序列(包括空)。例如 /app/* 会匹配 /app/, /app/home, /app/item/123 等。
- 精确匹配: 例如
/links/promotion 只会匹配这个 exact path。
NOT 关键字: 用于排除某些路径。例如 "NOT /about" 表示除了 /about 之外的所有路径。NOT 必须是数组中的第一个元素。
-
上传文件到你的服务器
将 apple-app-site-association 文件上传到你域名的 根目录 或 .well-known 子目录中。
- 推荐路径:
https://www.yourdomain.com/.well-known/apple-app-site-association
- 备用路径:
https://www.yourdomain.com/apple-app-site-association
-
验证服务器配置
- 必须使用 HTTPS,且证书必须是可信的(不能是自签名证书)。
- 确保文件可以被公开访问,没有设置任何访问限制(如 Basic Auth)。
- 检查文件的
Content-Type 响应头应为 application/json。
-
打开项目设置:在 Xcode 中,选择你的项目文件(蓝色图标),然后选择你的主 Target。
-
启用 Associated Domains:
- 切换到 Signing & Capabilities 标签页。
- 点击左上角的
+ Capability 按钮。
- 搜索并添加 Associated Domains。
-
添加域名:
- 在
Associated Domains 能力下面,你会看到一个 Domains 列表。
- 点击
+ 按钮添加你的域名,格式为 applinks:www.yourdomain.com。
- 注意:前缀是
applinks:,后面跟上你的域名。不需要 https://。