如何阻止iOS通用链接跨子域跳转时打开应用
解决iOS通用链接子域间跳转意外打开应用的问题
问题根源分析
首先得明确iOS通用链接的触发逻辑:它只看目标URL是否匹配你配置的关联域和apple-app-site-association里的路径规则,完全不关心链接的来源子域。
你现在的配置里:
- 关联域用了
*.mywebsite.com,意味着所有子域(包括subdomainA.mywebsite.com和www.mywebsite.com)都属于通用链接的覆盖范围; apple-app-site-association里的applinks.paths包含了"/",也就是www.mywebsite.com的根路径完全匹配规则。
所以当用户在subdomainA的页面点击指向www.mywebsite.com的链接时,iOS会判定目标URL符合通用链接规则,直接打开应用,这就是你遇到的问题。
两种可行解决方案
方案1:缩小关联域范围(彻底解决)
如果你只需要特定子域(比如www.mywebsite.com)触发通用链接,直接把关联域里的通配符改成具体子域:
<string>webcredentials:www.mywebsite.com</string> <string>applinks:www.mywebsite.com</string>
这样一来,subdomainA.mywebsite.com不在关联域范围内,从这个子域点击任何链接到www.mywebsite.com时,都会直接在浏览器打开,不会触发应用跳转。
如果还有其他子域需要触发通用链接,只需逐个添加即可,比如:
<string>applinks:subdomainB.mywebsite.com</string>
方案2:给特定链接添加禁用属性(灵活适配)
如果必须保留*.mywebsite.com的通配符关联域(比如多个子域都需要触发通用链接),可以在subdomainA页面的目标链接上添加iOS专属的属性,强制禁用该链接的通用跳转:
<a href="https://www.mywebsite.com/" data-apple-no-universal-links="true">HOME</a>
这个属性会告诉iOS,忽略该链接的通用链接规则,直接在当前浏览器环境打开目标URL。
补充说明
iOS本身没有内置的“根据来源子域自动禁用通用链接”的机制,它的判定逻辑只聚焦于目标URL是否匹配配置规则。所以要实现你想要的效果,只能通过上述两种方式:要么限制关联域的覆盖范围,要么在特定链接上手动禁用跳转。
内容的提问来源于stack exchange,提问作者Henry
相关产品推荐
相关产品推荐

