ios9: FBSDK currentAccessToken nil
Posted
技术标签:
【中文标题】ios9: FBSDK currentAccessToken nil【英文标题】: 【发布时间】:2016-08-28 06:58:35 【问题描述】:FBSDKAccessToken currentAccessToken nil after quitting app
我查看了许多相关线程,我的案例中的解决方案仍然难以辨认。
这是我的 AppDelegate.swift 文件:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
if let accessToken = FBSDKAccessToken.currentAccessToken()
print(accessToken)
else
print("Not logged In.")
return true
func application(application: UIApplication,
openURL url: NSURL, options: [String: AnyObject]) -> Bool
return GIDSignIn.sharedInstance().handleURL(url,
sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey] as? String,
annotation: options[UIApplicationOpenURLOptionsAnnotationKey])
func application(application: UIApplication, openURL url:NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool
return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url,sourceApplication: sourceApplication, annotation: annotation)
所以在应用启动时,accessToken
就是nil
。
当我尝试刷新访问令牌时,它不会这样做,因为您无法引用零用户访问令牌。我想也许它缓存了一个过期的用户令牌。这仍然很奇怪,因为我正在调用应该返回当前用户令牌的 FBSDK,即使它已过期。在我的情况下,它返回nil
。
这是我尝试使用 currentAccessToken
的方法
func fetchFBInfoForLogin()
let parameters = ["fields": "email, first_name, last_name"]
if (FBSDKAccessToken.currentAccessToken() != nil)
print("current access token is not nil")
// User is logged in, do work such as go to next view controller.
let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphpath: "me", parameters: nil)
graphRequest.startWithCompletionHandler( (connection, result, error) -> Void in
if ((error) != nil)
// Process error
print("Error: \(error)")
else
print(result.valueForKey("id") as? String)
print(result.valueForKey("name") as? String)
print(result.valueForKey("email") as? String)
)
else
//refresh
FBSDKAccessToken.refreshCurrentAccessToken (connection, result, error) -> Void in
if error != nil
print(error)
return
print(FBSDKAccessToken.currentAccessToken())
print("refresh doesn't work?")
let parameters = ["fields": "email, first_name, last_name"]
let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: parameters)
graphRequest.startWithCompletionHandler( (connection, result, error) -> Void in
if ((error) != nil)
// Process error
print("Error: \(error)")
else
print(result.valueForKey("id") as? String)
print(result.valueForKey("name") as? String)
print(result.valueForKey("email") as? String)
)
供日后参考:
我没有将我的 FBSDK 委托调用放在正确的 AppDelegate
方法中,就像这个 SO 帖子:Facebook SDK login never calls back my application on ios 9
因此我必须手动关闭我的 FB 登录,这导致回调结果为 result.isCancelled
,因此我没有获得任何用户令牌。
【问题讨论】:
【参考方案1】:如果您想要来自登录和注销事件的通知,请实现FBSDKLoginButtonDelegate 协议。
class FirstViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, FBSDKLoginButtonDelegate
func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!)
if ((error) != nil)
// Process error
else if result.isCancelled
// Handle cancellations
else
let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields" : "id, email, name"])
graphRequest.startWithCompletionHandler( (connection, result, error) -> Void in
if ((error) != nil)
//print("Error: \(error)")
else
if let user : NSString = result!.valueForKey("name") as? NSString
print("user: \(user)")
if let id : NSString = result!.valueForKey("id") as? NSString
print("id: \(id)")
if let email : NSString = result!.value(forKey: "email") as? NSString
print("email: \(email)")
)
HTH。
【讨论】:
我没有处理result.isCancelled
案例,这是 FBSDK 委托方法处理程序返回的内容。这是什么意思?
我不确定是否诚实。 :-) 我不记得代码是从哪里来的,可能是修改为 swift 2。通常是错误或 OK,通常是 OK。以上是关于ios9: FBSDK currentAccessToken nil的主要内容,如果未能解决你的问题,请参考以下文章
iOS 9 和 10 (FB SDK 4.2.0) 上的 FBSDKAppInviteDialog 停止在“showFromViewController”上加载
如何在 iOS 9 fb sdk 4.8 或更高版本中从 facebook 获取好友列表?
缩小了最后一个 FB iOS SDK 的 iOS 9 上的 Facebook 应用邀请
Xcode 10 FBSDK 'SDKLoggingBehavior
架构 arm64 的未定义符号:FBSDK View Hierarchy 引用自:FBSDK Marketing Kit
在 XCode 7.0.1 中将 FB SDK(版本 4.7.0)与 iOS 9 集成时出错:canOpenURL:URL 失败:“fbauth2:/”