在应用程序和应用程序内的webview中共享会话-IOS Swift

在应用程序和应用程序内的webview中共享会话-IOS Swift,ios,swift,uiwebview,Ios,Swift,Uiwebview,您好,我有一个用swift编写的IOS应用程序,该应用程序已登录,成功登录后,该应用程序将进入具有webView的活动 应用程序和网站共享相同的api。登录过程是在我提供正确的用户名和密码api返回令牌 我使用Alamofire框架作为http请求正确管理应用程序登录 Alamofire.request(.POST, url, parameters: param).responseJSON{ (request, response, JSONdata, error) in

您好,我有一个用swift编写的IOS应用程序,该应用程序已登录,成功登录后,该应用程序将进入具有
webView
的活动

应用程序和网站共享相同的api。登录过程是在我提供正确的
用户名
密码
api返回
令牌

我使用Alamofire框架作为http请求正确管理应用程序登录

Alamofire.request(.POST, url, parameters: param).responseJSON{ (request, response, JSONdata, error) in
            if error != nil {
                let result = ["Error" : "Unexpected Error!"]
                callback(result: result)
            } else {
                if response?.statusCode == 401 {


                        println(401)
                        let result = ["Error" : "User not found!"]
                        callback(result: result)


                } else if response?.statusCode == 200 {
                    let responseDict = JSONdata as! NSDictionary
                    callback(result:responseDict)
                }
            }
        }
这是我展示的webview代码

let requestURL = NSURL(string: "myURL")
let request = NSMutableURLRequest(URL: requestURL!)

webView.loadRequest(request)
我需要在webview中显示正在发生的网站,但我需要将会话共享给webview,因为它们与应用程序共享相同的api


有人能帮我吗?如何实现这一点。

如果您想将令牌作为一个整体传递到请求,您可以按照以下操作。在目标C中,将其转换为swift

NSURL *url = [NSURL URLWithString: @"http://your_url.com"];
NSString *body = [NSString stringWithFormat: @"token=%@",varToken];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL: url];
[request setHTTPMethod: @"POST"];
[request setHTTPBody: [body dataUsingEncoding: NSUTF8StringEncoding]];
[webView loadRequest: request];

如果您想将令牌作为一个主体传递给请求,您可以按照以下操作。它在目标C中,将其转换为swift

NSURL *url = [NSURL URLWithString: @"http://your_url.com"];
NSString *body = [NSString stringWithFormat: @"token=%@",varToken];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL: url];
[request setHTTPMethod: @"POST"];
[request setHTTPBody: [body dataUsingEncoding: NSUTF8StringEncoding]];
[webView loadRequest: request];

为了在应用程序和webview之间共享会话,需要在它们之间共享cookies,因此在加载webview之前,请设置cookies

在此函数中,传递cookie并将请求值设置为
myRequest

var myRequest : URLRequest?

func setCookie(cookie:HTTPCookie) {
    let setCookites = DispatchQueue(label: "perform_task_with_cookies")
    let loadWebview = DispatchQueue(label: "perform_task_with_loadwebview")
    setCookites.sync {
        if #available(iOS 11.0, *) {
            webView.configuration.websiteDataStore.httpCookieStore.setCookie(cookie, completionHandler: nil)
        } else {
            HTTPCookieStorage.shared.setCookie(cookie)
            HTTPCookieStorage.shared.cookieAcceptPolicy = HTTPCookie.AcceptPolicy.always
            myRequest?.allHTTPHeaderFields = HTTPCookie.requestHeaderFields(with: HTTPCookieStorage.shared.cookies!)
            myRequest?.httpShouldHandleCookies = true
        }
    }
    loadWebview.sync {
        if let request = self.myRequest {
            self.webView.load(request)
        }
    }
}

为了在应用程序和webview之间共享会话,需要在它们之间共享cookies,因此在加载webview之前,请设置cookies

在此函数中,传递cookie并将请求值设置为
myRequest

var myRequest : URLRequest?

func setCookie(cookie:HTTPCookie) {
    let setCookites = DispatchQueue(label: "perform_task_with_cookies")
    let loadWebview = DispatchQueue(label: "perform_task_with_loadwebview")
    setCookites.sync {
        if #available(iOS 11.0, *) {
            webView.configuration.websiteDataStore.httpCookieStore.setCookie(cookie, completionHandler: nil)
        } else {
            HTTPCookieStorage.shared.setCookie(cookie)
            HTTPCookieStorage.shared.cookieAcceptPolicy = HTTPCookie.AcceptPolicy.always
            myRequest?.allHTTPHeaderFields = HTTPCookie.requestHeaderFields(with: HTTPCookieStorage.shared.cookies!)
            myRequest?.httpShouldHandleCookies = true
        }
    }
    loadWebview.sync {
        if let request = self.myRequest {
            self.webView.load(request)
        }
    }
}

我只希望应用程序的用户已经登录到webview,但我不知道如何登录。我只希望应用程序的用户已经登录到webview,但我不知道如何登录。