首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在成功登录UIWebView后跳转回app

如何在成功登录UIWebView后跳转回app
EN

Stack Overflow用户
提问于 2017-09-18 20:05:19
回答 2查看 5.2K关注 0票数 1

我正在使用带有UIWebView的UIViewController。在此UIWebView中,用户必须登录,成功登录后,应将用户重定向回应用程序。但在我的例子中,它停留在UIWebView中,不会将我重定向回应用程序。

我尝试在API Delegate中使用以下代码:

代码语言:javascript
复制
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
    DispatchQueue.main.async {
        if (url.scheme == "go-back"){
            let storyboard = UIStoryboard(name: "Main", bundle: nil)
            let controller = storyboard.instantiateViewController(withIdentifier: "WebView") as! ViewController
            self.window?.rootViewController!.present(controller, animated: true, completion: { () -> Void in
            })
        }
    }
    return true
}

并创建了一个URL方案,但它不起作用。

EN

回答 2

Stack Overflow用户

发布于 2017-09-18 20:33:23

Step1 :

在你的ViewController中使用WKWebView而不是UIWebView

Step2 :

让你的ViewController成为WKWebView的代表

代码语言:javascript
复制
    webView.navigationDelegate = self
    webView.uiDelegate = self

Step3 :

最后,在ViewController中实现WKNavigationDelegate

代码语言:javascript
复制
    extension ViewController : WKNavigationDelegate{

        func webView(
            _ webView: WKWebView,
            decidePolicyFor navigationAction: WKNavigationAction,
            decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {

            guard let url = navigationAction.request.url else {
                decisionHandler(.allow)
                return
            }

            //now u and ur server team can decide on what url will they redirect and what will be url string on login success
            //lets say u and ur server team decides url to be https://some_base_url/login/success

           if url.absoluteString.contains("/login/success") {
                // this means login successful
                decisionHandler(.cancel)
                _ = self.navigationController?.popViewController(animated: false)
            }
            else {
                decisionHandler(.allow)
            }
        }
}

编辑:

由于OP的代码有问题,我正在更新答案以解决此问题

代码语言:javascript
复制
import UIKit
import WebKit

class ViewController: UIViewController, WKUIDelegate, WKNavigationDelegate{

    var webView: WKWebView!


    override func loadView() {
        let webConfiguration = WKWebViewConfiguration()
        webView = WKWebView(frame: .zero, configuration: webConfiguration)
        webView.uiDelegate = self
        view = webView
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        let myURL = URL(string: "https://")
        let myRequest = URLRequest(url: myURL!)
        webView.load(myRequest)
    }

    func webView(
        _ webView: WKWebView,
        decidePolicyFor navigationAction: WKNavigationAction,
        decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {

        guard let url = navigationAction.request.url else {
            decisionHandler(.allow)
            return
        }


        if url.absoluteString.contains("/login/success") {
            // this means login successful
            decisionHandler(.cancel)
            _ = self.navigationController?.popViewController(animated: false)
        }
        else {
            decisionHandler(.allow)
        }
    }
}
票数 5
EN

Stack Overflow用户

发布于 2017-09-18 22:37:23

代码语言:javascript
复制
//

导入UIKit导入WebKit

类ViewController: UIViewController,WKUIDelegate,WKNavigationDelegate{

代码语言:javascript
复制
var webView: WKWebView!


override func loadView() {
    let webConfiguration = WKWebViewConfiguration()
    webView = WKWebView(frame: .zero, configuration: webConfiguration)
    webView.uiDelegate = self
    view = webView
}
override func viewDidLoad() {
    super.viewDidLoad()

    let myURL = URL(string: "https://")
    let myRequest = URLRequest(url: myURL!)
    webView.load(myRequest)
}}func webView(
_ webView: WKWebView,
decidePolicyFor navigationAction: WKNavigationAction,
decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {

guard let url = navigationAction.request.url else {
    decisionHandler(.allow)
    return
}


if url.absoluteString.contains("/login/success") {
    // this means login successful
    decisionHandler(.cancel)
    _ = self.navigationController?.popViewController(animated: false)
}
else {
    decisionHandler(.allow)
}

}

我使用下面这行代码得到了错误:

代码语言:javascript
复制
  if url.absoluteString.contains("/login/success") {
    // this means login successful
    decisionHandler(.cancel)
    _ = self.navigationController?.popViewController(animated: false)
}

这说明使用未解析标识符"self“

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46278844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档