在使用ASWebAuthenticationSession时,重定向行为可能会因为不同的网站而不一致。为了解决这个问题,你可以尝试使用以下方法:
下面是一个使用SFAuthenticationSession的示例代码:
if #available(iOS 11.0, *) {
let url = // 需要授权的网站URL
let callbackURLScheme = // 你的app的回调URL scheme
if let authURL = URL(string: url), let callbackURL = URL(string: callbackURLScheme) {
let session = SFAuthenticationSession(url: authURL, callbackURLScheme: callbackURL.scheme) { (callbackURL, error) in
// 处理回调URL或错误
}
session.start()
}
} else {
// 处理不支持iOS 11以下版本的情况
}
下面是一个使用WKWebView的示例代码:
import WebKit
class AuthViewController: UIViewController, WKNavigationDelegate {
var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
let webViewConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: view.bounds, configuration: webViewConfiguration)
webView.navigationDelegate = self
view.addSubview(webView)
let url = // 需要授权的网站URL
let request = URLRequest(url: url)
webView.load(request)
}
// 处理重定向URL
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if let url = navigationAction.request.url {
// 判断是否为回调URL
if url.scheme == // 你的app的回调URL scheme {
// 处理回调URL
// ...
// 取消WKWebView的加载
decisionHandler(.cancel)
return
}
}
// 允许WKWebView加载请求
decisionHandler(.allow)
}
}
以上是两种可能的解决方法,你可以根据你的需求选择适合你的方法。