首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >应用程序中的共享会话和应用程序内的webview - IOS Swift

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

Stack Overflow用户
提问于 2015-07-10 13:53:18
回答 2查看 2.4K关注 0票数 1

嗨,我有在swift编写的IOS应用程序,有登录和成功登录后,应用程序序列号的活动,有webView

应用程序和网站共享相同的api。登录的过程是提供正确的username并返回password token

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

代码语言:javascript
复制
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代码

代码语言:javascript
复制
let requestURL = NSURL(string: "myURL")
let request = NSMutableURLRequest(URL: requestURL!)

webView.loadRequest(request)

我需要在webview中显示网站它正在发生,但我需要将会话共享到webview,因为它们与应用程序共享相同的api。

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

EN

回答 2

Stack Overflow用户

发布于 2015-07-10 14:11:12

如果您想将token作为主体传递给Request,您可以像Objective C中的below.It那样将其转换为swift。

代码语言:javascript
复制
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];
票数 0
EN

Stack Overflow用户

发布于 2020-04-06 16:20:55

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

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

代码语言:javascript
复制
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)
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31333398

复制
相关文章

相似问题

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