无法在 swift 3 / FBSDK 4.17 中正确检索 FBSDKAccessToken 当前令牌

Posted

技术标签:

【中文标题】无法在 swift 3 / FBSDK 4.17 中正确检索 FBSDKAccessToken 当前令牌【英文标题】:Can't retrieve FBSDKAccessToken current token correctly in swift 3 / FBSDK 4.17 【发布时间】:2016-11-22 18:51:07 【问题描述】:

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

编辑:我恢复到 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;

感谢您的帮助 :) 丹尼斯

【问题讨论】:

我还回滚了 pod 'FBSDKCoreKit'、'4.15.0' pod 'FBSDKLoginKit'、'4.15.0' pod 'FBSDKShareKit'、'4.15.0' 并关注了***.com/a/41119777/1220633 现在可以工作了在真机和模拟器上都可以。 【参考方案1】:

由于某种原因,这不再有效。

如果您使用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。在此处查看文档:

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

希望对您有所帮助!

【讨论】:

以上是关于无法在 swift 3 / FBSDK 4.17 中正确检索 FBSDKAccessToken 当前令牌的主要内容,如果未能解决你的问题,请参考以下文章

如何在swift 3中使用FBSDK获取fb页面列表或其位置ID

如何在 iPhone 的 Swift iOS 中使用 FBSDK 获取用户电子邮件地址?

Swift FBSDK 问题 - 某些用户的 Facebook ID 为零

通过 Pod 安装的 FBSDK - Swift 上没有这样的模块

在 Swift 的 FBSDK 中切换 FB 用户的问题

FBSDK 检查用户是不是已经授权应用程序 Swift