iOS通用链接与通配符无法正常工作

时间:2016-05-18 13:40:41

标签: ios ios-universal-links

在我正在开发的iOS应用中,我设置了Universal Links。该应用程序托管多个域。我使用通配符设置了一些域名。这些域似乎不起作用。例如,我想链接到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,它们是今天的最新版本。

5 个答案:

答案 0 :(得分:19)

我将我的发现添加到这个主题:https://forums.developer.apple.com/thread/47315

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

例如,如果您要使用*.domain.com,那么apple-app-site-association需要同时托管,例如app1.domain.comdomain.com,否则它不会只需在Xcode中指定applinks:*.domain.com即可。

如果您的主网站位于www.domain.com,并且您在domain.com上有301重定向(将您重定向到www.domain.com),这是不幸的,因为Universal Links不允许重定向。

我找到的解决方法是为您的应用创建一个主子域,并使用子子域作为通配符。 E.g。

  • 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

我希望这会有所帮助。

答案 1 :(得分:2)

似乎只在applinks中引入了iOS 9.3 Beta 2的域部分中添加通配符。在9.3 Beta 2发行说明中:

  

您现在可以将Universal Links与任意子域一起使用而不是   需要将所有应用程序的子域列为完全限定域   名。参赛作品的格式为:

     

:[:端口号],其中   “webcredentials”,“activitycontinuation”或“applinks”。

     

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

     

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:*。userss.mywebsite.com,   域名emily.users.mywebsite.com的匹配是针对   更长的* .users.mywebsite.com条目。注意一个条目   * .mywebsite.com与mywebsite.com不匹配,因为星号后的时间段。为* .mywebsite.com和。启用匹配   mywebsite.com,您需要为每个提供单独的applinks条目。

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

我在2016年9月尝试了这个,包括iOS 9.3.5和iOS 10 beta。情况似乎没有变化:如果applinks仅包含通配符域,则通用链接仍然无效,即使文档表明这应该有效。

答案 4 :(得分:0)

苹果在AASA文件中进行了更改以支持动态链接,请更改并在Assciate域中添加:webcredentials:dev.rologic.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"]
    }
}