你如何允许 WKWebView 接受重定向 url
Posted
技术标签:
【中文标题】你如何允许 WKWebView 接受重定向 url【英文标题】:How do you allow the WKWebView to accept redirect url 【发布时间】:2017-12-10 23:12:40 【问题描述】:在将用户重定向到 WKWebView 的链接时遇到问题。
用户本质上是要使用 WKWebView 在网站上进行身份验证,网站会检查身份验证,进而将用户重定向回我们的应用程序。
我最初的想法是在重定向过程中允许用户退出应用程序存在某种限制。这就是为什么我实现了 WKNavigationDelegate 并看到当我们尝试验证下面的代码时 didReceive 挑战会贯穿第二个 if 案例——我只认为这是一件好事。虽然应用程序没有被重定向。
下面是我的代码。
import UIKit
import WebKit
class WebViewViewController: UIViewController, WKUIDelegate, WKNavigationDelegate
var webView: WKWebView!
override func viewDidLoad()
super.viewDidLoad()
navigationController?.navigationBar.isHidden = false
tabBarController?.tabBar.isHidden = true
webView.navigationDelegate = self
if let url = URL(string: "SomeUrl")
let request = URLRequest(url: url)
webView.load(request)
override func loadView()
let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.uiDelegate = self
view = webView
override func viewWillAppear(_ animated: Bool)
self.navigationController?.navigationBar.isHidden = false
override func viewWillDisappear(_ animated: Bool)
self.tabBarController?.tabBar.isHidden = false
func webViewDidFinishLoad(_ webView: UIWebView)
if let URL = webView.request?.url
OAuthHelper.oAuthManager.processOAuthStep1Response(url: URL)
func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!)
func webView(_ webView: WKWebView, didReceiveServerRedirectForProvisionalNavigation navigation: WKNavigation!)
func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void)
if challenge.previousFailureCount > 0
completionHandler(Foundation.URLSession.AuthChallengeDisposition.cancelAuthenticationChallenge, nil)
else if let serverTrust = challenge.protectionSpace.serverTrust
completionHandler(Foundation.URLSession.AuthChallengeDisposition.useCredential, URLCredential(trust: serverTrust))
else
print("unknown state. error: \(challenge.error)")
// do something w/ completionHandler here
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void)
if (navigationAction.navigationType == .linkActivated)
decisionHandler(.cancel)
else
decisionHandler(.allow)
【问题讨论】:
【参考方案1】:我没有完全理解这个问题。如果问题是如果您希望用户从 Webview 重定向到 Native App,那么您确实有不同的选择。我将提供选项。如果您正在查看,请告诉我。
-
使用 WKURLSchemeHandler 处理自定义 URL。阅读我关于此的文章。 https://medium.com/@kumarreddy_b/custom-scheme-handling-in-uiwebview-wkwebview-bbeb2f3f6cc1。 https://github.com/BKRApps/KRWebView
你将在 func webView(_ webView: WKWebView, decisionPolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) 中获取 url,在这里你可以截取 URL 然后使用您的 URL 方案进入本机应用程序。使用 OpenUrl 来执行此操作。但这已被弃用。
【讨论】:
以上是关于你如何允许 WKWebView 接受重定向 url的主要内容,如果未能解决你的问题,请参考以下文章
与 UIWebView 相比,WKWebView 重定向问题
允许重定向到不在 htdocs 中的 URL (XAMPP)