Facebook iOS SDK 3.0 – 会话未打开

我正在使用最新的Facebook iOS SDK 3.0

我需要在login过程中的帮助:

首先我在AppDelegate.h声明这个属性:

 @property (nonatomic, strong) FBSession *session; 

并在ViewController类我得到这个在代码中使用它,如下所示:

 AppDelegate *delegate = [[UIApplication sharedApplication]delegate]; [delegate.session someproperty]; 

我也有ViewController中的这个方法,从viewDidLoad调用:

 -(void)login { AppDelegate *delegate = [[UIApplication sharedApplication]delegate]; [delegate.session accessToken]; NSLog(@"%d",delegate.session.isOpen); if (!delegate.session.isOpen) { delegate.session = [[FBSession alloc] init]; if (delegate.session.state == FBSessionStateCreatedTokenLoaded) { [delegate.session openWithCompletionHandler:^(FBSession *session, FBSessionState status, NSError *error) { NSLog(@"%d", delegate.session.isOpen); // First Line ////////////////// }]; } NSLog(@"%@", delegate.session.description); // Second Line ////////////////// } } 

facebook应用获得授权后,第一个NSLog打印为零,第二个NSLog表明session状态是FBSessionStateCreated而不是FBSessionStateOpen

这是第二个NSLog的输出:

 2012-08-16 18:37:24.327 Facebook3[2418:f803] <FBSession: 0x6890ff0, state: FBSessionStateCreated, loginHandler: 0x0, appID: 193716877424306, urlSchemeSuffix: , tokenCachingStrategy:<FBSessionTokenCachingStrategy: 0x6890f20>, expirationDate: (null), refreshDate: (null), attemptedRefreshDate: 0001-12-30 00:00:00 +0000, permissions:()> 

我在这里错过了什么。

注意:在https://developers.facebook.com的应用程序设置中,我将应用程序configuration为:1-为iOS SSOconfiguration:已启用2- iOS本机深度链接:已启用3- iOS软件包ID:com.mycompany.appname

我用这个框架为我的项目。 它工作正常。 这是我的相关代码

  -(IBAction)logIn:(id)sender; { AppDelegate *appdelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; if (!FBSession.activeSession.isOpen) { [appdelegate sessionOpener]; } else { [self loginHelp]; } 

和我的sessionOpenerfunction是;

  -(void) sessionOpener { [FBSession sessionOpenWithPermissions:nil completionHandler:^(FBSession *session, FBSessionState status, NSError *error) { // session might now be open. if (!error) { [self.viewController loginHelp]; } }]; NSLog(@"%d", FBSession.activeSession.isOpen); NSLog(@"%@", FBSession.activeSession.description ); } 

这个对我有用。 可能对你有帮助。

和我的控制台打印是:

  1 2012-08-16 22:24:55.899 TaraftarlikOyunu[838:c07] <FBSession: 0xd2512c0, state: FBSessionStateOpen, loginHandler: 0xd250240, appID: 433294056715040, urlSchemeSuffix: , tokenCachingStrategy:<FBSessionTokenCachingStrategy: 0xd24fda0>, expirationDate: 2012-10-15 19:02:34 +0000, refreshDate: 2012-08-16 19:05:03 +0000, attemptedRefreshDate: 0001-12-30 00:00:00 +0000, permissions:( )> 

我遇到同样的问题,因为在调用handleOpenURL时,我和FBSession之间使用了FBSession和FBSession的实例。 我改变了

 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { [FBSession.activeSession facebookSession handleOpenURL:url]; } 

对此

 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { [session facebookSession handleOpenURL:url]; }