No se puede recuperar el token actual de FBSDKAccessToken correctamente en swift 3 / FBSDK 4.17

Estaba usando la function FBSDKAccessToken.currentAccessToken () para recuperar el token de FB, que funcionaba correctamente, hasta que he migrado mi aplicación en swift 3 y 4.17 SDK. Ahora, la function se ha cambiado a FBSDKAccessToken.current () y es nil cuando el delegado de la aplicación vuelve a cargar. Realicé algunas testings y logré get el token después de reiniciar mi aplicación y ya he iniciado session en FB anteriormente, pero ese no es el comportamiento que esperaba.

EDIT: Volví a 4.15 y está volviendo a trabajar.

Aquí está el código en mi AppDelegate:

func applicationDidBecomeActive(_ application: UIApplication) { FBSDKAppEvents.activateApp(); } func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> (Bool) { let wasHandled: Bool = FBSDKApplicationDelegate.shanetworkingInstance().application(application ,open:url ,sourceApplication:sourceApplication ,annotation:annotation) if (wasHandled) { if let fbtoken = FBSDKAccessToken.current() { loginWithFacebook(fbtoken.tokenString); }else{ print("no current token") } } return wasHandled } func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { let wasHandled: Bool = FBSDKApplicationDelegate.shanetworkingInstance().application( app, open: url as URL!, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String, annotation: options[UIApplicationOpenURLOptionsKey.annotation] ) if (wasHandled) { if let fbtoken = FBSDKAccessToken.current() { loginWithFacebook(fbtoken.tokenString); }else{ print("no current token") } } return wasHandled; } 

Gracias por su ayuda 🙂 Denis

Por alguna razón, esto ya no funciona.

Si está utilizando el FBSDKLoginButton , debe usar FBSDKLoginButtonDelegate para esperar la callback.

 class LoginView: UIViewController, FBSDKLoginButtonDelegate { @IBOutlet weak var facebookButton: FBSDKLoginButton! override func viewDidLoad() { facebookButton.delegate = self } //Called at the end of the user connection func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) { if ((error) != nil) { //Process error } else if result.isCancelled { // Handle cancellations print("result is canceled") } else { if let fbToken = result.token.tokenString { print(fbToken) } } } func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!) { print("logout from FB") } } 

Alternativamente, puede usar FBSDKLoginManager también. Echa un vistazo a la documentation aquí:

https://developers.facebook.com/docs/reference/ios/current/class/FBSDKLoginManager/

Espero que esto ayude !