在iOS iOS SDK v4.0中可靠地检查应用程序启动时的活动会话

我正在用Facebook的iOS SDK 4.0创build一个iOS应用程序,使用一个简单的Facebooklogin对话框与FBSDKLoginButton视图类。

在上次成功login后启动应用程序时,该button正确显示为“已login”状态,即显示“注销”文本。

但是, [FBSDKAccessToken currentAccessToken]为零,这就是为什么我的应用程序无意识到活动会话,因此不会用数据填充FB相关字段。

由于FBSession类在FB iOS SDK4.0中不再存在,我怎样才能正确地确定一个caching的会话是否存在?

我认为[FBSDKAccessToken currentAccessToken]是做这件事的方法。 但是,如前所述, currentAccessToken没有设置…任何想法,为什么它可能是零,或如何正确检测一个活动/caching会话?

编辑:我把调用currentAccessToken在我的主视图控制器,其中包含Facebooklogin对话框广告button的viewDidLoad方法。 不幸的是,currentAccessToken是零,如上所述。 任何build议,为什么不可用?

EDIT2:Bigman解决了这个问题(在他的回答中看到他的评论):在viewDidAppear取得currentAccessToken ,而不是viewDidLoad

得到这个令牌的方法是你将要提供一个委托这个FBSDKLoginButton。 我使我的一个视图控制器符合FBSDKLoginButtonDelegate和我的实现

 func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) { let token = result.token println(token) } 

在故事板中,我将这个视图控制器设置为FBSDKLoginButton。 令牌在运行时不是零。

[我的第二次尝试]

 func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) { let token = result.token let accessToken = FBSDKAccessToken.currentAccessToken() println(accessToken) } 

所以我就自己碰到了这个

目标:在应用程序启动时,如果已经从上次成功的login尝试中获取了令牌,请执行一些替代逻辑(在我的情况下,直接启动到不同的视图控制器)。

这里的关键是Dheeraj最初提出的。

 [[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions]; 

你打电话给他们共同的代表,那就是他们什么时候醒来。 所以代码示例。 这可能是一个非常糟糕的做法,我不确定,这只是我如何得到它的工作。

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [FBSDKLoginButton class]; [FBSDKProfile enableUpdatesOnAccessTokenChange:YES]; NSLog(@"What the heck, no token? %@", [FBSDKAccessToken currentAccessToken]); //Output: What the heck, no token? (nil) BOOL fbDidFinish = [[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions]; NSLog(@"Hey! My Token! %@", [FBSDKAccessToken currentAccessToken]); //Output: Hey! My Token! <FBSDKAccessToken: 0x7fddf8d136a0> //Your address in memory will be different //At this point, you can do additional logic based on having the Token, like skipping ahead to a different ViewController return fbDidFinish; } 

假设您已经成功login过一次,则应在第二个日志输出中看到您的访问令牌。 希望这可以帮助。

在您的AppDelegate didFinishLaunchingWithOptions中添加以下内容:

 return [[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions]; 

当用户login时,这会得到你[FBSDKAccessToken currentAccessToken]。

请参阅: https : //developers.facebook.com/docs/ios/getting-started#startcoding