У меня есть пользовательская кнопка, которую я использую для входа в Facebook, и она работала нормально до недавнего времени. Маркер доступа был кэширован, и в следующий раз, когда пользователь запустил приложение, на нем была отображена кнопка продолжения.iOS Facebook Access Token not caching
В последнее время отмеченная строка возвращает нуль независимо от того, был ли пользователь ранее зарегистрирован. Я не понимаю, почему - я не внес никаких изменений кода в эту часть приложения?
Иногда Войти потерпит неудачу со следующей ошибкой также:
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)
}
})
}
EDIT: На дальнейших испытаний, кажется, что вызов FBSDKAccessToken.currentAccessToken() возвращает ноль если вызывается в 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")
}
}