ios - facebooksdk 无法快速获取 accesstoken

标签 ios swift firebase facebook-sdk-4.0

我有一个带有两个按钮的简单 View Controller 。第一个是我使用

获得的官方 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 次会正常。

编辑: 好吧,在网上查看更多,我看到了它,因为我之前尝试获取访问 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/

相关文章:

ios - MPMoviePlayerController 完成按钮,横向

ios - InApp Purchase 产品列表不会在 iPhone 应用程序中加载

ios - Alamofire - 调用中的额外参数 'method'

ios - 辅助功能兼容的格式化时间字符串

javascript - Firebase Web 注销不会发送任何 XHR

node.js - Firebase Cloud Firestore 触发器 context.auth 始终为 null

ios - 根据包含背景图像的文本的宽度拉伸(stretch) UILabel 的宽度

ios - 使用RxSwift Observables进行递归调用

swift - 反正有日志功能吗?

android - 火力地堡数据库 : Check if node has no children?