iOS如何处理带#(片段标识符)的Universal Links通用链接
解决apple-app-site-association匹配带#哈希路径不生效的问题
首先明确规则限制:苹果AASA(apple-app-site-association)默认仅匹配URL中域名之后、哈希符(#)之前的路径部分,#及后续的哈希片段不会被常规的paths规则识别,直接写包含#的路径配置必然无法生效。
方案1:适配iOS 13及以上版本(无需修改前端路由)
iOS 13开始新增fragment字段,专门用于匹配#后的哈希内容,配置示例如下:
{ "applinks": { "apps": [], "details": [ { "appID": "你的苹果团队ID.你的App Bundle ID", "components": [ { "/": "/v3/", "fragment": "example/*", "comment": "匹配所有https://example.com/v3/#/example/开头的链接" } ] } ] } }
字段说明:
"/": "/v3/"匹配#之前的路径部分,和你URL中#前的/v3/完全对应"fragment": "example/*"匹配#之后的哈希内容,*为通配符,可匹配/example/后拼接的任意子路径
方案2:兼容iOS 12及更低版本
iOS 12及更早系统不支持fragment和components字段,需要修改前端路由模式,将哈希路由(Hash Mode)改为历史路由(History Mode),去掉URL中的#,调整后的URL格式为https://example.com/v3/example/,再用常规paths规则配置即可:
{ "applinks": { "apps": [], "details": [ { "appID": "你的苹果团队ID.你的App Bundle ID", "paths": [ "/v3/example/*" ] } ] } }
额外注意事项
- AASA文件必须放置在域名根目录或者
.well-known目录下,不能设置301/302等重定向,服务端需将文件的Content-Type设置为application/json - 路径和哈希的匹配规则都区分大小写,配置内容需要和实际URL的大小写完全一致
- 测试前建议卸载重装App触发系统重新拉取AASA配置,避免缓存旧配置导致验证失败
内容的提问来源于stack exchange,提问作者Henry P.
相关产品推荐
相关产品推荐

