我一直使用函数FBSDKAccessToken.currentAccessToken()来检索FB token ,该 token 工作正常,直到我在swift 3和4.17 SDK中迁移了我的应用程序。
现在,该函数已重命名为FBSDKAccessToken.current(),并且在重新加载应用程序委托(delegate)时为nil。
我已经进行了一些测试,并且在重新启动应用程序并且之前已经登录FB后设法获得了 token ,但这不是我所期望的行为。

编辑:我恢复到4.15,它又重新工作。

这是我的AppDelegate中的代码:

func applicationDidBecomeActive(_ application: UIApplication)
{

    FBSDKAppEvents.activateApp();

}

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any)  -> (Bool)
{

    let wasHandled: Bool = FBSDKApplicationDelegate.sharedInstance().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.sharedInstance().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;
}

谢谢你的帮助 :)
丹尼斯

最佳答案

由于某种原因,这不再起作用。

如果使用的是FBSDKLoginButton,则必须使用FBSDKLoginButtonDelegate等待回调。

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")
    }
}

或者,您也可以使用FBSDKLoginManager。在此处查看文档:



希望对您有所帮助!

07-27 14:42