iOS含#!/路径的Universal Link配置失效问题求助
iOS Universal Link 带#!/路径配置失效的解决办法
为什么你的配置没用?
Universal Link 的 AASA 文件根本不支持匹配 URL 里的哈希片段(就是#及后面的内容)。苹果的机制只会解析#前面的路径部分,哈希片段完全不参与 AASA 的路径匹配,这就是你试了各种#相关规则都无效的核心原因。
可行的解决思路
1. 调整 URL 结构(最推荐)
把哈希片段里的路径挪到#前面,比如把https://example.com/#!/courses/xxx/home改成https://example.com/courses/xxx/home,然后在 AASA 文件中配置对应规则:
{ "applinks": { "details": [ { "appIDs": ["你的团队ID.你的BundleID"], "components": [ { "/": "/courses/*/home", "comment": "匹配courses下任意子路径的home页面" } ] } ] } }
这是最稳妥的方案,完全贴合 Universal Link 的设计逻辑。
2. 服务器端重定向
如果没法修改原有 URL 结构,就在服务器做重定向:当用户访问带#!/的链接时,自动跳转到不带哈希的路径(比如https://example.com/uni-link/courses/xxx/home),同时在 AASA 中配置这个新路径的规则。
注意:必须使用301/302跳转,且跳转后的 URL 要符合 AASA 配置,iOS 会跟随重定向并匹配对应规则。
3. 先唤起应用再解析哈希
如果以上两种方案都无法实施,先配置一个匹配根路径的规则:
{ "applinks": { "details": [ { "appIDs": ["你的团队ID.你的BundleID"], "components": [ { "/": "/", "comment": "匹配根路径" } ] } ] } }
这样用户点击链接时,Universal Link 能正常唤起应用,之后在应用的application(_:continue:restorationHandler:)方法中获取完整 URL,自行解析哈希片段后跳转到对应页面即可。
验证注意事项
- 修改 AASA 文件后,需强制刷新 iOS 缓存:可以卸载重装应用,或者执行命令
xcrun simctl openurl booted "https://example.com/apple-app-site-association"触发缓存更新。 - 确保 AASA 文件的 Content-Type 为
application/json,且服务器必须支持 HTTPS 访问。
内容的提问来源于stack exchange,提问作者Krishnabhadra
相关产品推荐
相关产品推荐

