无法在 swift 3 / FBSDK 4.17 中正确检索 FBSDKAccessToken 当前令牌
Posted
技术标签:
【中文标题】无法在 swift 3 / FBSDK 4.17 中正确检索 FBSDKAccessToken 当前令牌【英文标题】:Can't retrieve FBSDKAccessToken current token correctly in swift 3 / FBSDK 4.17 【发布时间】:2016-11-22 18:51:07 【问题描述】:我使用函数 FBSDKAccessToken.currentAccessToken() 来检索 FB 令牌,该令牌工作正常,直到我在 swift 3 和 4.17 SDK 中迁移了我的应用程序。 现在,该函数已重命名为 FBSDKAccessToken.current() 并且在重新加载应用程序委托时为 nil。 我已经进行了一些测试,在我重新启动我的应用程序并且我之前已经登录过 FB 之后,我设法获得了令牌,但这不是我所期望的行为。
编辑:我恢复到 4.15,它又重新工作了。
这是我的 AppDelegate 中的代码:
func applicationDidBecomeActive(_ application: UIApplication)
FBSDKAppEvents.activateApp();
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> (Bool)
let wasHandled: Bool = FBSDKApplicationDelegate.sharedInstance().application(application
,open:url
,sourceApplication:sourceApplication
,annotation:annotation)
if (wasHandled)
if let fbtoken = FBSDKAccessToken.current()
loginWithFacebook(fbtoken.tokenString);
else
print("no current token")
return wasHandled
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool
let wasHandled: Bool = FBSDKApplicationDelegate.sharedInstance().application(
app,
open: url as URL!,
sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String,
annotation: options[UIApplicationOpenURLOptionsKey.annotation]
)
if (wasHandled)
if let fbtoken = FBSDKAccessToken.current()
loginWithFacebook(fbtoken.tokenString);
else
print("no current token")
return wasHandled;
感谢您的帮助 :) 丹尼斯
【问题讨论】:
我还回滚了 pod 'FBSDKCoreKit'、'4.15.0' pod 'FBSDKLoginKit'、'4.15.0' pod 'FBSDKShareKit'、'4.15.0' 并关注了***.com/a/41119777/1220633 现在可以工作了在真机和模拟器上都可以。 【参考方案1】:由于某种原因,这不再有效。
如果您使用FBSDKLoginButton
,则必须使用FBSDKLoginButtonDelegate
来等待回调。
class LoginView: UIViewController, FBSDKLoginButtonDelegate
@IBOutlet weak var facebookButton: FBSDKLoginButton!
override func viewDidLoad()
facebookButton.delegate = self
//Called at the end of the user connection
func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!)
if ((error) != nil)
//Process error
else if result.isCancelled
// Handle cancellations
print("result is canceled")
else
if let fbToken = result.token.tokenString
print(fbToken)
func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!)
print("logout from FB")
或者,您也可以使用 FBSDKLoginManager。在此处查看文档:
https://developers.facebook.com/docs/reference/ios/current/class/FBSDKLoginManager/
希望对您有所帮助!
【讨论】:
以上是关于无法在 swift 3 / FBSDK 4.17 中正确检索 FBSDKAccessToken 当前令牌的主要内容,如果未能解决你的问题,请参考以下文章
如何在swift 3中使用FBSDK获取fb页面列表或其位置ID
如何在 iPhone 的 Swift iOS 中使用 FBSDK 获取用户电子邮件地址?
Swift FBSDK 问题 - 某些用户的 Facebook ID 为零