iOS Facebook访问令牌没有缓存

问题描述:

我有一个自定义按钮,我用Facebook登录,它工作正常,直到最近。访问令牌已被缓存,并且在用户下次启动应用程序时,继续按钮将显示在其位置上。iOS 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()是返回nil如果在viewDidLoad()中调用,但如果我从一个按钮调用它,按下它将按预期返回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中存在问题。我恢复了使用故事板的代码,问题得到了解决 - 对于有类似问题的任何人来说,这本身并不是一个解决方案,但对我来说这足够了。