当我到达某个页面时,我试图关闭SFSafariViewController。
但是在明确按下“完成”按钮之前我无法执行此操作 由用户。
我想要的是一旦到达某个页面就获取URL,然后关闭视图控制器。 然后我可以使用此
选择其余的func safariViewControllerDidFinish(_ controller: SFSafariViewController){
// do work here
}
注意:此问题之前已被问过,但我找不到任何问题 满意的答案
答案 0 :(得分:3)
也许已经晚了,但我认为它将帮助任何人搜索相同的问题 听SFSafariViewControllerDelegate委托,您可以在
内部使用此方法func safariViewController(_ controller: SFSafariViewController, initialLoadDidRedirectTo URL: URL) {}
在其中可以确定是否需要对特定页面进行处理,例如,如果要在到达特定页面时将其关闭,我会为此
func safariViewController(_ controller: SFSafariViewController, initialLoadDidRedirectTo URL: URL) {
if URL.absoluteString == "WHATEVER YOUR LINK IS"{
controller.dismiss(animated: true, completion: nil)
}
}
答案 1 :(得分:1)
你不能用SFSafariViewController
做到这一点。请改用WKWebView
并实施WKNavigationDelegate
方法optional func webView(_ webView: WKWebView,
didFinish navigation: WKNavigation!)
,然后阅读当前网址。根据它定义您的行动。
您可以使用此选项关闭包含Web视图的视图控制器。遗憾的是,如果您想让用户访问这些按钮,您必须构建自己的导航按钮(SFSafariViewController
具有的导航按钮)。你不必提供它们。
答案 2 :(得分:1)
如果您为自己的应用注册URI方案,则可能会在页面上显示一个链接,该链接会将您带回应用。那时你就在
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
你的AppDelegate 你可以做任何你想做的事。
“因为Safari View Controller可以访问用户 凭据,使用iCloud Keychain在所有设备上同步, 登录将变得轻而易举。[...]需要两个步骤。首先 您可以在这里使用自己的应用内浏览器,只需提供一个 SFSafariViewController的实例。
一旦用户完成登录和第三方网站 服务使用您自定义的URL方案重定向回您的应用程序 喂它,你可以在你的AppDelegate的handleOpenURL中接受它 方法
从那里你可以检查响应并关闭实例 SFSafariViewController,因为您知道身份验证 完成。
就是这样。两步。“
来源:http://asciiwwdc.com/2015/sessions/504#t=1558.026
请注意,不推荐handleOpenURL
方法支持application:openURL:options:
。