facebooksdk无法获得快速访问权限

时间:2017-07-21 16:42:28

标签: ios swift firebase facebook-sdk-4.0

我有一个带有两个按钮的简单视图控制器。第一个是我用的官方facebook登录按钮

let loginButton = FBSDKLoginButton()

顺便说一句,如何查看FBSDKLoginButton的实现?我试过命令点击,我没有看到init函数。 无论如何,这个按钮工作正常。我可以登录,我可以使用

获取accessToken
accessToken = FBSDKAccessToken.current()

但是每当我创建自己的登录按钮并使用

登录时
FBSDKLoginManager().logIn(withReadPermissions: ["email", "public_profile"], from: self) { (result, err) in
            if err != nil {
                print("Custom FB login failed", err ?? "")
                return
            }
        }

我当前的accessToken返回nil。我无法弄清楚为什么它适用于普通按钮但不适用于我自己的按钮。我做错了什么?

为了使这更奇怪,有时两个按钮都能正常工作。这就像它失败了9/10倍,但是当我重新启动应用程序时,它会工作1/10倍。

编辑: 好的在线查看我看到了它,因为我试图在

之前获取访问令牌
FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
在app委托中调用

。但这引出了一个问题。为什么我不必担心原始按钮的问题,但我是为自定义按钮做的?如何确保首先调用委托方法?

编辑:现在我在我的代码中放了一个print语句,我发现该方法只会被调用一次。所以这不是问题。

编辑:为了清楚起见,自定义按钮允许我获得正确的令牌,但不能在我登录后立即获得。我必须等待一段时间。但我不知道要等多久。

最终编辑:我想我已经解决了。我现在将FBSDKAccessToken.current()放在facebook登录管理器的完成处理程序中。中提琴!到目前为止,这似乎有效。不确定为什么在线教程都没有这样做,但希望它没有任何问题。

1 个答案:

答案 0 :(得分:0)

如果错误为零,则accessToken位于 FBSDKAccessToken.currentAccessToken()

Swift 2

if let token = FBSDKAccessToken.currentAccessToken() {

     let accessToken = token.tokenString
     // USE YOUR TOKEN HERE
}