我有一个带有两个按钮的简单视图控制器。第一个是我用的官方facebook登录按钮
let loginButton = FBSDKLoginButton()
顺便说一句,如何查看FBSDKLoginButton的实现?我试过命令点击,我没有看到init函数。 无论如何,这个按钮工作正常。我可以登录,我可以使用
获取accessTokenaccessToken = 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登录管理器的完成处理程序中。中提琴!到目前为止,这似乎有效。不确定为什么在线教程都没有这样做,但希望它没有任何问题。
答案 0 :(得分:0)
如果错误为零,则accessToken位于 FBSDKAccessToken.currentAccessToken()
Swift 2
if let token = FBSDKAccessToken.currentAccessToken() {
let accessToken = token.tokenString
// USE YOUR TOKEN HERE
}