我有一个带有两个按钮的简单 View Controller 。第一个是我使用
获得的官方 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 次会正常。
编辑: 好吧,在网上查看更多,我看到了它,因为我之前尝试获取访问 token
FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
在应用程序委托(delegate)中调用。但这引出了一个问题。为什么我不必担心原始按钮的问题,但我需要担心自定义按钮的问题?如何确保首先调用委托(delegate)方法?
编辑:现在我在代码中添加了一条 print 语句,我发现该方法只被调用一次。所以不,这不是问题。
编辑:需要明确的是,自定义按钮允许我获得正确的 token ,但不能在登录后立即获得。我必须等待一段时间。但不知道要等多久。
最终编辑:我想我已经解决了。我现在将 FBSDKAccessToken.current() 放入 facebook 登录管理器的完成处理程序中。中提琴!到目前为止这似乎有效。不确定为什么在线教程都不需要这样做,但希望它可以正常工作。
最佳答案
如果错误为零,则 accessToken 位于 FBSDKAccessToken.currentAccessToken()
swift 2
if let token = FBSDKAccessToken.currentAccessToken() {
let accessToken = token.tokenString
// USE YOUR TOKEN HERE
}
关于ios - facebooksdk 无法快速获取 accesstoken,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45242751/