facebooksdk 无法快速获取访问令牌

Posted

技术标签:

【中文标题】facebooksdk 无法快速获取访问令牌【英文标题】:facebooksdk cannot get accesstoken swift 【发布时间】:2017-07-21 16:42:28 【问题描述】:

我有一个带有两个按钮的简单视图控制器。第一个是我得到的官方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)

在应用委托中调用。但这引出了问题。为什么我不必担心原始按钮的问题,而我却为自定义按钮担心?如何确保先调用委托方法?

编辑:现在我在代码中添加了一个 print 语句,我发现该方法无论如何只被调用一次。所以不,这不是问题。

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

最终编辑:我想我已经解决了。我现在将 FBSDKAccessToken.current() 放入 facebook 登录管理器的完成处理程序中。中提琴!到目前为止,这似乎奏效了。不知道为什么没有在线教程必须这样做,但希望它可以正常工作。

【问题讨论】:

if err != nil 的结果是什么? 错误总是零。换句话说,登录非常好。这是我无法获得的访问令牌。 你试过这个 AccessToken.current 这对我来说不存在。请参阅我的新编辑。调用委托方法时出现问题。 用这个 AccessToken.current!.authenticationToken 试过了吗? 【参考方案1】:

如果 error 为 nil,则 accessToken 在 FBSDKAccessToken.currentAccessToken()

斯威夫特 2

if let token = FBSDKAccessToken.currentAccessToken() 

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

【讨论】:

我没有“currentAccessToken()”。 currentAccessToken() 适用于 Swift 2 对不起,我应该表明我在 Swift 3 上 在 Swift 3 中是 FBSDKAccessToken.current() 并且,正如你所写,这是 != nil 在完成处理程序中

以上是关于facebooksdk 无法快速获取访问令牌的主要内容,如果未能解决你的问题,请参考以下文章

iOS:通过自动登录获取 Facebook 访问令牌

Facebook SDK - 以编程方式获取访问令牌

如何在 C# 中从 Facebook SDK 获取当前用户访问令牌?不是应用访问令牌

用于Azure B2C acces令牌的Exchange Facebook SDK acces令牌

Facebook SDK 3.1 - 验证访问令牌时出错

Android:facebook sdk注销问题?