【问题标题】:iOS Associated Domains (Universal Links) with Wildcards not working带有通配符的 iOS 关联域(通用链接)不起作用
【发布时间】:2016-09-15 01:05:07
【问题描述】:

在我正在开发的 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,它们是今天的最新版本。

【问题讨论】:

标签: ios ios-universal-links associated-domains


【解决方案1】:

我将我的发现添加到此线程: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,并且您在 domain.com 上有一个 301 重定向(将您重定向到 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.comserver2.app.domain.com 等等。

但请注意,如果您计划将该服务器也用于您的应用程序,则还必须明确指定 applinks:app.domain.com

我希望这会有所帮助。

【讨论】:

    【解决方案2】:

    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 是吗?如果不是:尝试更改它。我认为它会解决你的问题。

    Here you can found a copy of this release notes(对不起,我没有其他公开来源)

    编辑:

    即使Apple Doc 说您可以在域上使用通配符,they seems to have an issue on this

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

    【讨论】:

    • 您好,谢谢。不幸的是,更改部署目标并没有产生任何影响。
    【解决方案3】:

    我认为这是文档中的苹果错误。我在 9.3.1 上遇到了同样的错误。 9.3.2 工作正常。很有意思的链接,关于signing problems, see Laurence Fan's comment

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 有什么变化吗?我在使用通配符应用程序链接时遇到了同样的问题。我将部署目标设置为最低 iOS 10.0。
      • 是的,iOS 通配符应用链接这些天实际上可以正常工作。
      【解决方案5】:

      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"]
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-19
        • 2018-10-07
        • 2017-04-06
        • 1970-01-01
        • 2016-01-28
        • 1970-01-01
        • 2017-08-03
        • 2015-09-09
        相关资源
        最近更新 更多