swift 关闭某个url上的SFSafariViewController

jv2fixgn  于 2023-04-04  发布在  Swift
关注(0)|答案(3)|浏览(137)

我试图在到达某个页面时关闭SFSafariViewController。
但我无法做到这一点,直到“完成”按钮是由用户明确按下。
我想要的是在URL到达某个页面后立即获取URL,然后关闭视图控制器。

func safariViewControllerDidFinish(_ controller: SFSafariViewController){
    // do work here
}

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

ldioqlga

ldioqlga1#

如果你为你的应用注册了一个URI方案,你可以在一个页面上有一个链接,它可以把你带回到你的应用。

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {

你的AppDelegate,你可以做任何你想做的事情。
“因为Safari View Controller可以访问用户的凭据,并通过iCloud Keychain在所有设备上同步,登录将变得轻而易举。[...]这需要两个步骤。第一个步骤是使用自己的应用内浏览器,只需呈现SFSafariViewController的示例。
一旦用户完成登录,第三方Web服务使用您提供的自定义URL方案重定向回您的应用,您可以在AppDelegate的handleOpenURL方法中接受该方案。
从那里您可以检查响应并关闭SFSafariViewController的示例,因为您知道身份验证已经完成。
就这样,两步。”
来源:http://asciiwwdc.com/2015/sessions/504#t=1558.026
请注意,handleOpenURL方法已被弃用,转而支持application:openURL:options:

pgccezyw

pgccezyw2#

编辑:

答案变得无效…现在要这样做,你必须实现wkwebview组件

也许已经晚了,但我认为这将有助于任何人搜索相同的问题听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)
    }
}
iezvtpos

iezvtpos3#

使用SFSafariViewController无法做到这一点。请使用WKWebView并实现WKNavigationDelegate方法(如optional func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)),然后读取当前URL。基于此定义您的操作。
你可以使用这个来关闭包含你的web视图的视图控制器。不幸的是,如果你想允许用户访问这些按钮,你将不得不构建自己的导航按钮(SFSafariViewController拥有的那些)。你不必提供它们。

相关问题