iOS通过子域名进行深度链接(通用链接)

6

我已经阅读了许多关于通用链接的文章,但仍然需要澄清一些问题。

我需要将通用链接添加到http://www.domain.com,但由于某些原因,我将无法使我的网站获得SSL认证,甚至不能在根文件夹中使用带有https的apple-app-site-association。因此,我想以不同的方式实现这一目标,我将在子域的根目录下放置apple-app-site-association文件,比如说https://www.app.domain.com/apple-app-site-association

然后,每当通用链接可用时,我将使用该子域打开每个通用链接,并且如果通用链接不可用,则将https://www.app.domain.com重定向到http://www.domain.com

Questions in my mind :-
  1. 苹果公司表示 - 文件需要通过HTTPS访问,且不得重定向,网址为https:///apple-app-site-association 。这里的“不得重定向”是什么意思?

  2. 如果苹果找不到与某个URL相关的通用链接,它会自己将其重定向到Safari吗?

  3. 这种添加通用链接的方式是否安全,或者说我们必须将主域名设置为HTTPS,或者至少将apple-app-site-association设置为HTTPS?
2个回答

5

这应该可以正常工作。明确回答你的问题:

  1. '无重定向' 意味着当 iOS 请求 https://www.app.domain.com/apple-app-site-association 时,它必须在那个地址找到文件。你不能有任何形式的重定向(Javascript、301、302等)。
  2. 如果一个 URL 不符合通用链接的要求,因为你没有在 apple-app-site-association 文件中使用包含规则来覆盖它,它将会在 Safari 中打开。如果 URL 在另一个没有有效的 apple-app-site-association 文件的域上(例如 http://www.domain.com/),那么它也将在 Safari 中打开。
  3. 是的,这样做没问题。虽然是一种变通方法,但并不不安全。

你还应该调查一下托管深度链接服务,比如 Branch.io(完全透明:我是 Branch 团队的一员)或 Firebase 动态链接。这些服务将为你提供所有相同的好处(而且说实话,还会提供更多灵活性),而不需要进行任何设置方面的麻烦。


嗨,Alex,关于#1,你有来源吗?在哪里说不允许所有类型的重定向? - Sorcerer
1
@Sorcerer 在官方苹果文档页面上可以找到这个内容:https://developer.apple.com/library/content/documentation/General/Conceptual/AppSearch/UniversalLinks.html - Alex Bauer
如果你在Apache上测试302,它可以工作。似乎Safari和iOS上的Chrome不关心这些重定向。我同意苹果文档明确表示“没有任何重定向”,但如果你使用302进行测试,它可以工作。 - Sorcerer
@Sorcerer 哇,那可能会改变游戏规则。能分享一下你的实现方式吗? - Alex Bauer
我将会写一个常规回复来回答这个问题,因为这个答案需要一点篇幅。 - Sorcerer
嗨!我有一个关于多个子域名(a.b.domain.com)的问题。单个子域名可以深度链接并打开应用程序(a.domain.com)。但是a.b.domain.com不能。两者都通过功能完全相同的方式进行配置。两者都托管了完全相同的apple-app-site-association文件。也许我应该将apple-app-site-association文件添加到整个站点的根目录(domain.com),或者将其添加到子域名的1个级别(b.domain.com,而不是a.b.domain.com)?https://dev59.com/Vbfna4cB1Zd3GeqPpUFW - FranticRock

1
我们已经找到了iOS上302的使用方法。 总体来说,我完全同意苹果官方似乎不支持任何重定向。 以下情况在运行iOS 11的iPhone 6上进行了测试。

这些情况可以:

  • 在iOS的Chrome浏览器中的网站:用户点击链接A302将其重定向到通用链接B
  • 在iOS的Safari浏览器中的网站:用户点击链接A302将其重定向到通用链接B
  • iOS上的Gmail应用程序:用户点击电子邮件中的链接,Gmail会打开外部Chrome浏览器,该浏览器会打开一个Google链接,该链接会通过302重定向到链接A,然后再通过通用链接B进行重定向。(只有安装了Chrome并且在Gmail设置中用户明确将默认浏览器更改为Chrome时,此情况才可行)

这些情况无法:

  • Apple Mail:用户在邮件中点击链接A,会打开外部Safari。302发生并打开通用链接B。结果:应用程序不会打开。
  • Gmail应用程序:用户在电子邮件中点击链接A,会打开Gmail inAppBrowser(可能是WKWebview?)。 Gmail将电子邮件中的每个链接重定向到谷歌服务器,作为第二步链接A被打开(不知道是通过302还是其他方法),然后302发生并打开通用链接B。结果:应用程序不会打开。

不幸的是,您可以看到在某些情况下它无法正常工作。由于iOS上的Apple Mail和Gmail对我们大多数人都非常重要,我认为这是一个停滞不前的问题,您不应该使用它。

我们使用Adjust链接进行了测试,因此在应用程序无法打开时,Adjust会打开AppStore下载应用程序。

对于所有对Adjust感兴趣的人:我们通过打开链接https://app.adjust.com/进行了测试......该链接在相应的通用链接https://XXXXXXX.adj.st/上有一个302,我们的应用程序正在监听该链接。


啊啊啊... @Sorcerer,我误解了你最初的观点。是的,这些情况实际上是众所周知的,尽管看到它们详细地写出来很棒!由于某种原因,我以为你特别在谈论 apple-app-site-association 文件,它不能被任何类型的重定向所覆盖 - 在那里工作的 302 将成为重大新闻。 - Alex Bauer
@AlexBauer 我认为你理解错了。我回复的最后一部分说,https://app.adjust.com/... 通过302重定向到 https://XXXXXXX.adj.st/...,后者包含apple-association-file。另一个域名app.adjust.com没有关联文件,所以这似乎是302有效的情况之一。当然,只适用于概述的情况。 - Sorcerer
是的,这很有道理。AASA文件只在应用程序首次安装时被抓取一次。只要iOS在XXXXXX.adj.st找到该文件,其他所有内容都按照您描述的方式工作。 - Alex Bauer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接