在应用程序和应用程序内的webview中共享会话-IOS Swift
您好,我有一个用swift编写的IOS应用程序,该应用程序已登录,成功登录后,该应用程序将进入具有在应用程序和应用程序内的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
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,但我不知道如何登录。