iOS apple-app-site-association含#号URL排除规则失效问题求助
iOS深度链接排除带#号URL的解决方案
问题核心
iOS的App Site Association(ASA)文件在匹配URL时,不会处理锚点(#后面的内容),所以你之前写的包含/#/register的规则根本不会生效——ASA只匹配#之前的路径部分。
可行解决方法
方法1:在App内拦截处理
既然ASA无法识别锚点内容,就把逻辑移到App内部:
- 先让ASA匹配这个域名下的所有路径(或者你原本需要的合法路径),不要用exclude规则
- 当App被唤起后,在处理深度链接的代码里,解析完整URL的锚点部分
- 如果锚点是
/register,就直接终止跳转,让用户留在浏览器
示例Swift代码:
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool { if let fragment = url.fragment, fragment == "/register" { // 不处理该链接,返回false让系统回到浏览器 return false } // 处理其他合法深度链接逻辑 return true }
方法2:服务器端URL重定向
如果不想修改App代码,可以在服务器上做处理:
- 把带
#/register的URL重定向到一个不被ASA匹配的路径(比如/exclude-register) - 确保ASA文件里不包含这个新路径的匹配规则,这样浏览器就不会唤起App
为什么之前的规则无效
ASA文件的路径匹配仅针对URL的路径部分(域名之后、#之前的内容),#及其后面的锚点属于客户端处理的内容,不会被苹果的ASA解析器读取,所以你写的包含/#/register的exclude规则完全不会被识别。
内容的提问来源于stack exchange,提问作者serhanaksut
相关产品推荐
相关产品推荐

