在某个 url 上关闭 SFSafariViewController

Moa*_*han 6 xcode ios swift sfsafariviewcontroller

当我到达某个页面时,我试图关闭 SFSafariViewController。

但是在用户明确按下“完成”按钮之前,我无法执行此操作。

我想要的是在到达某个页面后立即获取 URL,然后关闭视图控制器。然后我可以使用这个选择其余的

func safariViewControllerDidFinish(_ controller: SFSafariViewController){
    // do work here
}
Run Code Online (Sandbox Code Playgroud)

注意:这个问题以前有人问过,但我找不到任何满意的答案

DBD*_*DBD 5

如果您为应用程序注册了 URI 方案,则页面上可能会有一个链接,可将您带回应用程序。那时你将处于

\n\n
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {\n
Run Code Online (Sandbox Code Playgroud)\n\n

你的AppDelegate,你可以做任何你想做的事。

\n\n
\n

\xe2\x80\x9c因为 Safari View Controller 可以访问用户\xe2\x80\x99s\n 凭据,并使用 iCloud 钥匙串在所有设备上同步,\n 登录将变得轻而易举。[\xe2\ x80\xa6] 需要两个步骤。第一个\n是您\xe2\x80\x99使用自己的应用内浏览器的位置,只需提供\n SFSafariViewController 的实例。

\n\n

用户完成登录后,第三方 Web 服务将使用您提供的自定义 URL 方案重定向回您的应用,您可以在 AppDelegate\xe2\x80\x98s 中接受该设置。方法。

\n\n

从那里您可以检查响应并关闭 SFSafariViewController 的实例,因为您知道身份验证已完成。

\n\n

那\xe2\x80\x99就是它。两步。\xe2\x80\x9d

\n
\n\n

资料来源:http ://asciiwwdc.com/2015/sessions/504#t=1558.026

\n\n

请注意,该handleOpenURL方法已被弃用,取而代之的是application:openURL:options:

\n


小智 2

你不能用SFSafariViewController. 使用 aWKWebView代替并实现WKNavigationDelegate类似的方法optional func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!),然后读取当前 URL。在此基础上定义你的行动。

您可以使用它来关闭容纳 Web 视图的视图控制器。SFSafariViewController不幸的是,如果您想允许用户访问这些按钮,您将必须构建自己的导航按钮(具有的导航按钮)。您不必提供它们。