我是Swift的新手。在用户授权我的应用程序使用其帐户后,我需要帮助捕获重定向URL。重定向URL包含我将为令牌交换的auth_code。
我在圈子里试图使用NSURLSessionDataDelegate:
class MySessionDelegate: NSObject, NSURLSessionDataDelegate {
func URLSession(_: NSURLSession, task: NSURLSessionTask, willPerformHTTPRedirection: NSHTTPURLResponse, newRequest: NSURLRequest, completionHandler: (NSURLRequest!) -> Void) {
println(newRequest)
println("hello")
}
}
但它没有被调用:
var authUrl = NSURL(string: "https://www.linkedin.com/uas/oauth2/authorization?response_type=\(responseType)" +
"&client_id=\(apiKey)" +
"&state=\(randomState)" +
"&redirect_uri=\(redirectUrl)")
var session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration(), delegate: MySessionDelegate(), delegateQueue: nil)
var request = NSMutableURLRequest(URL: authUrl!)
myWebView.loadRequest(request)
然后我添加了NSURLProtocol来打印请求(我可以在控制台中看到重定向URL),但这适用于会话中非最佳的所有请求:
var requestCount = 0
class urlProtocol: NSURLProtocol {
override class func canInitWithRequest(request: NSURLRequest) -> Bool {
println("Request #\(requestCount++): URL = \(request.URL.absoluteString)")
return false
}
}
提前致谢。
答案 0 :(得分:0)
如果您实际在URLSession上运行任务,那么您的方法将在UIWebView之外工作。使用UIWebView,您不会(至少直接)使用URLSession API。就像你用NSURLProtocol所说的那样,你将捕获每条线路上的请求。
UIWebView有一个您可以使用的委托。您必须确保viewController是UIWebView的委托,然后从UIWebViewDelegate协议实现此方法。
optional func webView(webView: UIWebView,
shouldStartLoadWithRequest request: NSURLRequest,
navigationType: UIWebViewNavigationType) -> Bool
{
return true
}
请求中包含url,但导航类型为UIWebViewNavigation.Other
。您可以决定返回true或false,具体取决于您是否希望webView实际加载请求。在典型的重定向方案中,您会看到使用myWebView.loadRequest(request)
创建的第一个请求。如果用户点击链接或与网页互动,您可能会看到其他请求,但其导航类型不是UIWebViewNavigationType.Other
,而是.LinkClicked
或.FormSubmitted
。