Macos 如何在Swift中捕获重定向URL(在OAuth2的身份验证步骤之后)

Macos 如何在Swift中捕获重定向URL(在OAuth2的身份验证步骤之后),macos,cocoa,swift,oauth,oauth-2.0,Macos,Cocoa,Swift,Oauth,Oauth 2.0,我不熟悉斯威夫特。在用户授权我的应用程序使用他们的帐户后,我需要帮助捕获重定向URL。重定向URL包含我将交换为令牌的身份验证代码 我在旋转,试图使用NSURLSessionDataDelegate: class MySessionDelegate: NSObject, NSURLSessionDataDelegate { func URLSession(_: NSURLSession, task: NSURLSessionTask, willPerformHTTPRedirection

我不熟悉斯威夫特。在用户授权我的应用程序使用他们的帐户后,我需要帮助捕获重定向URL。重定向URL包含我将交换为令牌的身份验证代码

我在旋转,试图使用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
    }
}

提前感谢。

如果您在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
。根据您是否希望webView实际加载请求,您可以决定返回true或false。在典型的重定向场景中,您将看到使用
myWebView.loadRequest(request)
创建的第一个请求。如果用户正在单击链接或与页面交互,您可能会看到其他请求,但它们的导航类型将不是
UIWebViewNavigationType.other
,而是类似
.LinkClicked
.FormSubmitted