gpt4 book ai didi

iOS 12 - AppAuth 重定向 URL 不触发 AppDelegate

转载 作者:行者123 更新时间:2023-11-29 05:43:33 24 4
gpt4 key购买 nike

我在我的代码中使用AppAuth

我设法成功进行身份验证,但是当 SFSafariViewController 从我的 Controller 中关闭时,重定向网址不会触发 AppDelegate func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool

重定向 URL 是我的 bundle 标识符名称:BundleIdentifier://authenticate

我在 info.plist 中设置了 url 方案和 url 标识符,它们具有相同的名称。

当我运行代码并在此函数上设置断点时,我可以看到我的重定向网址对于 standardizedURLstandardizedRedirectURL 是正确的

- (BOOL)shouldHandleURL:(NSURL *)URL {
NSURL *standardizedURL = [URL standardizedURL];
NSURL *standardizedRedirectURL = [_request.redirectURL standardizedURL];

return OIDIsEqualIncludingNil(standardizedURL.scheme, standardizedRedirectURL.scheme) &&
OIDIsEqualIncludingNil(standardizedURL.user, standardizedRedirectURL.user) &&
OIDIsEqualIncludingNil(standardizedURL.password, standardizedRedirectURL.password) &&
OIDIsEqualIncludingNil(standardizedURL.host, standardizedRedirectURL.host) &&
OIDIsEqualIncludingNil(standardizedURL.port, standardizedRedirectURL.port) &&
OIDIsEqualIncludingNil(standardizedURL.path, standardizedRedirectURL.path);

但是当 AppAuth 完成身份验证并且我有一个 访问 token 时,func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [ :]) -> Bool 不会被触发。

知道为什么吗?

这是我的代码

class func signInAuth(discoveryURLstr: String,presenter : UIViewController,completionHandler: @escaping ( (OIDAuthState?,Error?) -> () )){

guard let discoveruURL = URL(string: discoveryURLstr) else{
completionHandler(nil,AuthErrors.InvalidDiscoveryURL)
return
}

appAuthDiscoverConfiguration(discoveryURL: discoveruURL) { (configurationFile, error) in

guard let configurationFile = configurationFile else {
completionHandler(nil,AuthErrors.InvalidConfigurationFile)
return
}

let authRequest = appAuthRequest(configurationFile: configurationFile)

self.appAuthenticationSession = OIDAuthState.authState(byPresenting: authRequest, presenting: presenter, callback: { (state, error) in

if let error = error {
//self.authState = nil
completionHandler(nil,error)
return
}

if let state = state {
self.authState = state
completionHandler(state,nil)

}else{
completionHandler(nil,AuthErrors.InvalideState)
}
})

}


}

class func appAuthDiscoverConfiguration(discoveryURL : URL, completionHandler: @escaping ((OIDServiceConfiguration?,Error?) -> ())) {

OIDAuthorizationService.discoverConfiguration(forDiscoveryURL: discoveryURL) { (configuration, error) in

if let error = error {
completionHandler(nil,error)
return
}else{
guard let configurationFile = configuration else {
completionHandler(nil,AuthErrors.InvalidConfigurationFile)
return
}
completionHandler(configurationFile,nil)
}

}

}

class func appAuthRequest(configurationFile : OIDServiceConfiguration) -> OIDAuthorizationRequest{

return OIDAuthorizationRequest(configuration: configurationFile, clientId: AppAuthConstants.clientId, clientSecret: nil, scope: AppAuthConstants.scope, redirectURL: AppAuthConstants.redirectURL, responseType: AppAuthConstants.responseType, state: nil, nonce: nil, codeVerifier: nil, codeChallenge: nil, codeChallengeMethod: nil, additionalParameters: AppAuthConstants.additionalParameters)
}

最佳答案

在 iOS 12 上,App-Auth 使用 ASWebAuthenticationSession,在 iOS 11 上,它使用现已弃用的 SFAuthenticationSession,而不是要求应用支持手动处理重定向。为了支持早期版本的 iOS,您仍然需要在 func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool 方法。

作为引用,您可以查看 AppAuth 在幕后所做的事情 here 。另外,this这是一个很好的答案,它解释了如何在不使用 AppAuth 的情况下在 iOS 上一般获取 OAuth token 。

关于iOS 12 - AppAuth 重定向 URL 不触发 AppDelegate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56349802/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com