我有一个用于Facebook登录的自定义按钮,直到最近才正常工作。访问令牌被缓存,下次用户启动应用程序时,继续按钮显示在其位置。
然而,最近标记的行返回nil,无论用户以前是否登录过。我在一个损失,为什么-我没有做任何代码更改在这部分的应用程序?
偶尔登录也会失败,并出现以下错误:
Error Domain=com.facebook.sdk.login Code=308 "(null)"
下面是我的代码:
override func viewDidLoad() {
super.viewDidLoad()
if (FBSDKAccessToken.currentAccessToken() == nil){ // <<<< ALWAYS RETURNS NIL
self.continueButton.hidden = true
} else {
self.loginButton.hidden = true
self.notYouButton.hidden = false
}
}
@IBAction func loginPressed(sender: AnyObject) {
let permissions = ["user_about_me","user_relationships","user_birthday","user_location","user_status","user_posts", "user_photos"]
let login = FBSDKLoginManager()
login.logInWithReadPermissions(permissions, handler: {
(FBSDKLoginManagerLoginResult result, NSError error) -> Void in
if(error == nil){
self.loginButton.hidden = true
self.continueButton.hidden = false
self.notYouButton.hidden = false
self.notYouButton.enabled = false
//self.performSelector("showBrowse", withObject: nil, afterDelay: 1.0)
} else {
print(error)
}
})
}
编辑:在进一步的测试中,似乎调用FBSDKAccessToken.currentAccessToken()如果在viewDidLoad()中调用,则返回nil,但如果我从按钮按下调用它,则按预期返回Facebook令牌。
override func viewDidLoad() {
super.viewDidLoad()
if let token = FBSDKAccessToken.currentAccessToken() {
print (token)
} else {
print ("no token") <<<<< RETURNS
}
}
@IBAction func buttonPressed(sender: AnyObject) {
if let token = FBSDKAccessToken.currentAccessToken() {
print (token) <<<<< RETURNS
} else {
print ("no token")
}
}
我的appDelegate出现了一个问题我在那里设置了一个自定义视图控制器。我将代码还原为使用故事板,问题得到了解决——对于任何有类似问题的人来说,这本身并不是一个解决方案,但对我来说已经足够了。