facebooksdk 无法快速获取访问令牌
Posted
技术标签:
【中文标题】facebooksdk 无法快速获取访问令牌【英文标题】:facebooksdk cannot get accesstoken swift 【发布时间】:2017-07-21 16:42:28 【问题描述】:我有一个带有两个按钮的简单视图控制器。第一个是我得到的官方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)
在应用委托中调用。但这引出了问题。为什么我不必担心原始按钮的问题,而我却为自定义按钮担心?如何确保先调用委托方法?
编辑:现在我在代码中添加了一个 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 无法快速获取访问令牌的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C# 中从 Facebook SDK 获取当前用户访问令牌?不是应用访问令牌