29

在我正在开发的 iOS 应用程序中,我设置了关联域(通用链接)。该应用程序托管多个域。我用通配符设置了一些域。这些域似乎不起作用。例如,我想链接到https://news.mydomain.com/. 如果我将以下内容添加到关联域列表中:

applinks:*.mydomain.com-> 不工作

applinks:news.mydomain.com-> 工作正常

所以我相信我确实设置了所有正确的,apple-app-site-association 文件设置得很好。我什至可以在这两种情况下(使用 Charles Proxy)看到 apple-app-site-association 文件被正常检索。

对于通配符,该链接仅在 Safari 中打开。

当我配置没有通配符的域时,应用程序会打开。

我在这里错过了什么吗?我在设备上运行 iOS 9.3.2 并且运行 Xcode 7.3.1,它们是今天的最新版本。

4

5 回答 5

36

我将我的发现添加到此线程:https ://forums.developer.apple.com/thread/47315

简而言之,即使在 iOS 10 中,通配符设置似乎也要求apple-app-site-association文件由通配符的根提供。

例如,如果您想使用*.domain.com,则apple-app-site-association需要同时托管在两者上,例如app1.domain.comdomain.com,否则它不能简单地applinks:*.domain.com在 Xcode 中指定。

如果您的主站点托管在www.domain.com,并且您有一个 301 重定向domain.com(将您重定向到www.domain.com),这是不幸的,因为通用链接不允许重定向。

我发现的解决方法是为您的应用创建一个主子域,并为通配符使用子子域。例如

  • app.domain.com(必须送达apple-app-site-association文件)
  • server1.app.domain.com(必须服务apple-app-site-association
  • server2.app.domain.com(...)

这样,在 Xcode 中,您可以只指定applinks:*.app.domain.com通用链接,而无需在 Xcode 中指定server1.app.domain.com,server2.app.domain.com等等。

但是请注意,您还必须明确指定applinks:app.domain.com是否计划将该服务器与您的应用程序一起使用。

我希望这有帮助。

于 2016-11-07T13:10:27.750 回答
3

似乎applinks只在iOS 9.3 Beta 2. 在 9.3 Beta 2 发行说明中:

您现在可以将通用链接与任意子域一起使用,而无需将应用程序的所有子域列为完全限定域名。条目具有以下形式:

:[:port number] 其中是“webcredentials”、“activitycontinuation”或“applinks”。

条目的部分现在可以选择以“*”作为前缀。表示通配符子域。例如:

应用链接:*.example.com

你说你跑iOS 9.3.2。但是你的deployment target>=iOS 9.3吗?如果不是:尝试更改它。我认为它会解决你的问题。

在这里您可以找到此发行说明的副本(抱歉,我没有任何其他公开来源)

编辑:

即使Apple Doc说您可以在域上使用通配符,他们似乎对此也有问题

要匹配关联域的所有子域,您可以通过前缀指定通配符。在特定域的开始之前(需要句点)。域匹配基于 applinks 条目中最长的子字符串。例如,如果您指定条目 applinks: .mywebsite.com 和 applinks:*.users.mywebsite.com,则会针对较长的 *.users.mywebsite.com 条目执行域 emily.users.mywebsite.com 的匹配。请注意,*.mywebsite.com 的条目与 mywebsite.com 不匹配,因为星号后面有句点。要为 *.mywebsite.com 和 mywebsite.com 启用匹配,您需要为每个提供单独的 applinks 条目。

于 2016-05-19T08:36:07.620 回答
1

我在 2016 年 9 月使用 iOS 9.3.5 和 iOS 10 beta 进行了尝试。情况似乎没有改变:如果 applinks 仅包含通配符域,则通用链接仍然无法正常工作,即使文档表明这应该可以工作。

于 2016-09-02T12:29:57.943 回答
1

我认为这是文档中的苹果错误。我在 9.3.1 上遇到了同样的错误。9.3.2 工作正常。非常有趣的链接,关于签名问题,见劳伦斯范的评论

Apple 应该说 *.domain.com 在此链接中适用于 >= 9.3.2 Support Universal Links

于 2016-05-19T08:17:37.757 回答
0

Apple 已更改 AASA 文件以支持动态链接,请更改并在关联域中添加:webcredentials:dev.rlogical.com

{
  "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"]
    }
}
于 2020-09-11T10:06:44.433 回答