如何正确格式化和提供 apple-app-site-association 文件

Syn*_*hro 5 app-store ios ios-universal-links

apple-app-site-association我正在尝试为共享一组公共路径的多个应用程序设置一个文件。Apple 提供的两套文档存在冲突。首先,该文档说每个应用程序都应该有自己的部分,然后有一个包含映射的 paths 元素:

{
    "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)

然后有一个 XCode 文档,它显示了完全不同的格式:

{
  "applinks": {
      "details": [
           {
             "appIDs": [ "ABCDE12345.com.example.app", "ABCDE12345.com.example.app2" ],
             "components": [
               {
                  "#": "no_universal_links",
                  "exclude": true,
                  "comment": "Matches any URL whose fragment equals no_universal_links and instructs the system not to open it as a universal link"
               },
               {
                  "/": "/buy/*",
                  "comment": "Matches any URL whose path starts with /buy/"
               },
               {
                  "/": "/help/website/*",
                  "exclude": true,
                  "comment": "Matches any URL whose path starts with /help/website/ and instructs the system not to open it as a universal link"
               },
               {
                  "/": "/help/*",
                  "?": { "articleNumber": "????" },
                  "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"
               }
             ]
           }
       ]
   },
   "webcredentials": {
      "apps": [ "ABCDE12345.com.example.app" ]
   },

    "appclips": {
        "apps": ["ABCED12345.com.example.MyApp.Clip"]
    }
}
Run Code Online (Sandbox Code Playgroud)

两个文档都没有任何日期或版本信息,因此我无法判断哪个文档更新或更正确。

appID 本身也令人困惑,因为这些标识符显然有多个来源,但并非所有来源都有效,尽管我现在不知道这是否是我的问题。

我正在从 提供我的文档/.well-known/apple-app-site-association,但我发现验证器会出现奇怪的验证失败,例如无法获取文件(尽管使用curl或浏览器获取文件效果很好),并且抱怨无法使用它进行验证openssl,这没有任何意义,因为它不包含任何与证书或签名模糊相关的内容。application/pkcs7-mime当文档既不是 MIME 也不是 PKCS7 格式时,为什么需要使用 MIME 类型进行传递?

看看Apple自己的AASA,我发现它使用了这两种格式!它也无法在我尝试过的所有验证器中进行验证,包括苹果自己的验证器!这很令人困惑。

该文档究竟应该如何格式化?

小智 2

就像您提到的,似乎有两种不同类型的apple-app-site-association,特别是在applinks键下:"appID"and"paths""appIDs"and "components"。我猜测其中之一可能是 Apple 为了向后兼容而支持的旧版 API。

我找到了相关文件components

引用可用的内容components

/:与 URL 路径组件匹配的模式。默认值为 *,匹配所有内容。

?:与 URL 查询组件匹配的模式或字典。默认值为 *,匹配所有内容。

#:与 URL 片段组件匹配的模式。默认值为 *,匹配所有内容。

exclude:一个布尔值,指示如果 URL 与关联模式匹配,是否停止模式匹配并阻止通用链接打开。默认为 false。

comment:系统忽略的文本。使用它来提供有关模式匹配的 URL 的信息。

caseSensitive:一个布尔值,指示模式匹配是否区分大小写。默认为 true。

percentEncoded:一个布尔值,指示 URL 是否采用百分比编码。默认为 true。