app-bound domains是ios通过associated domains entitlement与aasa文件绑定应用与域名的机制,支持跨域资源共享、cookie共享及universal links自动跳转,需配置entitlement、部署aasa、处理nsuseractivity并验证调试。

Safari的App-Bound Domains是一种iOS系统机制,允许开发者将特定网站域名与已签名的iOS应用进行绑定,从而在SFSafariViewController或WKWebView中启用跨域资源共享、Cookie共享及深层链接自动验证等能力。以下是该技术的具体实现方式:
一、配置Associated Domains Entitlement
该步骤为App-Bound Domains生效的前提条件,需在Xcode项目中启用并声明受信域名,系统据此验证应用与网站的身份一致性。
1、打开Xcode项目,在“Signing & Capabilities”选项卡中点击“+ Capability”,添加“Associated Domains”。
2、在Domains列表中逐行输入格式为applinks:开头的域名,例如:applinks:example.com、applinks:shop.example.com。
3、确保应用Bundle ID已在Apple Developer Portal中启用Associated Domains功能,并且对应App ID已正确配置Entitlements文件。
二、部署Apple App Site Association(AASA)文件
AASA文件是JSON格式的无扩展名清单,由网站服务器公开提供,用于向iOS设备证明该域名确有授权关联指定应用。iOS在首次访问或安装后主动拉取并校验此文件。
1、创建名为apple-app-site-association的纯文本JSON文件,不带.json扩展名。
2、文件内容必须以application/json MIME类型响应,且不含BOM头,示例结构如下:
3、将该文件部署至网站根目录或/.well-known/子路径下,例如:https://example.com/apple-app-site-association 或 https://example.com/.well-known/apple-app-site-association。
4、确保Web服务器返回HTTP状态码200,且响应头包含Content-Type: application/json。
三、实现NSUserActivity与Universal Links处理
当用户点击指向已绑定域名的链接时,iOS会跳过Safari而直接启动对应应用(若已安装),该过程依赖NSUserActivity对象的正确解析与响应。
1、在AppDelegate或SceneDelegate中实现continue userActivity:方法。
2、检查userActivity.activityType是否为NSUserActivityTypeBrowsingWeb。
3、从userActivity.webpageURL提取路径与查询参数,并执行对应业务逻辑,例如跳转至商品页或登录态恢复。
四、验证绑定状态与调试方法
iOS不会实时同步AASA文件变更,需通过系统级工具确认当前设备是否成功下载并解析了目标域名的绑定信息,避免因缓存或格式错误导致Universal Links失效。
1、在设备上打开设置→Safari→高级→Website Data,查找对应域名是否存在关联记录。
2、使用Console.app连接设备,在过滤栏输入swcd(Secure Web Certificate Daemon)查看AASA拉取日志。
3、运行命令xcrun simctl openurl booted "https://example.com/path"测试模拟器中Universal Link行为。
4、访问https://search.developer.apple.com/appsearch-validation-tool提交域名,获取苹果官方验证报告,其中会明确提示Valid或具体错误类型如Invalid JSON、Missing app ID等。










