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

Hea*_*ers 21 uiwebview ios applinks wkwebview sfsafariviewcontroller

iOS App Search Programming GuideUniversal Links部分中,Apple说:

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

"处理通用链接"是什么意思?我不能永远打开给定的URL与SFSafariViewController,WKWebViewUIWebView?它是否仅适用于期间-[UIApplicationDelegate application:continueUserActivity:restorationHandler:],或是否存在超时?这是否意味着在我们永远不能打开的URL SFSafariViewController,WKWebViewUIWebView

din*_*ani 6

我不确定我是否完全理解您的问题。

仅介绍基础知识,我将允许Apple解释什么是Universal Link

通用链接使用户可以在点击WKWebView和UIWebView视图以及Safari页面中的网站链接时打开您的应用程序,此外还可以导致调用openURL:的链接,例如在Mail,Messages和其他应用程序中出现的链接。

因此,基本上,假设您正在使用Twitter客户端,并在时间轴上遇到一条带有以下YouTube视频链接的推文:https : //youtu.be/ejQod8liXm0

如果单击它,因为它是HTTP URL,所以您希望Safari打开链接。但是,我认为我们所有的iOS开发人员几乎都可以同意原生应用程序更好的事实,因此,更好的用户体验是,即使从第三方客户端打开视频官方YouTube应用程序也可以打开视频

这就是“通用链接”所允许的;如果YouTube应用在iOS上注册为负责处理https://www.youtube.com(*)链接的应用,那么如果我们遵循API规则,iOS生态系统中的每个人都会受益。如果您经营一个网站,并且希望您的任何内容触发正式的iOS应用程序(如果您的用户已安装),或者如果想要为更好的用户安装该应用程序,则会提示用户经验(当然可以帮助您的业务)。

因此,所有这些都已解决,让我们回到原始文本:

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

这意味着,如果您从您的应用程序中,用户点击了指向您内容的通用链接(例如:http : //www.your-company.com/foo),而您未通过以下方式在应用程序的代码中检测到此问题:例如,使用正则表达式,然后实例化一个SFSafariViewControllerWKWebViewUIWebView将其打开,就好像它是指向《纽约时报》或其他内容的正则链接一样,操作系统将了解,而不是在您的应用中打开它,您希望Safari处理此问题你请记住:通用链接的全部目的是使URL由本机应用程序而非浏览器处理,从而使用户获得更好的体验。

这就是第一句话。至于第二个问题,它消除了一个潜在的后续问题:如果用户从另一个非我的应用程序中通过嵌入式浏览器点击通用链接到我的内容怎么办?然后,该句子说,操作系统将正常运行:它将遵循通用链接规则打开您的应用程序。

TL; DR:您还需要在应用程序中通过代码检测到内容的通用链接,并进行处理。iOS不会为您处理此问题。相反,如果您告诉操作系统从您的应用程序在嵌入式浏览器中打开指向您应用程序内容的通用链接,它将完全按照指示进行操作。

编辑:如果您需要帮助来决定在询问SFSafariViewController还是-openURL:options:completitionHandler:打开一个URL 的API 之间进行选择,此链接应为您提供帮助我的建议是先使用-openURL:options:completitionHandler:,如果不成功,则使用SFSafariViewController或类似的方法

希望这会有所帮助,并且我已经正确理解了您的问题。

干杯! 和快乐的iOS 11编程!:)

  • 我认为以下链接提供了您正在寻找的答案:https://useyourloaf.com/blog/openurl-deprecated-in-ios10/这个想法是,您可以先使用`-openURL:options:completitionHandler:`。 ,如果操作不成功(**布尔值成功=假**),则可以改用SFSafariViewController或类似的方法。 (2认同)
  • 请更新您的答案以直接包含此答案,我会标记为正确。谢谢! (2认同)