[英]how to redirect iOS app to a specific view controller or url after successful Facebook login rather than on login page again
[英]How to redirect back to app after successful login in a UIWebView
我正在将UIViewController与UIWebView一起使用。 在此UIWebView中,用户必须登录,成功登录后,应将用户重定向回应用程序。 但就我而言,它保留在UIWebView中,并且不会将我重定向回该应用程序。
我试图在API委托中使用以下代码:
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方案,但是它不起作用。
第1步 :
在ViewController中使用WKWebView
而不是UIWebView
。
第2步 :
使您的ViewController成为WKWebView
的委托
webView.navigationDelegate = self
webView.uiDelegate = self
第三步:
最后在您的ViewController
实现WKNavigationDelegate
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的代码存在问题,因此正在更新答案以解决该问题
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)
}
}
}
//
导入UIKit导入WebKit
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)
}
}
我通过使用以下行得到了错误:
if url.absoluteString.contains("/login/success") {
// this means login successful
decisionHandler(.cancel)
_ = self.navigationController?.popViewController(animated: false)
}
表示使用未解决的标识符“自我”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.