如何指定 apple-app-site-association 文件路径来匹配查询字符串?

Jon*_*n_B 1 deep-linking query-string ios react-native ios-universal-links

我正在尝试在我正在构建的移动应用程序中设置通用链接。我试图在我的网站上匹配的路径是www.mywebsite.com/route?query=xxx

苹果文档有一个示例apple-app-site-association文件,如下所示。

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "9JA89QQLNQ.com.apple.wwdc",
                "paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"]
            },
            {
                "appID": "ABCD1234.com.apple.wwdc",
                "paths": [ "*" ]
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

但此示例没有带有查询字符串的路径示例。

如何www.mywebsite.com/route?query=xxx在 apple-app-site-association 文件中匹配我的路线?

谢谢

Ish*_*nha 5

正如本视频中提到的,我们现在可以在 iOS 13 及更高版本中使用components数组并处理这种通用链接:

从今年开始,我们将paths用钥匙更换components钥匙。

该键的值是一个字典数组,每个字典都包含零个或多个要进行模式匹配的 URL 组件。path和以前一样,您可以匹配以正斜杠为键的 URL组件。如果您需要支持以前的版本,则可以保留路径键。

如果组件密钥存在,iOS 13、tvOS 13 和 macOS 10.15 将忽略它。现在,您可以匹配 URL 的片段组件(其键为哈希标记),也可以匹配键为问号的查询组件。

现在,许多(如果不是大多数)URL 将其查询组件划分为称为查询项的键值对。对于查询组件,您可以指定字典而不是字符串,因为其值和模式与各个查询项匹配。URL 可能会重复查询项名称,操作系统将要求给定查询项名称的所有实例都与您的模式匹配。

例子:

"components": [
      {
              "/": "/help/*",
              "?": { "articleNumber": "????", "articleName": "?*" },
              "comment": "Matches any URL whose path starts with /help/ and which has a query item with name 'articleNumber' and a value of exactly 4 characters, and another with name 'articleName' and a value of one or more characters"
           }
    ]
Run Code Online (Sandbox Code Playgroud)

操作系统将没有值的查询项和不存在的查询项视为具有等于空字符串的值。

对于与候选 URL 匹配的组件字典,所有指定的组件都必须匹配。如果您不指定组件,操作系统的默认行为是简单地忽略该组件。因此,例如,如果您的应用程序不关心 URL 的片段组件,则无需在此文件中指定它。您网站的某些部分可能尚无法在您的应用程序中显示。您可以通过指定具有布尔值 true 的排除键来排除此类小节。

该键与您在旧 paths 键中使用的 not 关键字具有相同的行为。使用组件的字典时不支持该关键字。