什么时候可以使用带有通用链接的SFSafariViewController,WKWebView或UIWebView?

在“ iOS应用程序search编程指南”的“ 通用链接”部分,苹果说:

如果您实例化SFSafariViewController,WKWebView或UIWebView对象来处理通用链接,iOS会在Safari中打开您的网站而不是打开您的应用程序。 但是,如果用户从embedded的SFSafariViewController,WKWebView或UIWebView对象中点击通用链接,iOS将打开您的应用程序。

“处理通用链接”是什么意思? 我是否可以用SFSafariViewControllerWKWebViewUIWebView打开给定的URL? 它只适用于-[UIApplicationDelegate application:continueUserActivity:restorationHandler:] ,还是有一个超时的地方? 这是否意味着我们无法在SFSafariViewControllerWKWebViewUIWebView打开URL?

我不确定我完全理解你的问题。

为了介绍基本知识,我将允许苹果解释一个通用链接是什么 :

通用链接可让用户在WKWebView和UIWebView视图以及Safari页面中点击到您网站的链接时,打开您的应用程序以及导致对openURL的调用的链接,例如在Mail,Messages和其他应用程序中发生的链接。

所以基本上,假设你正在使用一个Twitter客户端,并且通过时间轴,你会遇到一个推特,其video链接如下: https : //youtu.be/ejQod8liXm0

如果你点击它,因为它是一个HTTP URL,你会希望Safari打开链接。 不过,我认为我们所有的iOS开发者几乎都同意这个事实,即原生应用程序更好 ,所以更好的用户体验将是官方的YouTube应用程序打开video ,甚至从您的第三方客户端。

这是“通用链接”允许的; 如果YouTube应用程序在iOS上注册为负责处理https://www.youtube.com (*)链接的应用程序,则iOS生态系统中的每个人都可以从中受益,只要我们遵循API规则即可 。 同样的事情发生,如果你运行一个网站,你想让你的任何内容触发你的官方iOS应用程序打开,如果你的用户已经安装,或为用户提示,如果他们想要安装一个更好的用户经验(当然也是为了帮助您的业务)。

所以,所有这一切,让我们回到原来的文字:

如果您实例化SFSafariViewController,WKWebView或UIWebView对象来处理通用链接,iOS会在Safari中打开您的网站而不是打开您的应用程序。 但是,如果用户从embedded的SFSafariViewController,WKWebView或UIWebView对象中点击通用链接,iOS将打开您的应用程序。

这意味着,如果从您的应用程序,您的用户点击通用链接到您的内容(例如: http : //www.your-company.com/foo ),并且您不检测您的应用程序的代码中通过例如一个正则expression式,而是实例化一个SFSafariViewControllerWKWebViewUIWebView来打开它,就好像它是纽约时报的一个常规链接什么的,操作系统会明白,而不是在你的应用程序中打开这个, 你希望Safari为你处理这个请记住 :通用链接的全部目的是让用户通过本地应用程序而不是浏览器来处理URL,从而获得更好的体验。

这是第一句话所说的。 至于第二,它清除了一个潜在的后续问题:如果用户从另一个不是我的应用程序的embedded式浏览器的通用链接到我的内容如何点击? 然后,句子说,操作系统将正常行为:它将打开您的应用程序,尊重通用链接规则。

TL; DR:您需要从代码中检测应用程序中的通用链接,然后处理它们 。 iOS不会为你处理。 相反,如果您告诉操作系统在应用程序的embedded式浏览器中打开通用链接到应用程序的内容,则完全按照所述方式进行操作。

编辑:如果您需要帮助决定之间询问SFSafariViewController-openURL:options:completitionHandler: APIs打开一个URL, 这个链接应该帮助你 ; 我的build议是使用-openURL:options:completitionHandler:首先,如果不成功,则使用SFSafariViewController或类似的

希望这有助于我正确理解你的问题。

干杯! 和快乐的iOS 11编程! 🙂