配置网站
创建 apple-app-site-association
在网站根目录或者 .well-known目录下创建 apple-app-site-association 文件。注意,文件没有后缀名。
文件是一个json文件,内容如下:
{
"applinks": {
"apps": [],
"details": [
{
"appID": "团队ID.应用BundleID"
"paths": ["/路径/*"]
}
]
}
}
- 团队ID,和应用签名证书上的TeamId保存一致
- 路径 ,遵循url对应的规范,建议每一个App应用都使用独立的路径,便于管理
配置MIME
因为apple-app-site-association 的数据格式是json,所有对应MIME类型:application/json。
在对应的站点配置文件里设置,以nginx为例:
# 如果文件在根目录
location /apple-app-site-association {
default_type application/json;
}
# 如果文件在.well-known目录
location /.well-known/apple-app-site-association {
default_type application/json;
}
验证网站配置
打开 https://branch.io/resources/aasa-validator/ , 输入网站域名并验证配置是否正确。
关于缓存
Apple会缓存apple-app-site-association文件内容,缓存未必及时更新(一般不超过48小时),所以有时候通过Universal Links打开App会失败。
打开 https://app-site-association.cdn-apple.com/a/v1/你的网站域名可以查看缓存内容
创建 Universal Links网页
还需要在网站部署一个 Universal Links网页。网页的访问路径需要和apple-app-site-association文件中配置的路径一致。 当使用 Safari 浏览器打开Universal Links网页时,可唤起App。
网页内容如下:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- 苹果 Universal Links 标记 -->
<meta name="apple-mobile-web-app-capable" content="yes">
<title>打开应用</title>
</head>
<body>
<div>
<!-- 替换为你的 App 图标 -->
<img src="app-icon.png" alt="应用图标" class="app-icon">
<h1 class="title">在应用中打开</h1>
<p class="desc">即将为你跳转到对应的应用<br>如果未跳转,请点击下方按钮</p>
<!-- Universal Links 跳转按钮(直接访问当前页面即可触发) -->
<a href="javascript:void(0)" class="open-btn" id="openBtn">打开应用</a>
</div>
<script>
// 页面加载自动触发 Universal Links 跳转
window.onload = function() {
document.getElementById('openBtn').addEventListener('click', function() {
// 苹果会自动处理 Universal Links 跳转
window.location.reload();
});
};
</script>
</body>
</html>
配置 App
配置App的Associated Domains
项目名称 → Target → Signing & Capabilities,点击左上角 + Capability,搜索并添加 Associated Domains。
在Associated Domains里添加:applinks:你的网站域名
加入 Universal Links网页地址为 https://a.b.c/x/y/z ,那么Associated Domains需要配置 applinks:a.b.c
App的处理代码
在 SceneDelegate 添加
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let url = userActivity.webpageURL else {
return
}
print("Universal Link 跳转成功:\(url)")
// 在这里处理跳转逻辑,如打开特定页面
}
(老工程)在 AppDelegate 添加
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
let url = userActivity.webpageURL
print("跳转链接:\(url)")
}
return true
}