You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AASA文件中通用链接的复杂查询逻辑:AND与OR的实现及最优方案咨询

AASA文件中通用链接的复杂查询逻辑:AND与OR的实现及最优方案咨询

最近我在开发的App里需要配置通用链接,要求支持8个不同查询参数的任意组合——不管是单个参数、两个参数搭配,还是8个全上,对应的链接都得能正确匹配。比如这些都是合法的目标链接:

  • https://example.com/path/?term1=foo
  • https://example.com/path/?term1=foo&term2=bar
  • https://example.com/path/?term1=foo&term2=bar&term3=baz

折腾了好一阵,我大概摸清楚了AASA文件里components字典的匹配逻辑,但还是想跟大家确认下,也看看有没有更优的方案。

单个components字典:隐式的AND逻辑

我发现,如果在一个components字典里同时指定多个查询参数,它的匹配逻辑是隐式AND——只有当链接包含所有指定的查询参数时,才会匹配成功。

比如下面这个配置:

{
  "/": "/path/*",
  "?": {
    "term1": "?*",
    "term2": "?*",
    "term3": "?*"
  }
}

只有https://example.com/path/?term1=foo&term2=bar&term3=baz这种三个参数全有的链接能匹配,而像https://example.com/path/?term1=foo或者https://example.com/path/?term1=foo&term2=bar这类缺少参数的链接,都不会被匹配到。

多个components字典:实现OR逻辑

如果要让单个查询参数的链接也能匹配,就得给每个参数单独写一个components字典——这相当于实现了OR逻辑,只要链接包含其中某一个指定的参数,就能匹配。

比如下面的配置:

{
  "/": "/path/*",
  "?": { "term1": "?*" }
},
{
  "/": "/path/*",
  "?": { "term2": "?*" }
},
{
  "/": "/path/*",
  "?": { "term3": "?*" }
}

这种情况下,https://example.com/path/?term1=foo能匹配,但https://example.com/path/?term1=foo&term2=bar这种多参数组合的链接就匹配不到了。

两难的困境:全组合支持的成本

如果要支持8个参数的所有组合(单个、任意多个搭配),按照这个逻辑,我需要写2^8=256个components字典,这显然太臃肿了,维护起来也不现实。

目前我想到的替代方案是:只在AASA里配置路径匹配,比如:

{ "/": "/path/*" }

然后把查询参数的校验逻辑放到App内部——当App通过通用链接唤起时,再去检查链接里的查询参数是否合法。

现有依据:WWDC Session的暗示

我翻了苹果的官方文档,没找到关于这个逻辑的明确说明,但在WWDC 2019的Session 717《What's New in Universal Links》里看到一句话:

For a components dictionary to match a candidate URL, all the specified components must match

这句话暗示了单个components字典里的所有配置项(包括查询参数)都是AND逻辑,必须全部满足才会匹配。

现在想请教各位同学:有没有人有过类似的配置经验,或者找到过苹果更明确的官方说明,能支持或者推翻我这个结论的?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 09:08:00