得到一个非常奇怪的错误,尝试使用一些非常简单的代码。
import SafariService
class ViewController: UIViewController{
///All my stuff
@IBAction func connectToReddit(){
let authURL = URL(string: "https://www.reddit.com/api/v1/authorize?client_id=myID&response_type=code&state=myState&redirect_uri=myRedirectURI&duration=permanent&scope=myscopes")
let scheme = "redditwatch://"
let authSession = SFAuthenticationSession(url: authURL!, callbackURLScheme: scheme, completionHandler: { (url, error) in
print(url?.absoluteString)
print(error?.localizedDescription)
})
authSession.start()
}
}
据我了解,authSession.start()
向用户显示UIAlertController
,其中我的代码 ,但控制器会在之后消失,错误
[Warning] Attempting to load the view of a view controller while it is deallocating is not allowed and may result in undefined behavior (<SFAuthenticationViewController: 0x7fc1c201f600>)
您认为创建此身份验证流程会更简单,但显然不是。
感谢任何输入,谢谢
答案 0 :(得分:3)
您需要在顶层保留对SFAuthenticationSession的引用。 这应该纠正这个问题:
import SafariService
class ViewController: UIViewController{
var authSession: SFAuthenticationSession?
///All my stuff
@IBAction func connectToReddit(){
let authURL = URL(string: "https://www.reddit.com/api/v1/authorize?client_id=myID&response_type=code&state=myState&redirect_uri=myRedirectURI&duration=permanent&scope=myscopes")
let scheme = "redditwatch://"
authSession = SFAuthenticationSession(url: authURL!, callbackURLScheme: scheme, completionHandler: { (url, error) in
print(url?.absoluteString)
print(error?.localizedDescription)
})
authSession?.start()
}
}
对此媒体帖子的此修补程序的评价:https://medium.com/the-traveled-ios-developers-guide/ios-11-privacy-and-single-sign-on-6291687a2ccc 我在官方文档中找不到对范围问题的引用。
编辑:official documentation现在声明&#34;确保在会话进行时存在对SFAuthenticationSession实例的强引用。&#34;这似乎表明需要在会议范围内推动会议。这是由于SFAuthenticationSession初始化程序显示同意对话框时发生的行为。
Edit2:SFAuthenticationSession在iOS 12中已弃用,并替换为ASWebAuthenticationSession。但是,ASWebAuthenticationSession具有相同的范围要求。 This blog对如何转换有很好的描述。