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

2024-03-23

In the 通用链接 https://developer.apple.com/library/ios/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12-SW1的部分iOS 应用程序搜索编程指南 https://developer.apple.com/library/ios/documentation/General/Conceptual/AppSearch/index.html,苹果说:

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

“处理通用链接”是什么意思?我是否可以使用以下命令打开给定的 URL:SFSafariViewController, WKWebView, or UIWebView?是否仅适用于-[UIApplicationDelegate application:continueUserActivity:restorationHandler:],或者是否有超时?这是否意味着我们无法在SFSafariViewController, WKWebView, or UIWebView?


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

只是为了介绍基础知识,我将让 Apple 进行解释什么是通用链接 https://developer.apple.com/library/content/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12-SW1:

通用链接允许用户在 WKWebView 和 UIWebView 视图以及 Safari 页面中点击指向您网站的链接时打开您的应用程序,此外还有导致调用 openURL: 的链接(例如邮件、消息和其他应用程序中出现的链接)。

基本上,假设您正在使用 Twitter 客户端,并浏览时间线,您会遇到一条包含以下 YouTube 视频链接的推文:https://youtu.be/ejQod8liXm0 https://youtu.be/ejQod8liXm0

如果您点击它,因为它是一个 HTTP URL,您会期望 Safari 会打开该链接。然而,我认为我们所有的 iOS 开发者几乎都同意这样一个事实:原生应用程序更好,因此更好的用户体验将是用于打开视频的官方 YouTube 应用,甚至来自您的第三方客户端。

这就是“通用链接”所允许的;如果 YouTube 应用程序在 iOS 上将自己注册为负责处理的应用程序https://www.youtube.com https://www.youtube.com(*) 链接,如果我们遵守 API 规则,iOS 生态系统中的每个人都会受益。如果您运行一个网站,并且您希望您的任何内容触发您的官方 iOS 应用程序打开(如果您的用户安装了该应用程序),或者提示用户是否愿意安装该应用程序(以获得更好的用户体验),也会发生同样的情况经验(当然,也是为了帮助您的业务)。

那么,抛开所有这些,让我们回到原文:

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

这意味着,如果您的用户在您的应用程序中点击指向您内容的通用链接(例如:http://www.your-company.com/foo http://www.your-company.com/foo),并且您不会通过例如正则表达式在应用程序的代码中检测到这一点,而是实例化一个SFSafariViewController, WKWebView or UIWebView打开它,就像它是一个常规链接一样纽约时报 https://www.nytimes.com/section/technology或者其他什么,操作系统会理解,而不是在您的应用程序中打开它,您希望 Safari 为您处理此问题. Remember:通用链接的全部目的是让用户通过本机应用程序(而不是浏览器)处理 URL 来获得更好的体验。

这就是第一句话所说的。至于第二个问题,它解决了一个潜在的后续问题:如果用户从嵌入式浏览器点击指向我的内容的通用链接会怎样?来自不是我的另一个应用程序?然后,该句子说,操作系统将正常运行:它将打开您的应用程序,尊重通用链接规则。

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

EDIT:如果您需要帮助决定是否询问SFSafariViewController or the -openURL:options:completitionHandler:用于打开 URL 的 API,这个链接应该对你有帮助 https://useyourloaf.com/blog/openurl-deprecated-in-ios10/; 我的建议是使用-openURL:options:completitionHandler:首先,如果不成功,则使用SFSafariViewController或类似的.

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

干杯!祝 iOS 11 编程愉快! :)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我什么时候可以使用具有通用链接的 SFSafariViewController、WKWebView 或 UIWebView? 的相关文章

随机推荐